@@ -400,6 +400,114 @@ def test_global_id_field_relation():
400
400
assert id_filter .field_class == GlobalIDFormField
401
401
402
402
403
+ def test_global_id_field_relation_with_filter ():
404
+ class ReporterFilterNode (DjangoObjectType ):
405
+ class Meta :
406
+ model = Reporter
407
+ interfaces = (Node ,)
408
+ filter_fields = ["first_name" , "articles" ]
409
+
410
+ class ArticleFilterNode (DjangoObjectType ):
411
+ class Meta :
412
+ model = Article
413
+ interfaces = (Node ,)
414
+ filter_fields = ["headline" , "reporter" ]
415
+
416
+ class Query (ObjectType ):
417
+ all_reporters = DjangoFilterConnectionField (ReporterFilterNode )
418
+ all_articles = DjangoFilterConnectionField (ArticleFilterNode )
419
+ reporter = Field (ReporterFilterNode )
420
+ article = Field (ArticleFilterNode )
421
+
422
+ r1 = Reporter .objects .create (first_name = "r1" , last_name = "r1" , email = "r1@test.com" )
423
+ r2 = Reporter .objects .create (first_name = "r2" , last_name = "r2" , email = "r2@test.com" )
424
+ Article .objects .create (
425
+ headline = "a1" ,
426
+ pub_date = datetime .now (),
427
+ pub_date_time = datetime .now (),
428
+ reporter = r1 ,
429
+ editor = r1 ,
430
+ )
431
+ Article .objects .create (
432
+ headline = "a2" ,
433
+ pub_date = datetime .now (),
434
+ pub_date_time = datetime .now (),
435
+ reporter = r2 ,
436
+ editor = r2 ,
437
+ )
438
+
439
+ # Query articles created by the reporter `r1`
440
+ query = """
441
+ query {
442
+ allArticles (reporter: "UmVwb3J0ZXJGaWx0ZXJOb2RlOjE=") {
443
+ edges {
444
+ node {
445
+ id
446
+ }
447
+ }
448
+ }
449
+ }
450
+ """
451
+ schema = Schema (query = Query )
452
+ result = schema .execute (query )
453
+ assert not result .errors
454
+ # We should only get back a single article
455
+ assert len (result .data ["allArticles" ]["edges" ]) == 1
456
+
457
+
458
+ def test_global_id_field_relation_with_filter_not_valid_id ():
459
+ class ReporterFilterNode (DjangoObjectType ):
460
+ class Meta :
461
+ model = Reporter
462
+ interfaces = (Node ,)
463
+ filter_fields = ["first_name" , "articles" ]
464
+
465
+ class ArticleFilterNode (DjangoObjectType ):
466
+ class Meta :
467
+ model = Article
468
+ interfaces = (Node ,)
469
+ filter_fields = ["headline" , "reporter" ]
470
+
471
+ class Query (ObjectType ):
472
+ all_reporters = DjangoFilterConnectionField (ReporterFilterNode )
473
+ all_articles = DjangoFilterConnectionField (ArticleFilterNode )
474
+ reporter = Field (ReporterFilterNode )
475
+ article = Field (ArticleFilterNode )
476
+
477
+ r1 = Reporter .objects .create (first_name = "r1" , last_name = "r1" , email = "r1@test.com" )
478
+ r2 = Reporter .objects .create (first_name = "r2" , last_name = "r2" , email = "r2@test.com" )
479
+ Article .objects .create (
480
+ headline = "a1" ,
481
+ pub_date = datetime .now (),
482
+ pub_date_time = datetime .now (),
483
+ reporter = r1 ,
484
+ editor = r1 ,
485
+ )
486
+ Article .objects .create (
487
+ headline = "a2" ,
488
+ pub_date = datetime .now (),
489
+ pub_date_time = datetime .now (),
490
+ reporter = r2 ,
491
+ editor = r2 ,
492
+ )
493
+
494
+ # Filter by the global ID that does not exist
495
+ query = """
496
+ query {
497
+ allArticles (reporter: "fake_global_id") {
498
+ edges {
499
+ node {
500
+ id
501
+ }
502
+ }
503
+ }
504
+ }
505
+ """
506
+ schema = Schema (query = Query )
507
+ result = schema .execute (query )
508
+ assert "Invalid ID specified." in result .errors [0 ].message
509
+
510
+
403
511
def test_global_id_multiple_field_implicit ():
404
512
field = DjangoFilterConnectionField (ReporterNode , fields = ["pets" ])
405
513
filterset_class = field .filterset_class
0 commit comments