From ec9f76cfae8ea0a5d8fa19003d2dd49fd2fb5f0e Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 1 Jun 2019 16:41:45 -0400 Subject: [PATCH] Fix flaky date tests (#982) * fix flaky datetime test with fixed values * rename fixtures for clarity in date+time tests --- graphene/types/tests/test_datetime.py | 84 +++++++++++++++++---------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/graphene/types/tests/test_datetime.py b/graphene/types/tests/test_datetime.py index 0d9ee114..bb6f212c 100644 --- a/graphene/types/tests/test_datetime.py +++ b/graphene/types/tests/test_datetime.py @@ -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_)