Skip to content

Commit 45d378e

Browse files
kurtmckeemichaelmior
authored andcommitted
Reformat tests/test_create.py
1 parent d702ecb commit 45d378e

File tree

1 file changed

+61
-129
lines changed

1 file changed

+61
-129
lines changed

tests/test_create.py

Lines changed: 61 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import copy
12
from collections import namedtuple
3+
from contextlib import nullcontext as does_not_raise
24

35
import pytest
46

@@ -7,137 +9,67 @@
79
Params = namedtuple('Params', 'string initial_data insert_val target')
810

911

10-
@pytest.mark.parametrize('string, initial_data, insert_val, target', [
11-
12-
Params(string='$.foo',
13-
initial_data={},
14-
insert_val=42,
15-
target={'foo': 42}),
16-
17-
Params(string='$.foo.bar',
18-
initial_data={},
19-
insert_val=42,
20-
target={'foo': {'bar': 42}}),
21-
22-
Params(string='$.foo[0]',
23-
initial_data={},
24-
insert_val=42,
25-
target={'foo': [42]}),
26-
27-
Params(string='$.foo[1]',
28-
initial_data={},
29-
insert_val=42,
30-
target={'foo': [{}, 42]}),
31-
32-
Params(string='$.foo[0].bar',
33-
initial_data={},
34-
insert_val=42,
35-
target={'foo': [{'bar': 42}]}),
36-
37-
Params(string='$.foo[1].bar',
38-
initial_data={},
39-
insert_val=42,
40-
target={'foo': [{}, {'bar': 42}]}),
41-
42-
Params(string='$.foo[0][0]',
43-
initial_data={},
44-
insert_val=42,
45-
target={'foo': [[42]]}),
46-
47-
Params(string='$.foo[1][1]',
48-
initial_data={},
49-
insert_val=42,
50-
target={'foo': [{}, [{}, 42]]}),
51-
52-
Params(string='foo[0]',
53-
initial_data={},
54-
insert_val=42,
55-
target={'foo': [42]}),
56-
57-
Params(string='foo[1]',
58-
initial_data={},
59-
insert_val=42,
60-
target={'foo': [{}, 42]}),
61-
62-
Params(string='foo',
63-
initial_data={},
64-
insert_val=42,
65-
target={'foo': 42}),
66-
67-
# Initial data can be a list if we expect a list back
68-
Params(string='[0]',
69-
initial_data=[],
70-
insert_val=42,
71-
target=[42]),
72-
73-
Params(string='[1]',
74-
initial_data=[],
75-
insert_val=42,
76-
target=[{}, 42]),
77-
78-
# Converts initial data to a list if necessary
79-
Params(string='[0]',
80-
initial_data={},
81-
insert_val=42,
82-
target=[42]),
83-
84-
Params(string='[1]',
85-
initial_data={},
86-
insert_val=42,
87-
target=[{}, 42]),
88-
89-
Params(string='foo[?bar="baz"].qux',
90-
initial_data={'foo': [
91-
{'bar': 'baz'},
92-
{'bar': 'bizzle'},
93-
]},
94-
insert_val=42,
95-
target={'foo': [
96-
{'bar': 'baz', 'qux': 42},
97-
{'bar': 'bizzle'}
98-
]}),
99-
Params(string='[1].foo',
100-
initial_data=[{'foo': 1},
101-
{'bar': 2}],
102-
insert_val=42,
103-
target=[{'foo': 1},
104-
{'foo': 42,
105-
'bar': 2}],)
106-
])
107-
def test_update_or_create(string, initial_data, insert_val, target):
12+
@pytest.mark.parametrize(
13+
"string, initial_data, expected_result",
14+
(
15+
("$.foo", {}, {"foo": 42}),
16+
("$.foo.bar", {}, {"foo": {"bar": 42}}),
17+
("$.foo[0]", {}, {"foo": [42]}),
18+
("$.foo[1]", {}, {"foo": [{}, 42]}),
19+
("$.foo[0].bar", {}, {"foo": [{"bar": 42}]}),
20+
("$.foo[1].bar", {}, {"foo": [{}, {"bar": 42}]}),
21+
("$.foo[0][0]", {}, {"foo": [[42]]}),
22+
("$.foo[1][1]", {}, {"foo": [{}, [{}, 42]]}),
23+
("foo[0]", {}, {"foo": [42]}),
24+
("foo[1]", {}, {"foo": [{}, 42]}),
25+
("foo", {}, {"foo": 42}),
26+
#
27+
# Initial data can be a list if we expect a list back.
28+
("[0]", [], [42]),
29+
("[1]", [], [{}, 42]),
30+
#
31+
# Convert initial data to a list, if necessary.
32+
("[0]", {}, [42]),
33+
("[1]", {}, [{}, 42]),
34+
#
35+
(
36+
'foo[?bar="baz"].qux',
37+
{
38+
"foo": [
39+
{"bar": "baz"},
40+
{"bar": "bizzle"},
41+
]
42+
},
43+
{"foo": [{"bar": "baz", "qux": 42}, {"bar": "bizzle"}]},
44+
),
45+
("[1].foo", [{"foo": 1}, {"bar": 2}], [{"foo": 1}, {"foo": 42, "bar": 2}]),
46+
),
47+
)
48+
def test_update_or_create(string, initial_data, expected_result):
10849
jsonpath = parse(string)
109-
result = jsonpath.update_or_create(initial_data, insert_val)
110-
assert result == target
111-
112-
113-
@pytest.mark.parametrize('string, initial_data, insert_val, target', [
114-
# Slice not supported
115-
Params(string='foo[0:1]',
116-
initial_data={},
117-
insert_val=42,
118-
target={'foo': [42, 42]}),
119-
# result is {'foo': {}}
120-
121-
# Filter does not create items to meet criteria
122-
Params(string='foo[?bar="baz"].qux',
123-
initial_data={},
124-
insert_val=42,
125-
target={'foo': [{'bar': 'baz', 'qux': 42}]}),
126-
# result is {'foo': {}}
127-
128-
# Does not convert initial data to a dictionary
129-
Params(string='foo',
130-
initial_data=[],
131-
insert_val=42,
132-
target={'foo': 42}),
133-
# raises TypeError
134-
135-
])
136-
@pytest.mark.xfail
137-
def test_unsupported_classes(string, initial_data, insert_val, target):
50+
result = jsonpath.update_or_create(initial_data, 42)
51+
assert result == expected_result
52+
53+
54+
@pytest.mark.parametrize(
55+
"string, initial_data, expectation",
56+
(
57+
# Slice not supported
58+
("foo[0:1]", {}, does_not_raise()),
59+
#
60+
# Filter does not create items to meet criteria
61+
('foo[?bar="baz"].qux', {}, does_not_raise()),
62+
#
63+
# Does not convert initial data to a dictionary
64+
("foo", [], pytest.raises(TypeError)),
65+
),
66+
)
67+
def test_unsupported_classes(string, initial_data, expectation):
68+
copied_initial_data = copy.copy(initial_data)
13869
jsonpath = parse(string)
139-
result = jsonpath.update_or_create(initial_data, insert_val)
140-
assert result == target
70+
with expectation:
71+
result = jsonpath.update_or_create(initial_data, 42)
72+
assert result != copied_initial_data
14173

14274

14375
@pytest.mark.parametrize('string, initial_data, insert_val, target', [

0 commit comments

Comments
 (0)