27
27
28
28
@pytest .fixture
29
29
def query_builder ():
30
- return Neo4jIngestQueryBuilder (True )
30
+ return Neo4jIngestQueryBuilder (True , False )
31
31
32
32
33
33
GREATEST_DAY = Timestamp (1998 , 3 , 25 , 2 , 0 , 1 )
@@ -177,6 +177,16 @@ def test_generates_expected_queries(mocked_utcnow, query_builder, ttl, expected_
177
177
}
178
178
],
179
179
)
180
+ SIMPLE_NODE_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP = QueryBatch (
181
+ "MERGE (node: TestType {id : params.__node_id}) ON CREATE SET node.first_ingested_at = datetime() SET node += params.__node_properties" ,
182
+ [
183
+ {
184
+ "__node_id" : "foo" ,
185
+ "__node_properties" : SIMPLE_NODE .properties ,
186
+ "__node_additional_labels" : (),
187
+ }
188
+ ],
189
+ )
180
190
181
191
SIMPLE_NODE_EXPECTED_QUERY_ON_MATCH = QueryBatch (
182
192
"MATCH (node: TestType) WHERE node.id = params.__node_id SET node += params.__node_properties" ,
@@ -207,6 +217,17 @@ def test_generates_expected_queries(mocked_utcnow, query_builder, ttl, expected_
207
217
],
208
218
)
209
219
220
+ COMPLEX_NODE_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP = QueryBatch (
221
+ "MERGE (node: ComplexType {id : params.__node_id}) ON CREATE SET node.first_ingested_at = datetime() WITH node, params CALL apoc.create.addLabels(node, params.__node_additional_labels) yield node as _ SET node += params.__node_properties" ,
222
+ [
223
+ {
224
+ "__node_id" : "foo" ,
225
+ "__node_properties" : COMPLEX_NODE .properties ,
226
+ "__node_additional_labels" : ("ExtraTypeOne" , "ExtraTypeTwo" ),
227
+ }
228
+ ],
229
+ )
230
+
210
231
COMPLEX_NODE_TWO = Node (
211
232
"ComplexType" ,
212
233
{"id_part1" : "foo" , "id_part2" : "bar" },
@@ -225,6 +246,18 @@ def test_generates_expected_queries(mocked_utcnow, query_builder, ttl, expected_
225
246
],
226
247
)
227
248
249
+ COMPLEX_NODE_TWO_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP = QueryBatch (
250
+ "MERGE (node: ComplexType {id_part1 : params.__node_id_part1, id_part2 : params.__node_id_part2}) ON CREATE SET node.first_ingested_at = datetime() WITH node, params CALL apoc.create.addLabels(node, params.__node_additional_labels) yield node as _ SET node += params.__node_properties" ,
251
+ [
252
+ {
253
+ "__node_id_part1" : "foo" ,
254
+ "__node_id_part2" : "bar" ,
255
+ "__node_properties" : COMPLEX_NODE_TWO .properties ,
256
+ "__node_additional_labels" : ("ExtraTypeOne" , "ExtraTypeTwo" ),
257
+ }
258
+ ],
259
+ )
260
+
228
261
229
262
@pytest .mark .parametrize (
230
263
"node,expected_query,node_creation_rule" ,
@@ -243,6 +276,24 @@ def test_node_update_generates_expected_queries(
243
276
assert_that (query , equal_to (expected_query ))
244
277
245
278
279
+ @pytest .mark .parametrize (
280
+ "node,expected_query,node_creation_rule" ,
281
+ [
282
+ [SIMPLE_NODE , SIMPLE_NODE_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP , NodeCreationRule .EAGER ],
283
+ [COMPLEX_NODE , COMPLEX_NODE_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP , NodeCreationRule .EAGER ],
284
+ [COMPLEX_NODE_TWO , COMPLEX_NODE_TWO_EXPECTED_QUERY_WITH_CREATED_TIMESTAMP , NodeCreationRule .EAGER ],
285
+ [SIMPLE_NODE , SIMPLE_NODE_EXPECTED_QUERY_ON_MATCH , NodeCreationRule .MATCH_ONLY ],
286
+ ],
287
+ )
288
+ def test_node_update_with_created_timestamp_generates_exepected_queries (
289
+ query_builder , node , expected_query , node_creation_rule
290
+ ):
291
+ query_builder .set_first_ingested_at = True
292
+ operation = OperationOnNodeIdentity (node .identity_shape , node_creation_rule )
293
+ query = query_builder .generate_batch_update_node_operation_batch (operation , [node ])
294
+ assert_that (query , equal_to (expected_query ))
295
+
296
+
246
297
RELATIONSHIP_BETWEEN_TWO_NODES = RelationshipWithNodes (
247
298
from_node = SIMPLE_NODE ,
248
299
to_node = COMPLEX_NODE ,
0 commit comments