Skip to content

Commit be83e63

Browse files
alirezagheycmccandless
authored andcommitted
Resolved Issue exercism#1915 (exercism#1916)
* added jinja2 template for etl auto test generation * updated etl tests to v2.0.1 canonical data * minor update to template * Update exercises/etl/.meta/template.j2 Co-Authored-By: Corey McCandless <cmccandless@users.noreply.github.com>
1 parent c055189 commit be83e63

2 files changed

Lines changed: 53 additions & 10 deletions

File tree

exercises/etl/.meta/template.j2

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{%- import "generator_macros.j2" as macros with context -%}
2+
{% macro test_case(case) -%}
3+
{%- set input = case["input"] -%}
4+
def test_{{ case["description"] | to_snake }}(self):
5+
legacy_data = { {% for key, value in case["input"]["legacy"].items() %}
6+
{{key}}: {{value}},{% endfor %} }
7+
data = {{case["expected"]}}
8+
self.assertEqual(
9+
{{ case["property"] | to_snake }}(legacy_data), data
10+
)
11+
{%- endmacro %}
12+
{{ macros.header()}}
13+
14+
class {{ exercise | camel_case }}Test(unittest.TestCase):
15+
{% for supercase in cases %}{% for case in supercase["cases"] -%}
16+
{{ test_case(case) }}
17+
{% endfor %}{% endfor %}
18+
19+
20+
{{ macros.footer() }}

exercises/etl/etl_test.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
from etl import transform
44

5+
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.1
56

6-
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.0
77

88
class EtlTest(unittest.TestCase):
9-
def test_a_single_letter(self):
10-
self.assertEqual(transform({1: ['A']}), {'a': 1})
9+
def test_single_letter(self):
10+
legacy_data = {1: ["A"]}
11+
data = {"a": 1}
12+
self.assertEqual(transform(legacy_data), data)
1113

1214
def test_single_score_with_multiple_letters(self):
1315
legacy_data = {1: ["A", "E", "I", "O", "U"]}
@@ -27,17 +29,38 @@ def test_multiple_scores_with_differing_numbers_of_letters(self):
2729
4: ["F", "H", "V", "W", "Y"],
2830
5: ["K"],
2931
8: ["J", "X"],
30-
10: ["Q", "Z"]
32+
10: ["Q", "Z"],
3133
}
3234
data = {
33-
"a": 1, "b": 3, "c": 3, "d": 2, "e": 1, "f": 4,
34-
"g": 2, "h": 4, "i": 1, "j": 8, "k": 5, "l": 1,
35-
"m": 3, "n": 1, "o": 1, "p": 3, "q": 10, "r": 1,
36-
"s": 1, "t": 1, "u": 1, "v": 4, "w": 4, "x": 8,
37-
"y": 4, "z": 10
35+
"a": 1,
36+
"b": 3,
37+
"c": 3,
38+
"d": 2,
39+
"e": 1,
40+
"f": 4,
41+
"g": 2,
42+
"h": 4,
43+
"i": 1,
44+
"j": 8,
45+
"k": 5,
46+
"l": 1,
47+
"m": 3,
48+
"n": 1,
49+
"o": 1,
50+
"p": 3,
51+
"q": 10,
52+
"r": 1,
53+
"s": 1,
54+
"t": 1,
55+
"u": 1,
56+
"v": 4,
57+
"w": 4,
58+
"x": 8,
59+
"y": 4,
60+
"z": 10,
3861
}
3962
self.assertEqual(transform(legacy_data), data)
4063

4164

42-
if __name__ == '__main__':
65+
if __name__ == "__main__":
4366
unittest.main()

0 commit comments

Comments
 (0)