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