def test_bill_by_openstates_url(django_assert_num_queries): with django_assert_num_queries(1): result = schema.execute(""" { bill(openstatesUrl:"https://openstates.org/ak/bills/2018/HB1") { id } }""") assert result.errors is None assert result.data["bill"]["id"] == "ocd-bill/1"
def test_people_by_name(): result = schema.execute(''' { people(name: "Hank", first: 50) { edges { node { name } } } } ''') assert result.errors is None assert len(result.data['people']['edges']) == 1
def test_people_by_division_id(): # Note: uses a fake divisionId that has two reps (one retired), only one should be returned result = schema.execute(""" { people(divisionId: "ocd-division/country:us/state:ak/sldu:b", first: 50) { edges { node { name } } } } """) assert len(result.data["people"]["edges"]) == 1
def test_bill_by_jurisdiction_name_session_identifier(django_assert_num_queries): with django_assert_num_queries(1): result = schema.execute(''' { bill(jurisdiction:"Alaska", session:"2018", identifier:"HB 1") { title } }''') assert result.errors is None assert result.data['bill']['title'] == 'Moose Freedom Act'
def test_people_by_name(): result = schema.execute(""" { people(name: "Hank", first: 50) { edges { node { name } } } } """) assert result.errors is None assert len(result.data["people"]["edges"]) == 1
def test_bill_by_openstates_url(django_assert_num_queries): with django_assert_num_queries(1): result = schema.execute(''' { bill(openstatesUrl:"https://openstates.org/ak/bills/2018/HB1") { id } }''') assert result.errors is None assert result.data['bill']['id'] == 'ocd-bill/1'
def test_bills_total_count(django_assert_num_queries): with django_assert_num_queries(2): result = schema.execute("""{ bills(first: 5) { totalCount edges { node { identifier } } } }""") assert result.data["bills"]["totalCount"] == 26 assert len(result.data["bills"]["edges"]) == 5
def test_bill_by_jurisdiction_session_identifier_404(): result = schema.execute( """ { bill(jurisdiction:"Alaska", session:"2018" identifier:"HB 404") { title } }""" ) assert len(result.errors) == 1 assert "does not exist" in result.errors[0].message
def test_bill_by_jurisdiction_session_identifier_incomplete(): result = schema.execute( """ { bill(jurisdiction:"Alaska", identifier:"HB 1") { title } }""" ) assert len(result.errors) == 1 assert "must either pass" in result.errors[0].message
def test_bills_total_count(django_assert_num_queries): with django_assert_num_queries(2): result = schema.execute('''{ bills(first: 5) { totalCount edges { node { identifier } } } }''') assert result.data['bills']['totalCount'] == 26 assert len(result.data['bills']['edges']) == 5
def test_bill_by_jurisdiction_name_session_identifier( django_assert_num_queries): with django_assert_num_queries(1): result = schema.execute(""" { bill(jurisdiction:"Alaska", session:"2018", identifier:"HB 1") { title } }""") assert result.errors is None assert result.data["bill"]["title"] == "Moose Freedom Act"
def test_bill_by_jurisdiction_id_session_identifier(django_assert_num_queries): with django_assert_num_queries(1): result = schema.execute(""" { bill(jurisdiction:"ocd-jurisdiction/country:us/state:ak/government", session:"2018", identifier:"HB 1") { title } }""") assert result.errors is None assert result.data["bill"]["title"] == "Moose Freedom Act"
def test_bill_fts(): result = schema.execute("""{ bills(searchQuery: "gorgonzola", first:5) { edges {node { title }} } }""") assert result.errors is None bills = [n["node"] for n in result.data["bills"]["edges"]] assert len(bills) == 1
def test_bills_max_items(): result = schema.execute( """{ bills { edges { node { identifier } } } }""" ) assert len(result.errors) == 1 assert "first" in result.errors[0].message result = schema.execute( """{ bills(first: 9001) { edges { node { identifier } } } }""" ) assert len(result.errors) == 1 assert "first" in result.errors[0].message
def test_bill_fts(): result = schema.execute('''{ bills(searchQuery: "moose", first:5) { edges {node { title }} } }''') assert result.errors is None bills = [n['node'] for n in result.data['bills']['edges']] assert len(bills) == 1
def test_bill_openstates_url(django_assert_num_queries): with django_assert_num_queries(2): result = schema.execute(""" { bill(jurisdiction:"ocd-jurisdiction/country:us/state:ak/government", session:"2018", identifier:"HB 1") { openstatesUrl } }""") assert result.errors is None assert (result.data["bill"]["openstatesUrl"] == "https://openstates.org/ak/bills/2018/HB1")
def test_fragment_cost(django_assert_num_queries): result = schema.execute(''' fragment JurisdictionFields on JurisdictionNode { first: organizations(first: 3) { edges { node { name } } } last: organizations(last: 3) { edges { node { name } } } } query jurisdictionsQuery { jurisdictions { edges { node { ...JurisdictionFields }}}} ''', middleware=[QueryProtectionMiddleware(0)]) assert len(result.errors) == 1 assert '(6)' in str(result.errors[0])
def test_real_example_big_query(django_assert_num_queries): # this is a real query that was running that had issues in production as of April 2021 # only variables have been changed to match test data query = """ query bills($jurisdiction: String, $session: String, $end_cursor: String, $updated_since: String) { bills(jurisdiction: $jurisdiction, session: $session, first: 85, after: $end_cursor, updatedSince: $updated_since) { bill_list: edges { bill: node { id legislativeSession { identifier name classification jurisdiction { url } } identifier fromOrganization { name classification } classification subject bill_summary: abstracts { abstract note date } otherTitles { title note } otherIdentifiers { identifier scheme note } actions { description date organization { id name extras links { note url } sources { note url } } classification order vote { id } relatedEntities { name entityType } } title relatedBills { identifier legislativeSession relationType } versions { note date links { mediaType url text } } sources { url note } createdAt updatedAt sources { note url } openstatesUrl documents { note date links { mediaType url text } } } } totalCount pageInfo { endCursor hasNextPage } } }""" variables = { "jurisdiction": "Alaska", "end_cursor": "", "updated_since": "1900-01-01", } with django_assert_num_queries(16): result = schema.execute(query, variables) assert result.errors is None assert result.data["bills"]["totalCount"] == 26
def test_people_by_party(): result = schema.execute(""" { dems: people(memberOf: "Democratic", first: 50) { edges { node { name } } } reps: people(memberOf: "Republican", first: 50) { edges { node { name } } } } """) assert result.errors is None assert len(result.data["dems"]["edges"]) == 3 assert len(result.data["reps"]["edges"]) == 4
def test_bills_by_chamber(django_assert_num_queries): with django_assert_num_queries(4): result = schema.execute(''' { lower: bills(chamber:"lower", first:50) { edges { node { title } } } upper: bills(chamber:"upper", first:50) { edges { node { title } } } }''') assert result.errors is None # 26 total bills created assert len(result.data['lower']['edges'] + result.data['upper']['edges']) == 26
def test_bills_by_session(django_assert_num_queries): with django_assert_num_queries(4): result = schema.execute(''' { y2018: bills(session:"2018", first:50) { edges { node { title } } } y2017: bills(session:"2017", first:50) { edges { node { title } } } }''') assert result.errors is None # 26 total bills created assert len(result.data['y2017']['edges'] + result.data['y2018']['edges']) == 26
def test_bills_order(django_assert_num_queries): with django_assert_num_queries(2): result = schema.execute(""" { ak: bills(jurisdiction:"Alaska", first: 50) { edges { node { updatedAt } } } }""") assert result.errors is None assert len(result.data["ak"]["edges"]) == 12 # ensure updatedAt order is decreasing for i in range(11): assert (result.data["ak"]["edges"][i]["node"]["updatedAt"] > result.data["ak"]["edges"][i + 1]["node"]["updatedAt"])
def test_bills_by_classification(django_assert_num_queries): with django_assert_num_queries(4): result = schema.execute(''' { bills: bills(classification: "bill", first:50) { edges { node { title } } } resolutions: bills(classification: "resolution", first:50) { edges { node { title } } } }''') assert result.errors is None # 26 total bills created assert len(result.data['bills']['edges'] + result.data['resolutions']['edges']) == 26
def test_people_by_party(): result = schema.execute(''' { dems: people(memberOf: "Democratic", first: 50) { edges { node { name } } } reps: people(memberOf: "Republican", first: 50) { edges { node { name } } } } ''') assert result.errors is None assert len(result.data['dems']['edges']) == 3 assert len(result.data['reps']['edges']) == 4
def test_bills_by_jurisdiction(django_assert_num_queries): # 2 bills queries + 2 count queries with django_assert_num_queries(4): result = schema.execute(''' { ak: bills(jurisdiction:"Alaska", first: 50) { edges { node { title } } } wy: bills(jurisdiction:"ocd-jurisdiction/country:us/state:wy", first: 50) { edges { node { title } } } }''') assert result.errors is None # 26 total bills created assert len(result.data['ak']['edges'] + result.data['wy']['edges']) == 26
def test_bills_by_classification(django_assert_num_queries): with django_assert_num_queries(4): result = schema.execute(""" { bills: bills(classification: "bill", first:50) { edges { node { title } } } resolutions: bills(classification: "resolution", first:50) { edges { node { title } } } }""") assert result.errors is None # 26 total bills created assert (len(result.data["bills"]["edges"] + result.data["resolutions"]["edges"]) == 26)
def test_bills_by_jurisdiction(django_assert_num_queries): # 2 bills queries + 2 count queries with django_assert_num_queries(4): result = schema.execute(""" { ak: bills(jurisdiction:"Alaska", first: 50) { edges { node { title } } } wy: bills(jurisdiction:"ocd-jurisdiction/country:us/state:wy/government", first: 50) { edges { node { title } } } }""") assert result.errors is None # 26 total bills created assert len(result.data["ak"]["edges"] + result.data["wy"]["edges"]) == 26
def test_bills_pagination_backward(): bills = [] result = schema.execute('''{ bills(last: 5) { edges { node { identifier } } pageInfo { startCursor hasPreviousPage } } }''') page = [n['node']['identifier'] for n in result.data['bills']['edges']] bills += page while result.data['bills']['pageInfo']['hasPreviousPage']: result = schema.execute('''{ bills(last: 5, before:"%s") { edges { node { identifier } } pageInfo { startCursor hasPreviousPage } } }''' % result.data['bills']['pageInfo']['startCursor']) page = [n['node']['identifier'] for n in result.data['bills']['edges']] bills += page assert len(page) <= 5 assert len(bills) == 26
def test_bills_pagination_forward(): bills = [] result = schema.execute('''{ bills(first: 5) { edges { node { identifier } } pageInfo { endCursor hasNextPage } } }''') page = [n['node']['identifier'] for n in result.data['bills']['edges']] bills += page while result.data['bills']['pageInfo']['hasNextPage']: result = schema.execute('''{ bills(first: 5, after:"%s") { edges { node { identifier } } pageInfo { endCursor hasNextPage } } }''' % result.data['bills']['pageInfo']['endCursor']) page = [n['node']['identifier'] for n in result.data['bills']['edges']] bills += page assert len(page) <= 5 assert len(bills) == 26
def test_bills_pagination_backward(): bills = [] result = schema.execute("""{ bills(last: 5) { edges { node { identifier } } pageInfo { startCursor hasPreviousPage } } }""") page = [n["node"]["identifier"] for n in result.data["bills"]["edges"]] bills += page while result.data["bills"]["pageInfo"]["hasPreviousPage"]: result = schema.execute("""{ bills(last: 5, before:"%s") { edges { node { identifier } } pageInfo { startCursor hasPreviousPage } } }""" % result.data["bills"]["pageInfo"]["startCursor"]) page = [n["node"]["identifier"] for n in result.data["bills"]["edges"]] bills += page assert len(page) <= 5 assert len(bills) == 26