|
12 | 12 |
|
13 | 13 |
|
14 | 14 | @pytest.mark.parametrize( |
15 | | - ["input_record", "field", "field_type", "kwargs", "expected"], |
| 15 | + ["input_record", "field", "field_type", "condition", "kwargs", "expected"], |
16 | 16 | [ |
17 | 17 | pytest.param( |
18 | 18 | {"k": "v"}, |
19 | 19 | [(["path"], "static_value")], |
20 | 20 | None, |
| 21 | + "", |
21 | 22 | {}, |
22 | 23 | {"k": "v", "path": "static_value"}, |
23 | 24 | id="add new static value", |
|
26 | 27 | {"k": "v"}, |
27 | 28 | [(["path"], "{{ 1 }}")], |
28 | 29 | None, |
| 30 | + "", |
29 | 31 | {}, |
30 | 32 | {"k": "v", "path": 1}, |
31 | 33 | id="add an expression evaluated as a number", |
|
34 | 36 | {"k": "v"}, |
35 | 37 | [(["path"], "{{ 1 }}")], |
36 | 38 | str, |
| 39 | + "", |
37 | 40 | {}, |
38 | 41 | {"k": "v", "path": "1"}, |
39 | 42 | id="add an expression evaluated as a string using the value_type field", |
|
42 | 45 | {"k": "v"}, |
43 | 46 | [(["path"], "static_value"), (["path2"], "static_value2")], |
44 | 47 | None, |
| 48 | + "", |
45 | 49 | {}, |
46 | 50 | {"k": "v", "path": "static_value", "path2": "static_value2"}, |
47 | 51 | id="add new multiple static values", |
|
50 | 54 | {"k": "v"}, |
51 | 55 | [(["nested", "path"], "static_value")], |
52 | 56 | None, |
| 57 | + "", |
53 | 58 | {}, |
54 | 59 | {"k": "v", "nested": {"path": "static_value"}}, |
55 | 60 | id="set static value at nested path", |
|
58 | 63 | {"k": "v"}, |
59 | 64 | [(["k"], "new_value")], |
60 | 65 | None, |
| 66 | + "", |
61 | 67 | {}, |
62 | 68 | {"k": "new_value"}, |
63 | 69 | id="update value which already exists", |
|
66 | 72 | {"k": [0, 1]}, |
67 | 73 | [(["k", 3], "v")], |
68 | 74 | None, |
| 75 | + "", |
69 | 76 | {}, |
70 | 77 | {"k": [0, 1, None, "v"]}, |
71 | 78 | id="Set element inside array", |
|
74 | 81 | {"k": "v"}, |
75 | 82 | [(["k2"], '{{ config["shop"] }}')], |
76 | 83 | None, |
| 84 | + "", |
77 | 85 | {"config": {"shop": "in-n-out"}}, |
78 | 86 | {"k": "v", "k2": "in-n-out"}, |
79 | 87 | id="set a value from the config using bracket notation", |
|
82 | 90 | {"k": "v"}, |
83 | 91 | [(["k2"], "{{ config.shop }}")], |
84 | 92 | None, |
| 93 | + "", |
85 | 94 | {"config": {"shop": "in-n-out"}}, |
86 | 95 | {"k": "v", "k2": "in-n-out"}, |
87 | 96 | id="set a value from the config using dot notation", |
|
90 | 99 | {"k": "v"}, |
91 | 100 | [(["k2"], '{{ stream_slice["start_date"] }}')], |
92 | 101 | None, |
| 102 | + "", |
93 | 103 | {"stream_slice": {"start_date": "oct1"}}, |
94 | 104 | {"k": "v", "k2": "oct1"}, |
95 | 105 | id="set a value from the stream slice using bracket notation", |
|
98 | 108 | {"k": "v"}, |
99 | 109 | [(["k2"], "{{ stream_slice.start_date }}")], |
100 | 110 | None, |
| 111 | + "", |
101 | 112 | {"stream_slice": {"start_date": "oct1"}}, |
102 | 113 | {"k": "v", "k2": "oct1"}, |
103 | 114 | id="set a value from the stream slice using dot notation", |
|
106 | 117 | {"k": "v"}, |
107 | 118 | [(["k2"], "{{ record.k }}")], |
108 | 119 | None, |
| 120 | + "", |
109 | 121 | {}, |
110 | 122 | {"k": "v", "k2": "v"}, |
111 | 123 | id="set a value from a field in the record using dot notation", |
|
114 | 126 | {"k": "v"}, |
115 | 127 | [(["k2"], '{{ record["k"] }}')], |
116 | 128 | None, |
| 129 | + "", |
117 | 130 | {}, |
118 | 131 | {"k": "v", "k2": "v"}, |
119 | 132 | id="set a value from a field in the record using bracket notation", |
|
122 | 135 | {"k": {"nested": "v"}}, |
123 | 136 | [(["k2"], "{{ record.k.nested }}")], |
124 | 137 | None, |
| 138 | + "", |
125 | 139 | {}, |
126 | 140 | {"k": {"nested": "v"}, "k2": "v"}, |
127 | 141 | id="set a value from a nested field in the record using bracket notation", |
|
130 | 144 | {"k": {"nested": "v"}}, |
131 | 145 | [(["k2"], '{{ record["k"]["nested"] }}')], |
132 | 146 | None, |
| 147 | + "", |
133 | 148 | {}, |
134 | 149 | {"k": {"nested": "v"}, "k2": "v"}, |
135 | 150 | id="set a value from a nested field in the record using bracket notation", |
|
138 | 153 | {"k": "v"}, |
139 | 154 | [(["k2"], "{{ 2 + 2 }}")], |
140 | 155 | None, |
| 156 | + "", |
141 | 157 | {}, |
142 | 158 | {"k": "v", "k2": 4}, |
143 | 159 | id="set a value from a jinja expression", |
144 | 160 | ), |
| 161 | + pytest.param( |
| 162 | + {"k": "v"}, |
| 163 | + [(["path"], "static_value")], |
| 164 | + None, |
| 165 | + "{{ False }}", |
| 166 | + {}, |
| 167 | + {"k": "v"}, |
| 168 | + id="do not add any field if condition is boolean False", |
| 169 | + ), |
| 170 | + pytest.param( |
| 171 | + {"k": "v"}, |
| 172 | + [(["path"], "static_value")], |
| 173 | + None, |
| 174 | + "{{ True }}", |
| 175 | + {}, |
| 176 | + {"k": "v", "path": "static_value"}, |
| 177 | + id="add all fields if condition is boolean True", |
| 178 | + ), |
145 | 179 | ], |
146 | 180 | ) |
147 | 181 | def test_add_fields( |
148 | 182 | input_record: Mapping[str, Any], |
149 | 183 | field: List[Tuple[FieldPointer, str]], |
150 | 184 | field_type: Optional[str], |
| 185 | + condition: Optional[str], |
151 | 186 | kwargs: Mapping[str, Any], |
152 | 187 | expected: Mapping[str, Any], |
153 | 188 | ): |
154 | 189 | inputs = [ |
155 | 190 | AddedFieldDefinition(path=v[0], value=v[1], value_type=field_type, parameters={}) |
156 | 191 | for v in field |
157 | 192 | ] |
158 | | - AddFields(fields=inputs, parameters={"alas": "i live"}).transform(input_record, **kwargs) |
| 193 | + AddFields(fields=inputs, condition=condition, parameters={"alas": "i live"}).transform(input_record, **kwargs) |
159 | 194 | assert input_record == expected |
0 commit comments