Flaky Frontend tests
Summary
The frontend e2e test are flaky and fail in irregular intervals. This is quite annoying since the whole pipeline has to be restarted.
Steps to reproduce
Run the pipeline a bunch of times. Some of them will fail...
Example Project
What is the current bug behavior?
What is the expected correct behavior?
Relevant logs and/or screenshots
Output of recent failed jobs:
[0KRunning with gitlab-runner 11.3.1 (0aa5179e)
[0;m[0K on robins-grady-docker-runner 6ac1a4ac
[0;m[0KUsing Docker executor with image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KStarting service postgres:9.6 ...
[0;m[0KPulling docker image postgres:9.6 ...
[0;m[0KUsing docker image sha256:aee5bfb5ec09669f4c90d9cbab577884843a3194dfc1e87bd0531b82c3fc4b71 for postgres:9.6 ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KUsing docker image sha256:5c6715f7a9e04885d10243f690c606c909a0f034084de3a96d1963cfc84ca4b3 for docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;msection_start:1550760732:prepare_script
[0KRunning on runner-6ac1a4ac-project-985-concurrent-2 via vmd30259.contaboserver.net...
section_end:1550760733:prepare_script
[0Ksection_start:1550760733:get_sources
[0K[32;1mFetching changes...[0;m
Removing .venv/
HEAD is now at aed5503 Changes in CI Pipeline and tagging of images
[32;1mChecking out aed55038 as only-tagged-master-branches-are-built...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1550760737:get_sources
[0Ksection_start:1550760737:restore_cache
[0Ksection_end:1550760739:restore_cache
[0Ksection_start:1550760739:download_artifacts
[0K[32;1mDownloading artifacts for build_frontend (144082)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144082 responseStatus[0;m=200 OK token[0;m=oeD74zo5
[32;1mDownloading artifacts for build_test_env (144081)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144081 responseStatus[0;m=200 OK token[0;m=zf36gwz5
[0;33mWARNING: .venv/bin/python: chmod .venv/bin/python: no such file or directory (suppressing repeats)[0;m
section_end:1550760757:download_artifacts
[0Ksection_start:1550760757:build_script
[0K[32;1m$ source .venv/bin/activate[0;m
[32;1m$ cp frontend/dist/index.html core/templates[0;m
[32;1m$ python util/format_index.py[0;m
[32;1m$ python manage.py collectstatic --no-input[0;m
185 static files copied to '/builds/j.michal/grady/static', 551 post-processed.
[32;1m$ HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests[0;m
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-3.8.2, py-1.6.0, pluggy-0.7.1
Django settings: grady.settings.test (from command line option)
rootdir: /builds/j.michal/grady, inifile:
plugins: django-3.4.7, cov-2.6.1
collected 27 items
functional_tests/test_auto_logout.py . [ 3%]
functional_tests/test_export_modal.py ....... [ 29%]
functional_tests/test_feedback_creation.py ......... [ 62%]
functional_tests/test_front_pages.py ...F.. [ 85%]
functional_tests/test_login_page.py .... [100%]
=================================== FAILURES ===================================
____________ FrontPageTestsReviewer.test_available_tasks_are_shown _____________
self = <functional_tests.test_front_pages.FrontPageTestsReviewer testMethod=test_available_tasks_are_shown>
def test_available_tasks_are_shown(self):
self._login()
tasks = self.browser.find_element_by_name('subscription-list')
> title = tasks.find_element_by_class_name('v-toolbar__title')
functional_tests/test_front_pages.py:51:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:398: in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:659: in find_element
{"using": by, "value": value})['value']
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:633: in _execute
return self._parent.execute(command, params)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7fd7606f9b70>
response = {'status': 404, 'value': '{"value":{"error":"stale element reference","message":"The element reference of <div class=\...req<@chrome://marionette/content/listener.js:485:20\\ndispatch/<@chrome://marionette/content/listener.js:484:15\\n"}}'}
def check_response(self, response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message, basestring):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value, basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response, value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame, 'lineNumber', '')
file = self._value_or_default(frame, 'fileName', '<anonymous>')
if line:
file = "%s:%s" % (file, line)
meth = self._value_or_default(frame, 'methodName', '<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response, message)
elif exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <div class="v-card v-sheet theme--light elevation-2" name="subscription-list"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: StaleElementReferenceException
----------------------------- Captured stderr call -----------------------------
[2019-02-21 14:56:07,613] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:56:07,853] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:56:08,063] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:56:08,323] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:56:09,758] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 14:56:09,758] [WARNING] django.request Not Found: /favicon.ico
------------------------------ Captured log call -------------------------------
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
log.py 228 WARNING Not Found: /favicon.ico
=============================== warnings summary ===============================
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
source:175: DeprecationWarning: invalid escape sequence \_
source:191: DeprecationWarning: invalid escape sequence \_
source:359: DeprecationWarning: invalid escape sequence \_
source:375: DeprecationWarning: invalid escape sequence \_
source:626: DeprecationWarning: invalid escape sequence \*
source:650: DeprecationWarning: invalid escape sequence \*
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============== 1 failed, 26 passed, 35 warnings in 247.10 seconds ==============
section_end:1550761013:build_script
[0Ksection_start:1550761013:after_script
[0Ksection_end:1550761015:after_script
[0Ksection_start:1550761015:upload_artifacts_on_failure
[0Ksection_end:1550761017:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m
[0KRunning with gitlab-runner 11.3.1 (0aa5179e)
[0;m[0K on robins-grady-docker-runner 6ac1a4ac
[0;m[0KUsing Docker executor with image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KStarting service postgres:9.6 ...
[0;m[0KPulling docker image postgres:9.6 ...
[0;m[0KUsing docker image sha256:aee5bfb5ec09669f4c90d9cbab577884843a3194dfc1e87bd0531b82c3fc4b71 for postgres:9.6 ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KUsing docker image sha256:5c6715f7a9e04885d10243f690c606c909a0f034084de3a96d1963cfc84ca4b3 for docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;msection_start:1550759713:prepare_script
[0KRunning on runner-6ac1a4ac-project-985-concurrent-3 via vmd30259.contaboserver.net...
section_end:1550759716:prepare_script
[0Ksection_start:1550759716:get_sources
[0K[32;1mFetching changes...[0;m
Removing frontend/dist/
Removing frontend/node_modules/
HEAD is now at 19d8ed4 fixed incorrect block comment highlighting
From https://gitlab.gwdg.de/j.michal/grady
* [new branch] only-tagged-master-branches-are-built -> origin/only-tagged-master-branches-are-built
[32;1mChecking out aed55038 as only-tagged-master-branches-are-built...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1550759721:get_sources
[0Ksection_start:1550759721:restore_cache
[0Ksection_end:1550759722:restore_cache
[0Ksection_start:1550759722:download_artifacts
[0K[32;1mDownloading artifacts for build_frontend (144069)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144069 responseStatus[0;m=200 OK token[0;m=9oECbb7P
[32;1mDownloading artifacts for build_test_env (144068)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144068 responseStatus[0;m=200 OK token[0;m=tt5YuyPC
[0;33mWARNING: .venv/bin/python: chmod .venv/bin/python: no such file or directory (suppressing repeats)[0;m
section_end:1550759747:download_artifacts
[0Ksection_start:1550759747:build_script
[0K[32;1m$ source .venv/bin/activate[0;m
[32;1m$ cp frontend/dist/index.html core/templates[0;m
[32;1m$ python util/format_index.py[0;m
[32;1m$ python manage.py collectstatic --no-input[0;m
185 static files copied to '/builds/j.michal/grady/static', 551 post-processed.
[32;1m$ HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests[0;m
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
Django settings: grady.settings.test (from command line option)
rootdir: /builds/j.michal/grady, inifile:
plugins: django-3.4.7, cov-2.6.1
collected 27 items
functional_tests/test_auto_logout.py . [ 3%]
functional_tests/test_export_modal.py .....F. [ 29%]
functional_tests/test_feedback_creation.py ..F...... [ 62%]
functional_tests/test_front_pages.py ...... [ 85%]
functional_tests/test_login_page.py .... [100%]
=================================== FAILURES ===================================
______________ ExportTestModal.test_export_student_scores_as_json ______________
self = <functional_tests.test_export_modal.ExportTestModal testMethod=test_export_student_scores_as_json>
def test_export_student_scores_as_json(self):
self._login()
fact.StudentInfoFactory()
> export_btn = self.browser.find_element_by_id('export-btn')
functional_tests/test_export_modal.py:86:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:360: in find_element_by_id
return self.find_element(by=By.ID, value=id_)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:978: in find_element
'value': value})['value']
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7fe0ccf9beb8>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: [id=\\"export-btn\\...ror@chrome://marionette/content/error.js:434:5\\nelement.find/</<@chrome://marionette/content/element.js:341:16\\n"}}'}
def check_response(self, response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message, basestring):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value, basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response, value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame, 'lineNumber', '')
file = self._value_or_default(frame, 'fileName', '<anonymous>')
if line:
file = "%s:%s" % (file, line)
meth = self._value_or_default(frame, 'methodName', '<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response, message)
elif exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="export-btn"]
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: NoSuchElementException
______________ TestFeedbackCreationTutor.test_can_give_zero_score ______________
self = <functional_tests.test_feedback_creation.TestFeedbackCreationTutor testMethod=test_can_give_zero_score>
def test_can_give_zero_score(self):
self._login()
self._go_to_subscription()
code = self._reconstruct_submission_code()
self.browser.find_element_by_id('score-zero').click()
self.write_comments_on_lines([(0, 'A comment')])
self.browser.find_element_by_id('submit-feedback').click()
WebDriverWait(self.browser, 3).until(self.wait_until_code_changes(code))
submission_for_code = Submission.objects.get(text=code)
> self.assertEqual(0, submission_for_code.feedback.score)
functional_tests/test_feedback_creation.py:167:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor object at 0x7fe0ce92c198>
instance = <Submission: Submission 2cc587cb-e369-4669-9b58-7a807bea7674>
cls = <class 'core.models.Submission'>
def __get__(self, instance, cls=None):
"""
Get the related instance through the reverse relation.
With the example above, when getting ``place.restaurant``:
- ``self`` is the descriptor managing the ``restaurant`` attribute
- ``instance`` is the ``place`` instance
- ``cls`` is the ``Place`` class (unused)
Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
"""
if instance is None:
return self
# The related instance is loaded from the database and then cached
# by the field on the model instance state. It can also be pre-cached
# by the forward accessor (ForwardManyToOneDescriptor).
try:
rel_obj = self.related.get_cached_value(instance)
except KeyError:
related_pk = instance.pk
if related_pk is None:
rel_obj = None
else:
filter_args = self.related.field.get_forward_related_filter(instance)
try:
rel_obj = self.get_queryset(instance=instance).get(**filter_args)
except self.related.related_model.DoesNotExist:
rel_obj = None
else:
# Set the forward accessor cache on the related object to
# the current instance to avoid an extra SQL query if it's
# accessed later on.
self.related.field.set_cached_value(rel_obj, instance)
self.related.set_cached_value(instance, rel_obj)
if rel_obj is None:
raise self.RelatedObjectDoesNotExist(
"%s has no %s." % (
instance.__class__.__name__,
> self.related.get_accessor_name()
)
)
E core.models.Submission.feedback.RelatedObjectDoesNotExist: Submission has no feedback.
.venv/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py:414: RelatedObjectDoesNotExist
----------------------------- Captured stderr call -----------------------------
[2019-02-21 14:38:00,106] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:38:00,424] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 14:38:07,356] [INFO] core.models tutor is assigned to Submission Meta of Submission 2cc587cb-e369-4669-9b58-7a807bea7674
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
[2019-02-21 14:38:07,363] [DEBUG] core.signals SIGNAL -- update_active_after_assignment_save
[2019-02-21 14:38:07,479] [INFO] core.models tutor is assigned to Submission Meta of Submission 5aa963c1-9ab3-47b5-bda0-bdb64161f7f2
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
[2019-02-21 14:38:07,494] [DEBUG] core.signals SIGNAL -- update_active_after_assignment_save
[2019-02-21 14:38:10,583] [WARNING] django.request Unauthorized: /api/feedback/
[2019-02-21 14:38:10,583] [WARNING] django.request Unauthorized: /api/feedback/
------------------------------ Captured log call -------------------------------
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
models.py 681 INFO tutor is assigned to Submission Meta of Submission 2cc587cb-e369-4669-9b58-7a807bea7674
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
signals.py 25 DEBUG SIGNAL -- update_active_after_assignment_save
models.py 681 INFO tutor is assigned to Submission Meta of Submission 5aa963c1-9ab3-47b5-bda0-bdb64161f7f2
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
signals.py 25 DEBUG SIGNAL -- update_active_after_assignment_save
log.py 228 WARNING Unauthorized: /api/feedback/
=============================== warnings summary ===============================
functional_tests/test_auto_logout.py::TestAutoLogout::test_auto_logout_can_continue
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_allgood_tooltip_all_corrected
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_green_all_corrected
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_instance
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_list_popup_contains_correct_items
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_red_uncorrected_submissions
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_student_scores_as_json
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_export_modal.py::ExportTestModal::test_export_warning_tooltip_uncorrected_submissions
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_can_give_comments_and_decreased_score
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_can_give_max_score
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_can_give_zero_score
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_can_skip_submission
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_can_validate_submission
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_student_text_is_correctly_displayed
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_submission_type_is_correctly_displayed
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_test_output_is_displayed
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_feedback_creation.py::TestFeedbackCreationTutor::test_zero_score_without_warning_gives_error
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsTutor::test_available_tasks_are_shown
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsTutor::test_side_bar_contains_correct_items
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsTutor::test_statistics_are_shown
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsReviewer::test_available_tasks_are_shown
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsReviewer::test_side_bar_contains_correct_items
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_front_pages.py::FrontPageTestsReviewer::test_statistics_are_shown
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_login_page.py::LoginPageTest::test_reviewer_can_login
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_login_page.py::LoginPageTest::test_student_can_login
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
functional_tests/test_login_page.py::LoginPageTest::test_tutor_can_login
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============== 2 failed, 25 passed, 29 warnings in 255.99 seconds ==============
section_end:1550760015:build_script
[0Ksection_start:1550760015:after_script
[0Ksection_end:1550760016:after_script
[0Ksection_start:1550760016:upload_artifacts_on_failure
[0Ksection_end:1550760018:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m
[0KRunning with gitlab-runner 11.3.1 (0aa5179e)
[0;m[0K on robins-grady-docker-runner 6ac1a4ac
[0;m[0KUsing Docker executor with image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KStarting service postgres:9.6 ...
[0;m[0KPulling docker image postgres:9.6 ...
[0;m[0KUsing docker image sha256:aee5bfb5ec09669f4c90d9cbab577884843a3194dfc1e87bd0531b82c3fc4b71 for postgres:9.6 ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KUsing docker image sha256:5c6715f7a9e04885d10243f690c606c909a0f034084de3a96d1963cfc84ca4b3 for docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;msection_start:1550756700:prepare_script
[0KRunning on runner-6ac1a4ac-project-985-concurrent-2 via vmd30259.contaboserver.net...
section_end:1550756703:prepare_script
[0Ksection_start:1550756703:get_sources
[0K[32;1mFetching changes...[0;m
Removing .pytest_cache/
Removing .venv/
Removing core/__pycache__/
Removing core/migrations/__pycache__/
Removing core/serializers/__pycache__/
Removing core/views/__pycache__/
Removing frontend/dist/
Removing frontend/node_modules/
Removing functional_tests/__pycache__/
Removing geckodriver.log
Removing grady/__pycache__/
Removing grady/settings/__pycache__/
Removing secret
Removing static/
Removing util/__pycache__/
HEAD is now at 19d8ed4 fixed incorrect block comment highlighting
From https://gitlab.gwdg.de/j.michal/grady
- [deleted] (none) -> origin/141-incorrect-syntax-highlighting-for-block-comments
b08b741..19d8ed4 master -> origin/master
[32;1mChecking out 19d8ed4d as master...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1550756707:get_sources
[0Ksection_start:1550756707:restore_cache
[0Ksection_end:1550756709:restore_cache
[0Ksection_start:1550756709:download_artifacts
[0K[32;1mDownloading artifacts for build_frontend (144036)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144036 responseStatus[0;m=200 OK token[0;m=eWNFh_JV
[32;1mDownloading artifacts for build_test_env (144035)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144035 responseStatus[0;m=200 OK token[0;m=VCrFR_pT
[0;33mWARNING: .venv/bin/python: chmod .venv/bin/python: no such file or directory (suppressing repeats)[0;m
section_end:1550756727:download_artifacts
[0Ksection_start:1550756727:build_script
[0K[32;1m$ source .venv/bin/activate[0;m
[32;1m$ cp frontend/dist/index.html core/templates[0;m
[32;1m$ python util/format_index.py[0;m
[32;1m$ python manage.py collectstatic --no-input[0;m
185 static files copied to '/builds/j.michal/grady/static', 551 post-processed.
[32;1m$ HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests[0;m
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-3.8.2, py-1.6.0, pluggy-0.7.1
Django settings: grady.settings.test (from command line option)
rootdir: /builds/j.michal/grady, inifile:
plugins: django-3.4.7, cov-2.6.1
collected 27 items
functional_tests/test_auto_logout.py . [ 3%]
functional_tests/test_export_modal.py ....... [ 29%]
functional_tests/test_feedback_creation.py F........ [ 62%]
functional_tests/test_front_pages.py ...... [ 85%]
functional_tests/test_login_page.py .... [100%]
=================================== FAILURES ===================================
_____ TestFeedbackCreationTutor.test_can_give_comments_and_decreased_score _____
self = <functional_tests.test_feedback_creation.TestFeedbackCreationTutor testMethod=test_can_give_comments_and_decreased_score>
def test_can_give_comments_and_decreased_score(self):
self._login()
> self._go_to_subscription()
functional_tests/test_feedback_creation.py:171:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
functional_tests/test_feedback_creation.py:57: in _go_to_subscription
tasks = self.browser.find_element_by_name('subscription-list')
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:496: in find_element_by_name
return self.find_element(by=By.NAME, value=name)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:978: in find_element
'value': value})['value']
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f80341ea710>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: [name=\\"subscripti...ror@chrome://marionette/content/error.js:434:5\\nelement.find/</<@chrome://marionette/content/element.js:341:16\\n"}}'}
def check_response(self, response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message, basestring):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value, basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response, value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame, 'lineNumber', '')
file = self._value_or_default(frame, 'fileName', '<anonymous>')
if line:
file = "%s:%s" % (file, line)
meth = self._value_or_default(frame, 'methodName', '<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response, message)
elif exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="subscription-list"]
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: NoSuchElementException
----------------------------- Captured stderr call -----------------------------
[2019-02-21 13:47:04,119] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 13:47:04,380] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 13:47:07,340] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:47:07,340] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:47:07,344] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:47:07,344] [WARNING] django.request Not Found: /favicon.ico
------------------------------ Captured log call -------------------------------
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
log.py 228 WARNING Not Found: /favicon.ico
log.py 228 WARNING Not Found: /favicon.ico
=============================== warnings summary ===============================
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
source:359: DeprecationWarning: invalid escape sequence \_
source:375: DeprecationWarning: invalid escape sequence \_
source:626: DeprecationWarning: invalid escape sequence \*
source:650: DeprecationWarning: invalid escape sequence \*
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============== 1 failed, 26 passed, 32 warnings in 241.44 seconds ==============
section_end:1550756977:build_script
[0Ksection_start:1550756977:after_script
[0Ksection_end:1550756979:after_script
[0Ksection_start:1550756979:upload_artifacts_on_failure
[0Ksection_end:1550756980:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m
[0KRunning with gitlab-runner 11.3.1 (0aa5179e)
[0;m[0K on robins-grady-docker-runner 6ac1a4ac
[0;m[0KUsing Docker executor with image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KStarting service postgres:9.6 ...
[0;m[0KPulling docker image postgres:9.6 ...
[0;m[0KUsing docker image sha256:aee5bfb5ec09669f4c90d9cbab577884843a3194dfc1e87bd0531b82c3fc4b71 for postgres:9.6 ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KUsing docker image sha256:5c6715f7a9e04885d10243f690c606c909a0f034084de3a96d1963cfc84ca4b3 for docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;msection_start:1550754880:prepare_script
[0KRunning on runner-6ac1a4ac-project-985-concurrent-3 via vmd30259.contaboserver.net...
section_end:1550754881:prepare_script
[0Ksection_start:1550754881:get_sources
[0K[32;1mFetching changes...[0;m
Removing frontend/dist/
Removing frontend/node_modules/
HEAD is now at b08b741 Fixed copy to clipboard
From https://gitlab.gwdg.de/j.michal/grady
b08b741..19d8ed4 141-incorrect-syntax-highlighting-for-block-comments -> origin/141-incorrect-syntax-highlighting-for-block-comments
[32;1mChecking out 19d8ed4d as 141-incorrect-syntax-highlighting-for-block-comments...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1550754886:get_sources
[0Ksection_start:1550754886:restore_cache
[0Ksection_end:1550754888:restore_cache
[0Ksection_start:1550754888:download_artifacts
[0K[32;1mDownloading artifacts for build_frontend (144008)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144008 responseStatus[0;m=200 OK token[0;m=bM7sFemU
[32;1mDownloading artifacts for build_test_env (144007)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144007 responseStatus[0;m=200 OK token[0;m=QMFpyaf5
[0;33mWARNING: .venv/bin/python: chmod .venv/bin/python: no such file or directory (suppressing repeats)[0;m
section_end:1550754910:download_artifacts
[0Ksection_start:1550754910:build_script
[0K[32;1m$ source .venv/bin/activate[0;m
[32;1m$ cp frontend/dist/index.html core/templates[0;m
[32;1m$ python util/format_index.py[0;m
[32;1m$ python manage.py collectstatic --no-input[0;m
185 static files copied to '/builds/j.michal/grady/static', 551 post-processed.
[32;1m$ HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests[0;m
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-3.8.2, py-1.6.0, pluggy-0.7.1
Django settings: grady.settings.test (from command line option)
rootdir: /builds/j.michal/grady, inifile:
plugins: django-3.4.7, cov-2.6.1
collected 27 items
functional_tests/test_auto_logout.py F [ 3%]
functional_tests/test_export_modal.py ....... [ 29%]
functional_tests/test_feedback_creation.py F........ [ 62%]
functional_tests/test_front_pages.py ...... [ 85%]
functional_tests/test_login_page.py .... [100%]
=================================== FAILURES ===================================
_________________ TestAutoLogout.test_auto_logout_can_continue _________________
self = <functional_tests.test_auto_logout.TestAutoLogout testMethod=test_auto_logout_can_continue>
def test_auto_logout_can_continue(self):
with self.settings(JWT_AUTH={
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=5),
'JWT_ALLOW_REFRESH': True,
}
):
self._login()
initial_token = self.browser.execute_script(
'return sessionStorage["token"]'
)
logout_dialog = self.browser.find_element_by_id('logout-dialog')
WebDriverWait(self.browser, 5).until(
ec.visibility_of_element_located((By.ID, 'logout-dialog')))
logout_dialog.find_element_by_id('continue-btn').click()
# explicit sleep is unfortunately necessary here, since we need to wait
# for the initial token to expire and the site to be the same
time.sleep(2)
self.assertNotIn('login', self.browser.current_url)
new_token = self.browser.execute_script(
'return sessionStorage["token"]'
)
> self.assertNotEqual(initial_token, new_token)
E AssertionError: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZjkwY2YwYzEtMjc3Yi00N2M4LWExMWYtNTMyMDZmODAxYzE1IiwidXNlcm5hbWUiOiJyZXZpZXdlciIsImV4cCI6MTU1MDc1NDkzOSwiZW1haWwiOiIiLCJvcmlnX2lhdCI6MTU1MDc1NDkzNH0.hkB-nMIGU_AL-Ps0QF-xqyZnXNY_NF2p70mGozbdCyY' == 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZjkwY2YwYzEtMjc3Yi00N2M4LWExMWYtNTMyMDZmODAxYzE1IiwidXNlcm5hbWUiOiJyZXZpZXdlciIsImV4cCI6MTU1MDc1NDkzOSwiZW1haWwiOiIiLCJvcmlnX2lhdCI6MTU1MDc1NDkzNH0.hkB-nMIGU_AL-Ps0QF-xqyZnXNY_NF2p70mGozbdCyY'
functional_tests/test_auto_logout.py:67: AssertionError
----------------------------- Captured stderr call -----------------------------
[2019-02-21 13:15:34,360] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:15:34,360] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:15:34,385] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:15:34,385] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:15:40,132] [WARNING] django.request Bad Request: /api/refresh-token/
[2019-02-21 13:15:40,132] [WARNING] django.request Bad Request: /api/refresh-token/
------------------------------ Captured log call -------------------------------
log.py 228 WARNING Not Found: /favicon.ico
log.py 228 WARNING Not Found: /favicon.ico
log.py 228 WARNING Bad Request: /api/refresh-token/
_____ TestFeedbackCreationTutor.test_can_give_comments_and_decreased_score _____
self = <functional_tests.test_feedback_creation.TestFeedbackCreationTutor testMethod=test_can_give_comments_and_decreased_score>
def test_can_give_comments_and_decreased_score(self):
self._login()
self._go_to_subscription()
code = self._reconstruct_submission_code()
# give half full score
score_input = self.browser.find_element_by_id('score-input')
score_input.send_keys(self.sub_type.full_score // 2)
# give feedback on first and last line of submission
comment_text = 'This is feedback'
self.write_comments_on_lines([
(1, comment_text), (0, comment_text) # 0 corresponds to the last line
])
submit_btn = self.browser.find_element_by_id('submit-feedback')
submit_btn.click()
WebDriverWait(self.browser, 3).until(
self.wait_until_code_changes(code)
)
submission_for_code = Submission.objects.get(text=code)
> self.assertEqual(self.sub_type.full_score // 2, submission_for_code.feedback.score)
functional_tests/test_feedback_creation.py:190:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor object at 0x7fd15258e898>
instance = <Submission: Submission afaa5560-d1cd-4d1c-a045-07bb1997ecf1>
cls = <class 'core.models.Submission'>
def __get__(self, instance, cls=None):
"""
Get the related instance through the reverse relation.
With the example above, when getting ``place.restaurant``:
- ``self`` is the descriptor managing the ``restaurant`` attribute
- ``instance`` is the ``place`` instance
- ``cls`` is the ``Place`` class (unused)
Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
"""
if instance is None:
return self
# The related instance is loaded from the database and then cached
# by the field on the model instance state. It can also be pre-cached
# by the forward accessor (ForwardManyToOneDescriptor).
try:
rel_obj = self.related.get_cached_value(instance)
except KeyError:
related_pk = instance.pk
if related_pk is None:
rel_obj = None
else:
filter_args = self.related.field.get_forward_related_filter(instance)
try:
rel_obj = self.get_queryset(instance=instance).get(**filter_args)
except self.related.related_model.DoesNotExist:
rel_obj = None
else:
# Set the forward accessor cache on the related object to
# the current instance to avoid an extra SQL query if it's
# accessed later on.
self.related.field.set_cached_value(rel_obj, instance)
self.related.set_cached_value(instance, rel_obj)
if rel_obj is None:
raise self.RelatedObjectDoesNotExist(
"%s has no %s." % (
instance.__class__.__name__,
> self.related.get_accessor_name()
)
)
E core.models.Submission.feedback.RelatedObjectDoesNotExist: Submission has no feedback.
.venv/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py:414: RelatedObjectDoesNotExist
----------------------------- Captured stderr call -----------------------------
[2019-02-21 13:16:56,987] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 13:16:57,227] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 13:16:58,571] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:16:58,571] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:16:58,578] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:16:58,578] [WARNING] django.request Not Found: /favicon.ico
[2019-02-21 13:17:00,713] [INFO] core.models tutor is assigned to Submission Meta of Submission afaa5560-d1cd-4d1c-a045-07bb1997ecf1
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
[2019-02-21 13:17:00,715] [DEBUG] core.signals SIGNAL -- update_active_after_assignment_save
[2019-02-21 13:17:00,738] [INFO] core.models tutor is assigned to Submission Meta of Submission 0e681eb6-c115-47a6-8459-fbc302de9e93
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
[2019-02-21 13:17:00,740] [DEBUG] core.signals SIGNAL -- update_active_after_assignment_save
[2019-02-21 13:17:05,175] [WARNING] django.request Unauthorized: /api/feedback/
[2019-02-21 13:17:05,175] [WARNING] django.request Unauthorized: /api/feedback/
------------------------------ Captured log call -------------------------------
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
log.py 228 WARNING Not Found: /favicon.ico
log.py 228 WARNING Not Found: /favicon.ico
models.py 681 INFO tutor is assigned to Submission Meta of Submission afaa5560-d1cd-4d1c-a045-07bb1997ecf1
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
signals.py 25 DEBUG SIGNAL -- update_active_after_assignment_save
models.py 681 INFO tutor is assigned to Submission Meta of Submission 0e681eb6-c115-47a6-8459-fbc302de9e93
done_assignments = 0
has_active_assignment = False
has_feedback = False
has_final_feedback = False
feedback_authors = <QuerySet []>
(feedback-creation)
signals.py 25 DEBUG SIGNAL -- update_active_after_assignment_save
log.py 228 WARNING Unauthorized: /api/feedback/
=============================== warnings summary ===============================
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============== 2 failed, 25 passed, 27 warnings in 253.84 seconds ==============
section_end:1550755177:build_script
[0Ksection_start:1550755177:after_script
[0Ksection_end:1550755179:after_script
[0Ksection_start:1550755179:upload_artifacts_on_failure
[0Ksection_end:1550755180:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m
[0KRunning with gitlab-runner 11.3.1 (0aa5179e)
[0;m[0K on robins-grady-docker-runner 6ac1a4ac
[0;m[0KUsing Docker executor with image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KStarting service postgres:9.6 ...
[0;m[0KPulling docker image postgres:9.6 ...
[0;m[0KUsing docker image sha256:aee5bfb5ec09669f4c90d9cbab577884843a3194dfc1e87bd0531b82c3fc4b71 for postgres:9.6 ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;m[0KUsing docker image sha256:5c6715f7a9e04885d10243f690c606c909a0f034084de3a96d1963cfc84ca4b3 for docker.gitlab.gwdg.de/robinwilliam.hundt/python-geckodriver:master ...
[0;msection_start:1550754598:prepare_script
[0KRunning on runner-6ac1a4ac-project-985-concurrent-2 via vmd30259.contaboserver.net...
section_end:1550754600:prepare_script
[0Ksection_start:1550754600:get_sources
[0K[32;1mFetching changes...[0;m
Removing .pytest_cache/
Removing .venv/
Removing core/__pycache__/
Removing core/migrations/__pycache__/
Removing core/serializers/__pycache__/
Removing core/views/__pycache__/
Removing frontend/dist/
Removing frontend/node_modules/
Removing functional_tests/__pycache__/
Removing geckodriver.log
Removing grady/__pycache__/
Removing grady/settings/__pycache__/
Removing secret
Removing static/
Removing util/__pycache__/
HEAD is now at b08b741 Fixed copy to clipboard
From https://gitlab.gwdg.de/j.michal/grady
* [new branch] 141-incorrect-syntax-highlighting-for-block-comments -> origin/141-incorrect-syntax-highlighting-for-block-comments
[32;1mChecking out b08b741c as 141-incorrect-syntax-highlighting-for-block-comments...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1550754609:get_sources
[0Ksection_start:1550754609:restore_cache
[0Ksection_end:1550754611:restore_cache
[0Ksection_start:1550754611:download_artifacts
[0K[32;1mDownloading artifacts for build_frontend (144001)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144001 responseStatus[0;m=200 OK token[0;m=QLfeZ5mi
[32;1mDownloading artifacts for build_test_env (144000)...[0;m
Downloading artifacts from coordinator... ok [0;m id[0;m=144000 responseStatus[0;m=200 OK token[0;m=Jsbebys2
[0;33mWARNING: .venv/bin/python: chmod .venv/bin/python: no such file or directory (suppressing repeats)[0;m
section_end:1550754631:download_artifacts
[0Ksection_start:1550754631:build_script
[0K[32;1m$ source .venv/bin/activate[0;m
[32;1m$ cp frontend/dist/index.html core/templates[0;m
[32;1m$ python util/format_index.py[0;m
[32;1m$ python manage.py collectstatic --no-input[0;m
185 static files copied to '/builds/j.michal/grady/static', 551 post-processed.
[32;1m$ HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests[0;m
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-3.8.2, py-1.6.0, pluggy-0.7.1
Django settings: grady.settings.test (from command line option)
rootdir: /builds/j.michal/grady, inifile:
plugins: django-3.4.7, cov-2.6.1
collected 27 items
functional_tests/test_auto_logout.py . [ 3%]
functional_tests/test_export_modal.py ....... [ 29%]
functional_tests/test_feedback_creation.py .....F... [ 62%]
functional_tests/test_front_pages.py ...... [ 85%]
functional_tests/test_login_page.py .... [100%]
=================================== FAILURES ===================================
______ TestFeedbackCreationTutor.test_student_text_is_correctly_displayed ______
self = <functional_tests.test_feedback_creation.TestFeedbackCreationTutor testMethod=test_student_text_is_correctly_displayed>
def test_student_text_is_correctly_displayed(self):
self._login()
> self._go_to_subscription()
functional_tests/test_feedback_creation.py:90:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
functional_tests/test_feedback_creation.py:58: in _go_to_subscription
WebDriverWait(self.browser, 3).until(subscriptions_loaded_cond(tasks))
.venv/lib/python3.6/site-packages/selenium/webdriver/support/wait.py:71: in until
value = method(self._driver)
functional_tests/util.py:55: in loaded
sub_links = tasks_el.find_elements_by_tag_name('a')
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:320: in find_elements_by_tag_name
return self.find_elements(by=By.TAG_NAME, value=name)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:685: in find_elements
{"using": by, "value": value})['value']
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py:633: in _execute
return self._parent.execute(command, params)
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7fc1e8fe0860>
response = {'status': 404, 'value': '{"value":{"error":"stale element reference","message":"The element reference of <div class=\...req<@chrome://marionette/content/listener.js:485:20\\ndispatch/<@chrome://marionette/content/listener.js:484:15\\n"}}'}
def check_response(self, response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message, basestring):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value, basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response, value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame, 'lineNumber', '')
file = self._value_or_default(frame, 'fileName', '<anonymous>')
if line:
file = "%s:%s" % (file, line)
meth = self._value_or_default(frame, 'methodName', '<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response, message)
elif exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text)
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <div class="v-card v-sheet theme--light elevation-2" name="subscription-list"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
.venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: StaleElementReferenceException
----------------------------- Captured stderr call -----------------------------
[2019-02-21 13:13:02,681] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
[2019-02-21 13:13:03,028] [DEBUG] core.signals SIGNAL -- create_meta_after_submission_create
------------------------------ Captured log call -------------------------------
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
signals.py 15 DEBUG SIGNAL -- create_meta_after_submission_create
=============================== warnings summary ===============================
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
source:43: DeprecationWarning: invalid escape sequence \
source:175: DeprecationWarning: invalid escape sequence \_
source:191: DeprecationWarning: invalid escape sequence \_
source:359: DeprecationWarning: invalid escape sequence \_
source:375: DeprecationWarning: invalid escape sequence \_
source:626: DeprecationWarning: invalid escape sequence \*
source:650: DeprecationWarning: invalid escape sequence \*
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
/builds/j.michal/grady/.venv/lib/python3.6/site-packages/rest_framework_jwt/utils.py:39: DeprecationWarning: The following fields will be removed in the future: `email` and `user_id`.
DeprecationWarning
-- Docs: https://docs.pytest.org/en/latest/warnings.html
============== 1 failed, 26 passed, 36 warnings in 256.66 seconds ==============
section_end:1550754898:build_script
[0Ksection_start:1550754898:after_script
[0Ksection_end:1550754900:after_script
[0Ksection_start:1550754900:upload_artifacts_on_failure
[0Ksection_end:1550754901:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m