From 880cbbfe4115c0b99ea76d2a83e8637e9312d1ad Mon Sep 17 00:00:00 2001 From: sebastianliebscher Date: Sat, 11 Nov 2023 10:50:37 +0100 Subject: [PATCH 1/2] test: Reduce flaky integration tests triggered by `test_get_tag` --- tests/integration_tests/tags/api_tests.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/integration_tests/tags/api_tests.py b/tests/integration_tests/tags/api_tests.py index 33fa4902b26ca..e24d494ab2490 100644 --- a/tests/integration_tests/tags/api_tests.py +++ b/tests/integration_tests/tags/api_tests.py @@ -131,7 +131,7 @@ def test_get_tag(self): self.assertEqual(rv.status_code, 200) expected_result = { "changed_by": None, - "changed_on_delta_humanized": "now", + "changed_on_delta_humanized": ["now", "a second ago", "two seconds ago"], "created_by": None, "id": tag.id, "name": "test get tag", @@ -139,6 +139,11 @@ def test_get_tag(self): } data = json.loads(rv.data.decode("utf-8")) for key, value in expected_result.items(): + if key == "changed_on_delta_humanized": + # 'changed_on_delta_humanized' sometimes fluctuates between 'now' and + # 'X second ago' which leads to flaky tests + self.assertIn(data["result"][key], value) + continue self.assertEqual(value, data["result"][key]) # rollback changes db.session.delete(tag) From 717ab4eedb70f542f4311801e4068b3915150252 Mon Sep 17 00:00:00 2001 From: sebastianliebscher Date: Mon, 13 Nov 2023 10:13:47 +0100 Subject: [PATCH 2/2] use freezegun --- tests/integration_tests/tags/api_tests.py | 24 +++++++++++------------ 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/tests/integration_tests/tags/api_tests.py b/tests/integration_tests/tags/api_tests.py index e24d494ab2490..91af9df34ef64 100644 --- a/tests/integration_tests/tags/api_tests.py +++ b/tests/integration_tests/tags/api_tests.py @@ -17,10 +17,12 @@ # isort:skip_file """Unit tests for Superset""" import json +from datetime import datetime from flask import g import pytest import prison +from freezegun import freeze_time from sqlalchemy.sql import func from sqlalchemy import and_ from superset.models.dashboard import Dashboard @@ -121,17 +123,18 @@ def test_get_tag(self): """ Query API: Test get query """ - tag = self.insert_tag( - name="test get tag", - tag_type="custom", - ) - self.login(username="admin") - uri = f"api/v1/tag/{tag.id}" - rv = self.client.get(uri) + with freeze_time(datetime.now()): + tag = self.insert_tag( + name="test get tag", + tag_type="custom", + ) + self.login(username="admin") + uri = f"api/v1/tag/{tag.id}" + rv = self.client.get(uri) self.assertEqual(rv.status_code, 200) expected_result = { "changed_by": None, - "changed_on_delta_humanized": ["now", "a second ago", "two seconds ago"], + "changed_on_delta_humanized": "now", "created_by": None, "id": tag.id, "name": "test get tag", @@ -139,11 +142,6 @@ def test_get_tag(self): } data = json.loads(rv.data.decode("utf-8")) for key, value in expected_result.items(): - if key == "changed_on_delta_humanized": - # 'changed_on_delta_humanized' sometimes fluctuates between 'now' and - # 'X second ago' which leads to flaky tests - self.assertIn(data["result"][key], value) - continue self.assertEqual(value, data["result"][key]) # rollback changes db.session.delete(tag)