Skip to content

Commit ddcf5e0

Browse files
authored
Merge pull request #2100 from hexlet-codebattle/tasks-from-dir
populate tasks from json files
2 parents d981186 + 6e99fab commit ddcf5e0

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
defmodule Codebattle.Utils.PopulateTasks do
2+
@moduledoc false
3+
4+
def from_dir!(dir) do
5+
dir
6+
|> File.ls!()
7+
|> Enum.each(&process_file(dir, &1))
8+
end
9+
10+
defp process_file(dir, file) do
11+
dir
12+
|> Path.join(file)
13+
|> File.read!()
14+
|> Jason.decode!(keys: :atoms)
15+
|> Codebattle.Task.upsert!()
16+
end
17+
end
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
defmodule Codebattle.Utils.PopulateTasksTest do
2+
use Codebattle.DataCase, async: true
3+
4+
test "from_dir!" do
5+
dir = Temp.mkdir!()
6+
7+
task1 = """
8+
{
9+
"name": "testtask1",
10+
"level": "elementary",
11+
"examples": "none",
12+
"origin": "user",
13+
"state": "active",
14+
"description_ru": "",
15+
"description_en": "none",
16+
"tags": [],
17+
"visibility": "public",
18+
"input_signature": [{
19+
"argument_name": "ping",
20+
"type": {
21+
"name": "string"
22+
}
23+
}],
24+
"output_signature": {
25+
"type": {
26+
"name": "string"
27+
}
28+
},
29+
"asserts": [{
30+
"arguments": "ping",
31+
"expected": "pong"
32+
}]
33+
}
34+
"""
35+
36+
task2 = """
37+
{
38+
"name": "testtask2",
39+
"level": "medium",
40+
"examples": "none",
41+
"origin": "user",
42+
"state": "active",
43+
"description_ru": "",
44+
"description_en": "none",
45+
"tags": [],
46+
"visibility": "public",
47+
"input_signature": [{
48+
"argument_name": "ping",
49+
"type": {
50+
"name": "string"
51+
}
52+
}],
53+
"output_signature": {
54+
"type": {
55+
"name": "string"
56+
}
57+
},
58+
"asserts": [{
59+
"arguments": "ping",
60+
"expected": "pong"
61+
}]
62+
}
63+
"""
64+
65+
dir
66+
|> Path.join("task1.json")
67+
|> File.write!(task1)
68+
69+
dir
70+
|> Path.join("task2.json")
71+
|> File.write!(task2)
72+
73+
assert Codebattle.Utils.PopulateTasks.from_dir!(dir) == :ok
74+
assert %{name: "testtask2"} = Codebattle.Task |> Ecto.Query.where(name: "testtask2") |> Codebattle.Repo.one!()
75+
end
76+
end

0 commit comments

Comments
 (0)