Fix flaky date tests (#982)

* fix flaky datetime test with fixed values

* rename fixtures for clarity in date+time tests
This commit is contained in:
David Anderson 2019-06-01 16:41:45 -04:00 committed by Eran Kampf
parent eb7966eca7
commit ec9f76cfae

View File

@ -27,28 +27,48 @@ class Query(ObjectType):
schema = Schema(query=Query)
def test_datetime_query():
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
isoformat = now.isoformat()
@pytest.fixture
def sample_datetime():
utc_datetime = datetime.datetime(2019, 5, 25, 5, 30, 15, 10, pytz.utc)
return utc_datetime
@pytest.fixture
def sample_time(sample_datetime):
time = datetime.time(
sample_datetime.hour,
sample_datetime.minute,
sample_datetime.second,
sample_datetime.microsecond,
sample_datetime.tzinfo,
)
return time
@pytest.fixture
def sample_date(sample_datetime):
date = sample_datetime.date()
return date
def test_datetime_query(sample_datetime):
isoformat = sample_datetime.isoformat()
result = schema.execute("""{ datetime(in: "%s") }""" % isoformat)
assert not result.errors
assert result.data == {"datetime": isoformat}
def test_date_query():
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
isoformat = now.isoformat()
def test_date_query(sample_date):
isoformat = sample_date.isoformat()
result = schema.execute("""{ date(in: "%s") }""" % isoformat)
assert not result.errors
assert result.data == {"date": isoformat}
def test_time_query():
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
time = datetime.time(now.hour, now.minute, now.second, now.microsecond, now.tzinfo)
isoformat = time.isoformat()
def test_time_query(sample_time):
isoformat = sample_time.isoformat()
result = schema.execute("""{ time(at: "%s") }""" % isoformat)
assert not result.errors
@ -85,14 +105,13 @@ def test_bad_time_query():
assert result.data is None
def test_datetime_query_variable():
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
isoformat = now.isoformat()
def test_datetime_query_variable(sample_datetime):
isoformat = sample_datetime.isoformat()
# test datetime variable provided as Python datetime
result = schema.execute(
"""query Test($date: DateTime){ datetime(in: $date) }""",
variables={"date": now},
variables={"date": sample_datetime},
)
assert not result.errors
assert result.data == {"datetime": isoformat}
@ -106,13 +125,13 @@ def test_datetime_query_variable():
assert result.data == {"datetime": isoformat}
def test_date_query_variable():
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
isoformat = now.isoformat()
def test_date_query_variable(sample_date):
isoformat = sample_date.isoformat()
# test date variable provided as Python date
result = schema.execute(
"""query Test($date: Date){ date(in: $date) }""", variables={"date": now}
"""query Test($date: Date){ date(in: $date) }""",
variables={"date": sample_date},
)
assert not result.errors
assert result.data == {"date": isoformat}
@ -125,14 +144,13 @@ def test_date_query_variable():
assert result.data == {"date": isoformat}
def test_time_query_variable():
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
time = datetime.time(now.hour, now.minute, now.second, now.microsecond, now.tzinfo)
isoformat = time.isoformat()
def test_time_query_variable(sample_time):
isoformat = sample_time.isoformat()
# test time variable provided as Python time
result = schema.execute(
"""query Test($time: Time){ time(at: $time) }""", variables={"time": time}
"""query Test($time: Time){ time(at: $time) }""",
variables={"time": sample_time},
)
assert not result.errors
assert result.data == {"time": isoformat}
@ -148,11 +166,13 @@ def test_time_query_variable():
@pytest.mark.xfail(
reason="creating the error message fails when un-parsable object is not JSON serializable."
)
def test_bad_variables():
def _test_bad_variables(type, input):
def test_bad_variables(sample_date, sample_datetime, sample_time):
def _test_bad_variables(type_, input_):
result = schema.execute(
"""query Test($input: {}){{ {}(in: $input) }}""".format(type, type.lower()),
variables={"input": input},
"""query Test($input: {}){{ {}(in: $input) }}""".format(
type_, type_.lower()
),
variables={"input": input_},
)
assert len(result.errors) == 1
# when `input` is not JSON serializable formatting the error message in
@ -163,9 +183,9 @@ def test_bad_variables():
not_a_date = dict()
not_a_date_str = "Some string that's not a date"
today = datetime.date.today()
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
time = datetime.time(now.hour, now.minute, now.second, now.microsecond, now.tzinfo)
today = sample_date
now = sample_datetime
time = sample_time
bad_pairs = [
("DateTime", not_a_date),
@ -182,5 +202,5 @@ def test_bad_variables():
("Time", today),
]
for type, input in bad_pairs:
_test_bad_variables(type, input)
for type_, input_ in bad_pairs:
_test_bad_variables(type_, input_)