@@ -2007,6 +2007,136 @@ query Root(
20072007 assert_title_resolvers ( & title, & context) ;
20082008}
20092009
2010+ #[ test]
2011+ fn graphql_subjects_and_subject_count_support_work_status_filters ( ) {
2012+ let ( _guard, pool) = test_db:: setup_test_db ( ) ;
2013+ let schema = create_schema ( ) ;
2014+ let superuser = test_db:: test_superuser ( "user-subject-status-filters" ) ;
2015+ let context = test_db:: test_context_with_user ( pool. clone ( ) , superuser) ;
2016+
2017+ let publisher = create_with_data (
2018+ & schema,
2019+ & context,
2020+ "createPublisher" ,
2021+ "NewPublisher" ,
2022+ "publisherId" ,
2023+ make_new_publisher ( "org-subject-status-filters" ) ,
2024+ ) ;
2025+ let publisher_id = json_uuid ( & publisher[ "publisherId" ] ) ;
2026+
2027+ let imprint = create_with_data (
2028+ & schema,
2029+ & context,
2030+ "createImprint" ,
2031+ "NewImprint" ,
2032+ "imprintId" ,
2033+ make_new_imprint ( publisher_id) ,
2034+ ) ;
2035+ let imprint_id = json_uuid ( & imprint[ "imprintId" ] ) ;
2036+
2037+ let active_work = create_with_data (
2038+ & schema,
2039+ & context,
2040+ "createWork" ,
2041+ "NewWork" ,
2042+ "workId" ,
2043+ make_new_work (
2044+ imprint_id,
2045+ WorkType :: Monograph ,
2046+ Doi :: from_str ( "10.1234/subjects-status-active" ) . unwrap ( ) ,
2047+ ) ,
2048+ ) ;
2049+ let active_work_id = json_uuid ( & active_work[ "workId" ] ) ;
2050+
2051+ let mut forthcoming_work_input = make_new_work (
2052+ imprint_id,
2053+ WorkType :: Monograph ,
2054+ Doi :: from_str ( "10.1234/subjects-status-forthcoming" ) . unwrap ( ) ,
2055+ ) ;
2056+ forthcoming_work_input. work_status = WorkStatus :: Forthcoming ;
2057+ forthcoming_work_input. publication_date = None ;
2058+ let forthcoming_work = create_with_data (
2059+ & schema,
2060+ & context,
2061+ "createWork" ,
2062+ "NewWork" ,
2063+ "workId" ,
2064+ forthcoming_work_input,
2065+ ) ;
2066+ let forthcoming_work_id = json_uuid ( & forthcoming_work[ "workId" ] ) ;
2067+
2068+ let active_subject = create_with_data (
2069+ & schema,
2070+ & context,
2071+ "createSubject" ,
2072+ "NewSubject" ,
2073+ "subjectId" ,
2074+ make_new_subject ( active_work_id, 1 ) ,
2075+ ) ;
2076+ let active_subject_id = json_uuid ( & active_subject[ "subjectId" ] ) ;
2077+
2078+ let forthcoming_subject = create_with_data (
2079+ & schema,
2080+ & context,
2081+ "createSubject" ,
2082+ "NewSubject" ,
2083+ "subjectId" ,
2084+ make_new_subject ( forthcoming_work_id, 1 ) ,
2085+ ) ;
2086+ let forthcoming_subject_id = json_uuid ( & forthcoming_subject[ "subjectId" ] ) ;
2087+
2088+ let query_plural = r#"
2089+ query SubjectsByStatuses($statuses: [WorkStatus!]) {
2090+ subjects(limit: 10, workStatuses: $statuses) { subjectId }
2091+ subjectCount(workStatuses: $statuses)
2092+ }
2093+ "# ;
2094+ let mut plural_vars = Variables :: new ( ) ;
2095+ insert_var ( & mut plural_vars, "statuses" , vec ! [ WorkStatus :: Forthcoming ] ) ;
2096+ let plural_data = execute_graphql ( & schema, & context, query_plural, Some ( plural_vars) ) ;
2097+
2098+ let plural_subjects = plural_data[ "subjects" ]
2099+ . as_array ( )
2100+ . expect ( "Expected subjects array" ) ;
2101+ assert_eq ! ( plural_subjects. len( ) , 1 ) ;
2102+ assert_eq ! (
2103+ json_uuid( & plural_subjects[ 0 ] [ "subjectId" ] ) ,
2104+ forthcoming_subject_id
2105+ ) ;
2106+ assert_eq ! ( plural_data[ "subjectCount" ] . as_i64( ) , Some ( 1 ) ) ;
2107+
2108+ let query_multiple_statuses = r#"
2109+ query SubjectsByMultipleStatuses($statuses: [WorkStatus!]) {
2110+ subjects(limit: 10, workStatuses: $statuses) { subjectId }
2111+ subjectCount(workStatuses: $statuses)
2112+ }
2113+ "# ;
2114+ let mut multiple_statuses_vars = Variables :: new ( ) ;
2115+ insert_var (
2116+ & mut multiple_statuses_vars,
2117+ "statuses" ,
2118+ vec ! [ WorkStatus :: Active , WorkStatus :: Forthcoming ] ,
2119+ ) ;
2120+ let multiple_statuses_data = execute_graphql (
2121+ & schema,
2122+ & context,
2123+ query_multiple_statuses,
2124+ Some ( multiple_statuses_vars) ,
2125+ ) ;
2126+
2127+ let multiple_statuses_subjects = multiple_statuses_data[ "subjects" ]
2128+ . as_array ( )
2129+ . expect ( "Expected subjects array" ) ;
2130+ let multiple_statuses_ids: Vec < Uuid > = multiple_statuses_subjects
2131+ . iter ( )
2132+ . map ( |subject| json_uuid ( & subject[ "subjectId" ] ) )
2133+ . collect ( ) ;
2134+ assert_eq ! ( multiple_statuses_ids. len( ) , 2 ) ;
2135+ assert ! ( multiple_statuses_ids. contains( & active_subject_id) ) ;
2136+ assert ! ( multiple_statuses_ids. contains( & forthcoming_subject_id) ) ;
2137+ assert_eq ! ( multiple_statuses_data[ "subjectCount" ] . as_i64( ) , Some ( 2 ) ) ;
2138+ }
2139+
20102140#[ test]
20112141fn graphql_books_order_respects_field_and_direction ( ) {
20122142 let ( _guard, pool) = test_db:: setup_test_db ( ) ;
0 commit comments