|
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