Merge pull request #9097 from edx/aj/plat-760-fix-flaky-test_import_timestamp
Fixed Flaky test
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
"""
|
||||
Import/Export pages.
|
||||
"""
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
from bok_choy.promise import EmptyPromise
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
|
||||
from .utils import click_css
|
||||
from .library import LibraryPage
|
||||
from .course_page import CoursePage
|
||||
@@ -129,6 +133,15 @@ class ImportMixin(object):
|
||||
|
||||
return re.match(r'\(([^ ]+).+?(\d{2}:\d{2})', string).groups()
|
||||
|
||||
@property
|
||||
def parsed_timestamp(self):
|
||||
"""
|
||||
Return python datetime object from the parsed timestamp tuple (date, time)
|
||||
"""
|
||||
timestamp = "{0} {1}".format(*self.timestamp)
|
||||
formatted_timestamp = time.strptime(timestamp, "%m/%d/%Y %H:%M")
|
||||
return datetime.fromtimestamp(time.mktime(formatted_timestamp))
|
||||
|
||||
def is_browser_on_page(self):
|
||||
"""
|
||||
Verify this is the export page
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
"""
|
||||
Acceptance tests for the Import and Export pages
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
from abc import abstractmethod
|
||||
from bok_choy.promise import EmptyPromise
|
||||
from datetime import datetime
|
||||
from flaky import flaky
|
||||
|
||||
from .base_studio_test import StudioLibraryTest, StudioCourseTest
|
||||
from ...fixtures.course import XBlockFixtureDesc
|
||||
@@ -186,7 +186,6 @@ class ImportTestMixin(object):
|
||||
self.import_page.upload_tarball(self.tarball_name)
|
||||
self.import_page.wait_for_upload()
|
||||
|
||||
@flaky # TODO make this not flaky. See TNL-2886.
|
||||
def test_import_timestamp(self):
|
||||
"""
|
||||
Scenario: I perform a course / library import
|
||||
@@ -194,25 +193,33 @@ class ImportTestMixin(object):
|
||||
And if I refresh the page, the timestamp is still displayed
|
||||
"""
|
||||
self.assertFalse(self.import_page.is_timestamp_visible())
|
||||
|
||||
# Get the time when the import has started.
|
||||
# import_page timestamp is in (MM/DD/YYYY at HH:mm) so replacing (second, microsecond) to
|
||||
# keep the comparison consistent
|
||||
upload_start_time = datetime.utcnow().replace(microsecond=0, second=0)
|
||||
self.import_page.upload_tarball(self.tarball_name)
|
||||
self.import_page.wait_for_upload()
|
||||
|
||||
utc_now = datetime.utcnow()
|
||||
import_date, import_time = self.import_page.timestamp
|
||||
# Get the time when the import has finished.
|
||||
# import_page timestamp is in (MM/DD/YYYY at HH:mm) so replacing (second, microsecond) to
|
||||
# keep the comparison consistent
|
||||
upload_finish_time = datetime.utcnow().replace(microsecond=0, second=0)
|
||||
|
||||
import_timestamp = self.import_page.parsed_timestamp
|
||||
self.import_page.wait_for_timestamp_visible()
|
||||
# Flaky pattern:
|
||||
# This test failed because the utc_now and import date
|
||||
# might be assigned at different times. The error message
|
||||
# was "'18:30' != u'18:29'", meaning it uploaded it at 18:29, then,
|
||||
# when we assigned utc_now, the time had crossed the minute to
|
||||
# 18:30.
|
||||
# Possible fixes:
|
||||
# * Mock utcnow somehow.
|
||||
# * Check for the date and time within a certain range, rather than
|
||||
# doing a string comparison.
|
||||
self.assertEqual(utc_now.strftime('%m/%d/%Y'), import_date)
|
||||
self.assertEqual(utc_now.strftime('%H:%M'), import_time)
|
||||
|
||||
# Verify that 'import_timestamp' is between start and finish upload time
|
||||
self.assertLessEqual(
|
||||
upload_start_time,
|
||||
import_timestamp,
|
||||
"Course import timestamp should be upload_start_time <= import_timestamp <= upload_end_time"
|
||||
)
|
||||
self.assertGreaterEqual(
|
||||
upload_finish_time,
|
||||
import_timestamp,
|
||||
"Course import timestamp should be upload_start_time <= import_timestamp <= upload_end_time"
|
||||
)
|
||||
|
||||
self.import_page.visit()
|
||||
self.import_page.wait_for_tasks(completed=True)
|
||||
|
||||
Reference in New Issue
Block a user