graphql-engine/server/tests-py/test_graphql_queries.py
Rakesh Emmadi 91376316f2 breaking: encode bigint and bigserial postgres types as strings in response (fix #633) (#640)
This is breaking change where bigint and bigserial Postgres types will be encoded as GraphQL String types, as opposed to Int as present in earlier releases.

Input types were already encoded as String.

This is achieved by selecting `bigint` and `bigserial` columns as `text`s in the SQL query: `select "big_id"::text ..` instead of `select "big_id" .. `.

Reason for that change is outlined in #633 where JavaScript cannot decode 64 bit Integers.
2018-10-05 10:46:21 +05:30

213 lines
8.7 KiB
Python

import pytest
import yaml
from validate import check_query_f
class TestGraphQLQueryBasic:
def test_select_query_author(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_author.yaml')
def test_select_query_author_pk(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_author_by_pkey.yaml')
def test_select_query_where(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_author_where.yaml')
def test_nested_select_query_article_author(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/nested_select_query_article_author.yaml')
def test_nested_select_query_where(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/nested_select_where_query_author_article.yaml')
def test_select_query_user(self, hge_ctx):
check_query_f(hge_ctx, "queries/graphql_query/basic/select_query_user.yaml")
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/basic'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphQLQueryLimits:
def test_limit_1(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_limit_1.yaml')
def test_limit_2(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_limit_2.yaml')
def test_err_str_limit_error(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_string_limit_error.yaml')
def test_err_neg_limit_error(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_neg_limit_error.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/limits'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphQLQueryOffsets:
def test_offset_1_limit_2(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_offset_1_limit_2.yaml')
def test_offset_2_limit_1(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_offset_2_limit_1.yaml')
def test_int_as_string_offset(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_string_offset.yaml')
def test_err_neg_offset_error(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_article_neg_offset_error.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/offset'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphQLQueryBoolExpBasic:
def test_author_article_where_not_equal(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_neq.yaml')
def test_author_article_where_greater_than(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_gt.yaml')
def test_author_article_where_greater_than_or_equal(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_gte.yaml')
def test_author_article_where_less_than(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_lt.yaml')
def test_author_article_where_less_than_or_equal(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_lte.yaml')
def test_author_article_where_in(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_in.yaml')
def test_author_article_where_nin(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_nin.yaml')
def test_order_delivered_at_is_null(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_order_delivered_at_is_null.yaml')
def test_order_delivered_at_is_not_null(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_query_order_delivered_at_is_not_null.yaml')
def test_author_article_where_not_less_than(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_where_not_lt.yaml')
def test_article_author_is_published_and_registered(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_article_author_is_published_and_registered.yaml')
def test_article_author_not_published_nor_registered(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_article_author_not_published_or_not_registered.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/boolexp/basic'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphqlQueryPermissions:
def test_user_select_unpublished_articles(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/user_select_query_unpublished_articles.yaml')
def test_user_only_other_users_published_articles(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/user_can_query_other_users_published_articles.yaml')
def test_anonymous_only_published_articles(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/anonymous_can_only_get_published_articles.yaml')
def test_user_cannot_access_remarks_col(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/user_cannot_access_remarks_col.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/permissions'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphQLQueryBoolExpSearch:
def test_city_where_like(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_like.yaml')
def test_city_where_not_like(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_nlike.yaml')
def test_city_where_ilike(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_ilike.yaml')
def test_city_where_not_ilike(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_nilike.yaml')
def test_city_where_similar(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_similar.yaml')
def test_city_where_not_similar(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_city_where_not_similar.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/boolexp/search'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp
class TestGraphQLQueryBoolExpJsonB:
def test_jsonb_contains_article_latest(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_article_author_jsonb_contains_latest.yaml')
def test_jsonb_contains_article_beststeller(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_author_article_jsonb_contains_bestseller.yaml')
def test_jsonb_contained_in_latest(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_article_author_jsonb_contained_in_latest.yaml')
def test_jsonb_contained_in_bestseller_latest(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_article_author_jsonb_contained_in_bestseller_latest.yaml')
def test_jsonb_has_key_sim_type(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_product_jsonb_has_key_sim_type.yaml')
def test_jsonb_has_keys_any_os_operating_system(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_product_jsonb_has_keys_any_os_operating_system.yaml')
def test_jsonb_has_keys_all_touchscreen_ram(self, hge_ctx):
check_query_f(hge_ctx, self.dir + '/select_product_jsonb_has_keys_all_ram_touchscreen.yaml')
@pytest.fixture(autouse=True)
def transact(self, request, hge_ctx):
self.dir = 'queries/graphql_query/boolexp/jsonb'
st_code, resp = hge_ctx.v1q_f(self.dir + '/setup.yaml')
assert st_code == 200, resp
yield
st_code, resp = hge_ctx.v1q_f(self.dir + '/teardown.yaml')
assert st_code == 200, resp