зеркало из https://github.com/mozilla/treeherder.git
Bug 1453482 - Use d-r-f's APIClient instead of WebTest's TestApp (#3439)
To avoid unnecessary dependencies, and use a more conventional django-rest-framework testing approach: http://www.django-rest-framework.org/api-guide/testing/#apiclient APIClient has a few API differences: * `.json` -> `.json()` * `.status_int` -> `.status_code` * Get parameters are passed as keyword argument `data` not `params` * The default hostname is `http://testserver` not `http://localhost` * Additional HTTP headers are passed directly as keyword arguments, rather than nested under a `headers` property. * It doesn't check the status code itself, so explicit checks are required, along with removing `expect_errors`. * The `.post_json()` and `.put_json()` methods don't exist. See also the docs for the Django test client (which APIClient wraps): https://docs.djangoproject.com/en/1.11/topics/testing/tools/#the-test-client Whilst making these changes, I also cleaned up the session fetching in `test_auth.py` and `test_backends.py`, and added a `status_code` check in `conftest.py`'s `mock_post_json()` - which makes the root cause of test failures clearer.
This commit is contained in:
Родитель
cc19508c83
Коммит
a5023192e9
|
@ -8,10 +8,6 @@ django-debug-toolbar==1.9.1 \
|
|||
--hash=sha256:4af2a4e1e932dadbda197b18585962d4fc20172b4e5a479490bc659fe998864d \
|
||||
--hash=sha256:d9ea75659f76d8f1e3eb8f390b47fc5bad0908d949c34a8a3c4c87978eb40a0f
|
||||
|
||||
WebTest==2.0.29 \
|
||||
--hash=sha256:9136514159a2e76a21751bf4ab5d3371e539c8ada8b950fcf68e307d9e584a07 \
|
||||
--hash=sha256:dbbccc15ac2465066c95dc3a7de0d30cde3791e886ccbd7e91d5d2a2580c922d
|
||||
|
||||
mock==2.0.0 --hash=sha256:5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1
|
||||
|
||||
responses==0.9.0 \
|
||||
|
@ -56,18 +52,6 @@ py==1.5.3 \
|
|||
--hash=sha256:983f77f3331356039fdd792e9220b7b8ee1aa6bd2b25f567a963ff1de5a64f6a \
|
||||
--hash=sha256:29c9fab495d7528e80ba1e343b958684f4ace687327e6f789a94bf3d1915f881
|
||||
|
||||
# Required by WebTest
|
||||
beautifulsoup4==4.6.0 \
|
||||
--hash=sha256:7015e76bf32f1f574636c4288399a6de66ce08fb7b2457f628a8d70c0fbabb11 \
|
||||
--hash=sha256:11a9a27b7d3bddc6d86f59fb76afb70e921a25ac2d6cc55b40d072bd68435a76 \
|
||||
--hash=sha256:808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89
|
||||
waitress==1.1.0 \
|
||||
--hash=sha256:40b0f297a7f3af61fbfbdc67e59090c70dc150a1601c39ecc9f5f1d283fb931b \
|
||||
--hash=sha256:d33cd3d62426c0f1b3cd84ee3d65779c7003aae3fc060dee60524d10a57f05a9
|
||||
WebOb==1.8.1 \
|
||||
--hash=sha256:1771899117c8851153f6f91e8b8a86236972aa8a1b6bd69ad0a36a9879ea2cd7 \
|
||||
--hash=sha256:54f35073d2fdcddd7a98c2a1dedeede49739150737164a787220f30283139ba6
|
||||
|
||||
# Required by mock
|
||||
funcsigs==1.0.2 --hash=sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca
|
||||
pbr==4.0.2 \
|
||||
|
|
|
@ -44,7 +44,7 @@ def test_get_username_from_userinfo(user_info, exp_username, exp_exception):
|
|||
'foo@bar.net',
|
||||
False),
|
||||
])
|
||||
def test_existing_email_create_user(test_user, webapp, monkeypatch, exp_username, email, exp_create_user):
|
||||
def test_existing_email_create_user(test_user, client, monkeypatch, exp_username, email, exp_create_user):
|
||||
"""
|
||||
Test whether a user was created or not, despite an existing user with
|
||||
a matching email.
|
||||
|
@ -63,12 +63,18 @@ def test_existing_email_create_user(test_user, webapp, monkeypatch, exp_username
|
|||
|
||||
existing_user = User.objects.create(username="email/foo@bar.net", email=email)
|
||||
|
||||
webapp.get(reverse("auth-login"), headers={"Authorization": "Bearer meh", "idToken": "meh", "expiresAt": str(expires_at)})
|
||||
resp = client.get(
|
||||
reverse("auth-login"),
|
||||
HTTP_AUTHORIZATION="Bearer meh",
|
||||
HTTP_IDTOKEN="meh",
|
||||
HTTP_EXPIRESAT=str(expires_at)
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
session_key = webapp.cookies["sessionid"]
|
||||
session_data = SessionStore(session_key=session_key)
|
||||
session = client.session
|
||||
assert not session.is_empty()
|
||||
|
||||
new_user = User.objects.get(id=session_data.get('_auth_user_id'))
|
||||
new_user = User.objects.get(id=session['_auth_user_id'])
|
||||
|
||||
assert new_user.username == exp_username
|
||||
if exp_create_user:
|
||||
|
|
|
@ -10,10 +10,9 @@ from _pytest.monkeypatch import MonkeyPatch
|
|||
from django.conf import settings
|
||||
from requests import Request
|
||||
from requests_hawk import HawkAuth
|
||||
from webtest.app import TestApp
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.client.thclient import TreeherderClient
|
||||
from treeherder.config.wsgi import application
|
||||
from treeherder.etl.jobs import store_job_data
|
||||
from treeherder.etl.push import store_push_data
|
||||
from treeherder.model.models import (Commit,
|
||||
|
@ -295,25 +294,24 @@ def test_job_with_notes(test_job, test_user):
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_post_json(monkeypatch, client_credentials):
|
||||
def mock_post_json(monkeypatch, client_credentials, client):
|
||||
def _post_json(th_client, project, endpoint, data):
|
||||
auth = th_client.session.auth
|
||||
if not auth:
|
||||
auth = HawkAuth(id=client_credentials.client_id,
|
||||
key=str(client_credentials.secret))
|
||||
app = TestApp(application)
|
||||
url = th_client._get_endpoint_url(endpoint, project=project)
|
||||
req = Request('POST', url, json=data, auth=auth)
|
||||
prepped_request = req.prepare()
|
||||
|
||||
return getattr(app, 'post')(
|
||||
response = client.post(
|
||||
prepped_request.url,
|
||||
params=json.dumps(data),
|
||||
data=json.dumps(data),
|
||||
content_type='application/json',
|
||||
extra_environ={
|
||||
'HTTP_AUTHORIZATION': str(prepped_request.headers['Authorization'])
|
||||
}
|
||||
HTTP_AUTHORIZATION=str(prepped_request.headers['Authorization'])
|
||||
)
|
||||
# Replacement for the `raise_for_status()` in the original `_post_json()`
|
||||
assert response.status_code == 200
|
||||
return response
|
||||
|
||||
monkeypatch.setattr(TreeherderClient, '_post_json', _post_json)
|
||||
|
||||
|
@ -582,11 +580,12 @@ def bugs(mock_bugzilla_api_request):
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
def webapp():
|
||||
def client():
|
||||
"""
|
||||
we can use this object to test calls to a wsgi application
|
||||
A django-rest-framework APIClient instance:
|
||||
http://www.django-rest-framework.org/api-guide/testing/#apiclient
|
||||
"""
|
||||
return TestApp(application)
|
||||
return APIClient()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
|
|
@ -1,87 +1,84 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from webtest import TestApp as _TestApp
|
||||
|
||||
from treeherder.config.wsgi import application
|
||||
|
||||
|
||||
def test_pending_job_available(test_repository, pending_jobs_stored):
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
def test_pending_job_available(test_repository, pending_jobs_stored, client):
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
|
||||
assert jobs['results'][0]['state'] == 'pending'
|
||||
|
||||
|
||||
def test_running_job_available(test_repository, running_jobs_stored):
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
def test_running_job_available(test_repository, running_jobs_stored, client):
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
|
||||
assert jobs['results'][0]['state'] == 'running'
|
||||
|
||||
|
||||
def test_completed_job_available(test_repository, completed_jobs_stored):
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
def test_completed_job_available(test_repository, completed_jobs_stored, client):
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
assert jobs['results'][0]['state'] == 'completed'
|
||||
|
||||
|
||||
def test_pending_stored_to_running_loaded(test_repository, pending_jobs_stored,
|
||||
running_jobs_stored):
|
||||
running_jobs_stored, client):
|
||||
"""
|
||||
tests a job transition from pending to running
|
||||
given a loaded pending job, if I store and load the same job with status running,
|
||||
the latter is shown in the jobs endpoint
|
||||
"""
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
assert jobs['results'][0]['state'] == 'running'
|
||||
|
||||
|
||||
def test_finished_job_to_running(test_repository, completed_jobs_stored,
|
||||
running_jobs_stored):
|
||||
running_jobs_stored, client):
|
||||
"""
|
||||
tests that a job finished cannot change state
|
||||
"""
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
assert jobs['results'][0]['state'] == 'completed'
|
||||
|
||||
|
||||
def test_running_job_to_pending(test_repository, running_jobs_stored,
|
||||
pending_jobs_stored):
|
||||
pending_jobs_stored, client):
|
||||
"""
|
||||
tests that a job transition from pending to running
|
||||
cannot happen
|
||||
"""
|
||||
webapp = _TestApp(application)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
jobs = resp.json
|
||||
assert resp.status_code == 200
|
||||
jobs = resp.json()
|
||||
|
||||
assert len(jobs['results']) == 1
|
||||
assert jobs['results'][0]['state'] == 'running'
|
||||
|
|
|
@ -11,8 +11,8 @@ from treeherder.model import models
|
|||
|
||||
|
||||
def post_collection(project, th_collection):
|
||||
|
||||
client = TreeherderClient(server_url='http://localhost')
|
||||
# http://testserver is the Django test client's default host name.
|
||||
client = TreeherderClient(server_url='http://testserver')
|
||||
return client.post_collection(project, th_collection)
|
||||
|
||||
|
||||
|
|
|
@ -109,38 +109,42 @@ def test_post_no_auth():
|
|||
|
||||
# Auth Login and Logout Tests
|
||||
|
||||
def test_auth_login_and_logout(test_ldap_user, webapp, monkeypatch):
|
||||
def test_auth_login_and_logout(test_ldap_user, client, monkeypatch):
|
||||
"""LDAP login user exists, has scope: find by email"""
|
||||
def userinfo_mock(selfless, request):
|
||||
return {'sub': 'Mozilla-LDAP', 'email': test_ldap_user.email, 'exp': '500'}
|
||||
|
||||
monkeypatch.setattr(AuthBackend, '_get_user_info', userinfo_mock)
|
||||
|
||||
assert "sessionid" not in webapp.cookies
|
||||
assert "sessionid" not in client.cookies
|
||||
|
||||
client_id = "mozilla-ldap/user@foo.com"
|
||||
|
||||
one_hour = 1000 * 60 * 60
|
||||
expires_at = int(round(time.time() * 1000)) + one_hour
|
||||
|
||||
webapp.get(reverse('auth-login'),
|
||||
headers={"authorization": "Bearer meh", "idToken": "meh", "expiresAt": str(expires_at)},
|
||||
status=200)
|
||||
resp = client.get(
|
||||
reverse("auth-login"),
|
||||
HTTP_AUTHORIZATION="Bearer meh",
|
||||
HTTP_IDTOKEN="meh",
|
||||
HTTP_EXPIRESAT=str(expires_at)
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
session_key = webapp.cookies["sessionid"]
|
||||
session_data = SessionStore(session_key=session_key)
|
||||
user = User.objects.get(id=session_data.get('_auth_user_id'))
|
||||
session = client.session
|
||||
assert not session.is_empty()
|
||||
|
||||
user = User.objects.get(id=session['_auth_user_id'])
|
||||
assert user.id == test_ldap_user.id
|
||||
assert user.username == client_id
|
||||
|
||||
webapp.get(reverse("auth-logout"), status=200)
|
||||
|
||||
assert "sessionid" not in webapp.cookies
|
||||
resp = client.get(reverse("auth-logout"))
|
||||
assert resp.status_code == 200
|
||||
assert client.session.is_empty()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_login_email_user_doesnt_exist(test_user, webapp, monkeypatch):
|
||||
def test_login_email_user_doesnt_exist(test_user, client, monkeypatch):
|
||||
"""email login, user doesn't exist, create it"""
|
||||
def userinfo_mock(selfless, request):
|
||||
return {'sub': 'email', 'email': test_user.email, 'exp': '500'}
|
||||
|
@ -150,14 +154,18 @@ def test_login_email_user_doesnt_exist(test_user, webapp, monkeypatch):
|
|||
one_hour = 1000 * 60 * 60
|
||||
expires_at = int(round(time.time() * 1000)) + one_hour
|
||||
|
||||
resp = webapp.get(reverse("auth-login"),
|
||||
headers={"authorization": "Bearer meh", "idToken": "meh", "expiresAt": str(expires_at)})
|
||||
|
||||
assert resp.json["username"] == "email/user@foo.com"
|
||||
resp = client.get(
|
||||
reverse("auth-login"),
|
||||
HTTP_AUTHORIZATION="Bearer meh",
|
||||
HTTP_IDTOKEN="meh",
|
||||
HTTP_EXPIRESAT=str(expires_at)
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["username"] == "email/user@foo.com"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_login_no_email(test_user, webapp, monkeypatch):
|
||||
def test_login_no_email(test_user, client, monkeypatch):
|
||||
"""
|
||||
When we move to clientId for display in the UI, we may decide users can
|
||||
login without an email. But for now, it's required.
|
||||
|
@ -180,15 +188,18 @@ def test_login_no_email(test_user, webapp, monkeypatch):
|
|||
one_hour = 1000 * 60 * 60
|
||||
expires_at = int(round(time.time() * 1000)) + one_hour
|
||||
|
||||
resp = webapp.get(reverse("auth-login"),
|
||||
headers={"authorization": "Bearer meh", "idToken": "meh", "expiresAt": str(expires_at)},
|
||||
status=403)
|
||||
|
||||
assert resp.json["detail"] == "Unrecognized identity"
|
||||
resp = client.get(
|
||||
reverse("auth-login"),
|
||||
HTTP_AUTHORIZATION="Bearer meh",
|
||||
HTTP_IDTOKEN="meh",
|
||||
HTTP_EXPIRESAT=str(expires_at)
|
||||
)
|
||||
assert resp.status_code == 403
|
||||
assert resp.json()["detail"] == "Unrecognized identity"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_login_not_active(test_ldap_user, webapp, monkeypatch):
|
||||
def test_login_not_active(test_ldap_user, client, monkeypatch):
|
||||
"""LDAP login, user not active"""
|
||||
def userinfo_mock(selfless, request):
|
||||
return {'sub': 'Mozilla-LDAP', 'email': test_ldap_user.email, 'exp': '500'}
|
||||
|
@ -201,14 +212,17 @@ def test_login_not_active(test_ldap_user, webapp, monkeypatch):
|
|||
test_ldap_user.is_active = False
|
||||
test_ldap_user.save()
|
||||
|
||||
resp = webapp.get(reverse("auth-login"),
|
||||
headers={"authorization": "Bearer meh", "idToken": "meh", "expiresAt": str(expires_at)},
|
||||
status=403)
|
||||
|
||||
assert resp.json["detail"] == "This user has been disabled."
|
||||
resp = client.get(
|
||||
reverse("auth-login"),
|
||||
HTTP_AUTHORIZATION="Bearer meh",
|
||||
HTTP_IDTOKEN="meh",
|
||||
HTTP_EXPIRESAT=str(expires_at)
|
||||
)
|
||||
assert resp.status_code == 403
|
||||
assert resp.json()["detail"] == "This user has been disabled."
|
||||
|
||||
|
||||
def test_login_invalid(webapp, monkeypatch):
|
||||
resp = webapp.get(reverse("auth-login"), status=403)
|
||||
|
||||
assert resp.json["detail"] == "Authorization header is expected"
|
||||
def test_login_invalid(client):
|
||||
resp = client.get(reverse("auth-login"))
|
||||
assert resp.status_code == 403
|
||||
assert resp.json()["detail"] == "Authorization header is expected"
|
||||
|
|
|
@ -2,7 +2,6 @@ import json
|
|||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import (BugJobMap,
|
||||
Job)
|
||||
|
@ -12,13 +11,12 @@ from treeherder.model.models import (BugJobMap,
|
|||
(True, False),
|
||||
(False, False),
|
||||
(False, True)])
|
||||
def test_create_bug_job_map(test_job, mock_message_broker,
|
||||
def test_create_bug_job_map(client, test_job, mock_message_broker,
|
||||
test_user, test_no_auth, test_duplicate_handling, bugs):
|
||||
"""
|
||||
test creating a single note via endpoint
|
||||
"""
|
||||
bug = bugs[0]
|
||||
client = APIClient()
|
||||
if not test_no_auth:
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
|
@ -37,7 +35,8 @@ def test_create_bug_job_map(test_job, mock_message_broker,
|
|||
for _ in range(num_times):
|
||||
resp = client.post(
|
||||
reverse("bug-job-map-list", kwargs={"project": test_job.repository.name}),
|
||||
submit_obj, expect_errors=test_no_auth)
|
||||
data=submit_obj
|
||||
)
|
||||
|
||||
if test_no_auth:
|
||||
assert resp.status_code == 403
|
||||
|
@ -51,7 +50,7 @@ def test_create_bug_job_map(test_job, mock_message_broker,
|
|||
assert bug_job_map.user == test_user
|
||||
|
||||
|
||||
def test_bug_job_map_list(webapp, test_repository, eleven_jobs_stored, test_user, bugs):
|
||||
def test_bug_job_map_list(client, test_repository, eleven_jobs_stored, test_user, bugs):
|
||||
"""
|
||||
test retrieving a list of bug_job_map
|
||||
"""
|
||||
|
@ -71,16 +70,17 @@ def test_bug_job_map_list(webapp, test_repository, eleven_jobs_stored, test_user
|
|||
|
||||
# verify that API works with different combinations of job_id= parameters
|
||||
for job_range in [(0, 1), (0, 2), (0, 9)]:
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("bug-job-map-list", kwargs={"project": test_repository.name}),
|
||||
params={'job_id': [job.id for job in
|
||||
jobs[job_range[0]:job_range[1]]]})
|
||||
data={'job_id': [job.id for job in
|
||||
jobs[job_range[0]:job_range[1]]]})
|
||||
assert resp.status_code == 200
|
||||
|
||||
# The order of the bug-job-map list is not guaranteed.
|
||||
assert sorted(resp.json) == sorted(expected[job_range[0]:job_range[1]])
|
||||
assert sorted(resp.json()) == sorted(expected[job_range[0]:job_range[1]])
|
||||
|
||||
|
||||
def test_bug_job_map_detail(webapp, eleven_jobs_stored, test_repository,
|
||||
def test_bug_job_map_detail(client, eleven_jobs_stored, test_repository,
|
||||
test_user, bugs):
|
||||
"""
|
||||
test retrieving a list of bug_job_map
|
||||
|
@ -95,12 +95,13 @@ def test_bug_job_map_detail(webapp, eleven_jobs_stored, test_repository,
|
|||
|
||||
pk = "{0}-{1}".format(job.id, bug.id)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("bug-job-map-detail", kwargs={
|
||||
"project": test_repository.name,
|
||||
"pk": pk
|
||||
})
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
expected = {
|
||||
"job_id": job.id,
|
||||
|
@ -108,12 +109,11 @@ def test_bug_job_map_detail(webapp, eleven_jobs_stored, test_repository,
|
|||
"created": bjm.created.isoformat(),
|
||||
"who": test_user.email
|
||||
}
|
||||
|
||||
assert resp.json == expected
|
||||
assert resp.json() == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize('test_no_auth', [True, False])
|
||||
def test_bug_job_map_delete(webapp, eleven_jobs_stored, test_repository,
|
||||
def test_bug_job_map_delete(client, eleven_jobs_stored, test_repository,
|
||||
test_user, test_no_auth, bugs):
|
||||
"""
|
||||
test deleting a bug_job_map object
|
||||
|
@ -125,7 +125,6 @@ def test_bug_job_map_delete(webapp, eleven_jobs_stored, test_repository,
|
|||
bug_id=bug.id,
|
||||
user=test_user)
|
||||
|
||||
client = APIClient()
|
||||
if not test_no_auth:
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
|
@ -147,15 +146,16 @@ def test_bug_job_map_delete(webapp, eleven_jobs_stored, test_repository,
|
|||
assert BugJobMap.objects.count() == 0
|
||||
|
||||
|
||||
def test_bug_job_map_bad_job_id(webapp, test_repository):
|
||||
def test_bug_job_map_bad_job_id(client, test_repository):
|
||||
"""
|
||||
test we have graceful error when we pass an invalid job_id
|
||||
"""
|
||||
bad_job_id = "aaaa"
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("bug-job-map-list", kwargs={"project": test_repository.name}),
|
||||
params={'job_id': bad_job_id}, expect_errors=True)
|
||||
data={'job_id': bad_job_id}
|
||||
)
|
||||
|
||||
assert resp.status_code == 400
|
||||
assert resp.json == {'message': 'Valid job_id required'}
|
||||
assert resp.json() == {'message': 'Valid job_id required'}
|
||||
|
|
|
@ -6,10 +6,9 @@ import json
|
|||
|
||||
import responses
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
|
||||
def test_create_bug(webapp, eleven_jobs_stored, activate_responses, test_user):
|
||||
def test_create_bug(client, eleven_jobs_stored, activate_responses, test_user):
|
||||
"""
|
||||
test successfully creating a bug in bugzilla
|
||||
"""
|
||||
|
@ -18,8 +17,6 @@ def test_create_bug(webapp, eleven_jobs_stored, activate_responses, test_user):
|
|||
headers = {}
|
||||
requestdata = json.loads(request.body)
|
||||
requestheaders = request.headers
|
||||
print(requestdata)
|
||||
print(requestheaders)
|
||||
assert requestheaders['x-bugzilla-api-key'] == "12345helloworld"
|
||||
assert requestdata['product'] == "Bugzilla"
|
||||
assert requestdata['description'] == u"Filed by: {}\n\nIntermittent Description".format(test_user.email.replace('@', " [at] "))
|
||||
|
@ -37,7 +34,6 @@ def test_create_bug(webapp, eleven_jobs_stored, activate_responses, test_user):
|
|||
content_type="application/json",
|
||||
)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
resp = client.post(
|
||||
|
@ -52,13 +48,11 @@ def test_create_bug(webapp, eleven_jobs_stored, activate_responses, test_user):
|
|||
"keywords": ["intermittent-failure"],
|
||||
}
|
||||
)
|
||||
|
||||
content = json.loads(resp.content)
|
||||
|
||||
assert content['success'] == 323
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['success'] == 323
|
||||
|
||||
|
||||
def test_create_bug_with_unicode(webapp, eleven_jobs_stored, activate_responses, test_user):
|
||||
def test_create_bug_with_unicode(client, eleven_jobs_stored, activate_responses, test_user):
|
||||
"""
|
||||
test successfully creating a bug in bugzilla
|
||||
"""
|
||||
|
@ -67,8 +61,6 @@ def test_create_bug_with_unicode(webapp, eleven_jobs_stored, activate_responses,
|
|||
headers = {}
|
||||
requestdata = json.loads(request.body)
|
||||
requestheaders = request.headers
|
||||
print(requestdata)
|
||||
print(requestheaders)
|
||||
assert requestheaders['x-bugzilla-api-key'] == "12345helloworld"
|
||||
assert requestdata['product'] == "Bugzilla"
|
||||
assert requestdata['description'] == u"Filed by: {}\n\nIntermittent “description” string".format(test_user.email.replace('@', " [at] "))
|
||||
|
@ -86,7 +78,6 @@ def test_create_bug_with_unicode(webapp, eleven_jobs_stored, activate_responses,
|
|||
content_type="application/json",
|
||||
)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
resp = client.post(
|
||||
|
@ -101,13 +92,11 @@ def test_create_bug_with_unicode(webapp, eleven_jobs_stored, activate_responses,
|
|||
"keywords": ["intermittent-failure"],
|
||||
}
|
||||
)
|
||||
|
||||
content = json.loads(resp.content)
|
||||
|
||||
assert content['success'] == 323
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['success'] == 323
|
||||
|
||||
|
||||
def test_create_crash_bug(webapp, eleven_jobs_stored, activate_responses, test_user):
|
||||
def test_create_crash_bug(client, eleven_jobs_stored, activate_responses, test_user):
|
||||
"""
|
||||
test successfully creating a bug with a crash signature in bugzilla
|
||||
"""
|
||||
|
@ -136,7 +125,6 @@ def test_create_crash_bug(webapp, eleven_jobs_stored, activate_responses, test_u
|
|||
content_type="application/json",
|
||||
)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
resp = client.post(
|
||||
|
@ -154,14 +142,11 @@ def test_create_crash_bug(webapp, eleven_jobs_stored, activate_responses, test_u
|
|||
"keywords": ["intermittent-failure", "crash"],
|
||||
}
|
||||
)
|
||||
|
||||
content = json.loads(resp.content)
|
||||
|
||||
print(content)
|
||||
assert content['success'] == 323
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['success'] == 323
|
||||
|
||||
|
||||
def test_create_unauthenticated_bug(webapp, eleven_jobs_stored, activate_responses):
|
||||
def test_create_unauthenticated_bug(client, eleven_jobs_stored, activate_responses):
|
||||
"""
|
||||
test successfully creating a bug in bugzilla
|
||||
"""
|
||||
|
@ -170,8 +155,6 @@ def test_create_unauthenticated_bug(webapp, eleven_jobs_stored, activate_respons
|
|||
headers = {}
|
||||
requestdata = json.loads(request.body)
|
||||
requestheaders = request.headers
|
||||
print(requestdata)
|
||||
print(requestheaders)
|
||||
assert requestheaders['x-bugzilla-api-key'] == "12345helloworld"
|
||||
assert requestdata['product'] == "Bugzilla"
|
||||
assert requestdata['description'] == u"Filed by: MyName\n\nIntermittent Description"
|
||||
|
@ -192,8 +175,6 @@ def test_create_unauthenticated_bug(webapp, eleven_jobs_stored, activate_respons
|
|||
content_type="application/json",
|
||||
)
|
||||
|
||||
client = APIClient()
|
||||
|
||||
resp = client.post(
|
||||
reverse("bugzilla-create-bug"),
|
||||
{
|
||||
|
@ -209,14 +190,11 @@ def test_create_unauthenticated_bug(webapp, eleven_jobs_stored, activate_respons
|
|||
"see_also": "12345",
|
||||
}
|
||||
)
|
||||
|
||||
content = json.loads(resp.content)
|
||||
|
||||
print(content)
|
||||
assert content['detail'] == "Authentication credentials were not provided."
|
||||
assert resp.status_code == 403
|
||||
assert resp.json()['detail'] == "Authentication credentials were not provided."
|
||||
|
||||
|
||||
def test_create_bug_with_long_crash_signature(webapp, eleven_jobs_stored, activate_responses, test_user):
|
||||
def test_create_bug_with_long_crash_signature(client, eleven_jobs_stored, activate_responses, test_user):
|
||||
"""
|
||||
test successfully creating a bug in bugzilla
|
||||
"""
|
||||
|
@ -225,8 +203,6 @@ def test_create_bug_with_long_crash_signature(webapp, eleven_jobs_stored, activa
|
|||
headers = {}
|
||||
requestdata = json.loads(request.body)
|
||||
requestheaders = request.headers
|
||||
print(requestdata)
|
||||
print(requestheaders)
|
||||
assert requestheaders['x-bugzilla-api-key'] == "12345helloworld"
|
||||
assert requestdata['product'] == "Bugzilla"
|
||||
assert requestdata['description'] == u"Filed by: MyName\n\nIntermittent Description"
|
||||
|
@ -248,7 +224,6 @@ def test_create_bug_with_long_crash_signature(webapp, eleven_jobs_stored, activa
|
|||
content_type="application/json",
|
||||
)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
crashsig = 'x' * 2050
|
||||
|
@ -268,8 +243,5 @@ def test_create_bug_with_long_crash_signature(webapp, eleven_jobs_stored, activa
|
|||
"see_also": "12345",
|
||||
}
|
||||
)
|
||||
|
||||
content = json.loads(resp.content)
|
||||
|
||||
print(content)
|
||||
assert content['failure'] == "Crash signature can't be more than 2048 characters."
|
||||
assert resp.status_code == 400
|
||||
assert resp.json()['failure'] == "Crash signature can't be more than 2048 characters."
|
||||
|
|
|
@ -1,23 +1,22 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from tests.autoclassify.utils import (create_failure_lines,
|
||||
test_line)
|
||||
from treeherder.model.models import ClassifiedFailure
|
||||
|
||||
|
||||
def test_get_classified_failure(webapp, classified_failures):
|
||||
def test_get_classified_failure(client, classified_failures):
|
||||
"""
|
||||
test getting a single failure line
|
||||
"""
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("classified-failure-detail", kwargs={"pk": classified_failures[0].id}))
|
||||
|
||||
assert resp.status_int == 200
|
||||
actual = resp.json
|
||||
assert resp.status_code == 200
|
||||
actual = resp.json()
|
||||
expected = {"id": classified_failures[0].id,
|
||||
"bug_number": 1234,
|
||||
"bug": None}
|
||||
|
@ -25,14 +24,14 @@ def test_get_classified_failure(webapp, classified_failures):
|
|||
assert actual == expected
|
||||
|
||||
|
||||
def test_get_classified_failures(webapp, classified_failures):
|
||||
def test_get_classified_failures(client, classified_failures):
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = webapp.get(reverse("classified-failure-list"))
|
||||
assert resp.status_int == 200
|
||||
resp = client.get(reverse("classified-failure-list"))
|
||||
assert resp.status_code == 200
|
||||
|
||||
actual = resp.json
|
||||
actual = resp.json()
|
||||
expected = {"next": None,
|
||||
"previous": None,
|
||||
"results": [{"id": cf.id,
|
||||
|
@ -41,14 +40,14 @@ def test_get_classified_failures(webapp, classified_failures):
|
|||
assert actual == expected
|
||||
|
||||
|
||||
def test_get_classified_failures_bug(webapp, classified_failures):
|
||||
def test_get_classified_failures_bug(client, classified_failures):
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = webapp.get(reverse("classified-failure-list") + "?bug_number=1234")
|
||||
assert resp.status_int == 200
|
||||
resp = client.get(reverse("classified-failure-list") + "?bug_number=1234")
|
||||
assert resp.status_code == 200
|
||||
|
||||
actual = resp.json
|
||||
actual = resp.json()
|
||||
expected = {"next": None,
|
||||
"previous": None,
|
||||
"results": [{"id": classified_failures[0].id,
|
||||
|
@ -57,15 +56,14 @@ def test_get_classified_failures_bug(webapp, classified_failures):
|
|||
assert actual == expected
|
||||
|
||||
|
||||
def test_post_new_classified_failure(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_post_new_classified_failure(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = client.post(reverse("classified-failure-list"),
|
||||
{"bug_number": 5678}, format="json")
|
||||
{"bug_number": 5678})
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -79,15 +77,14 @@ def test_post_new_classified_failure(webapp, classified_failures, test_user):
|
|||
assert obj.bug_number == 5678
|
||||
|
||||
|
||||
def test_post_multiple(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_post_multiple(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = client.post(reverse("classified-failure-list"),
|
||||
[{"bug_number": 5678}, {"bug_number": 9012}], format="json")
|
||||
[{"bug_number": 5678}, {"bug_number": 9012}])
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -105,15 +102,14 @@ def test_post_multiple(webapp, classified_failures, test_user):
|
|||
assert obj.bug_number == [5678, 9012][idx]
|
||||
|
||||
|
||||
def test_post_repeated_classified_failure(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_post_repeated_classified_failure(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = client.post(reverse("classified-failure-list"),
|
||||
{"bug_number": 1234}, format="json")
|
||||
{"bug_number": 1234})
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -124,8 +120,7 @@ def test_post_repeated_classified_failure(webapp, classified_failures, test_user
|
|||
assert actual == expected
|
||||
|
||||
|
||||
def test_put_new_bug_number(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_new_bug_number(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -133,7 +128,7 @@ def test_put_new_bug_number(webapp, classified_failures, test_user):
|
|||
|
||||
resp = client.put(reverse("classified-failure-detail",
|
||||
kwargs={"pk": classified_failures[0].id}),
|
||||
{"bug_number": 5678}, format="json")
|
||||
{"bug_number": 5678})
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -147,8 +142,7 @@ def test_put_new_bug_number(webapp, classified_failures, test_user):
|
|||
assert classified_failures[0].bug_number == 5678
|
||||
|
||||
|
||||
def test_put_existing_bug_number(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_existing_bug_number(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -156,7 +150,7 @@ def test_put_existing_bug_number(webapp, classified_failures, test_user):
|
|||
|
||||
resp = client.put(reverse("classified-failure-detail",
|
||||
kwargs={"pk": classified_failures[0].id}),
|
||||
{"bug_number": 1234}, format="json")
|
||||
{"bug_number": 1234})
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -170,9 +164,8 @@ def test_put_existing_bug_number(webapp, classified_failures, test_user):
|
|||
assert classified_failures[0].bug_number == 1234
|
||||
|
||||
|
||||
def test_put_duplicate_bug_number(webapp, classified_failures, failure_lines,
|
||||
def test_put_duplicate_bug_number(client, classified_failures, failure_lines,
|
||||
test_user):
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -182,7 +175,7 @@ def test_put_duplicate_bug_number(webapp, classified_failures, failure_lines,
|
|||
|
||||
resp = client.put(reverse("classified-failure-detail",
|
||||
kwargs={"pk": classified_failures[1].id}),
|
||||
{"bug_number": 1234}, format="json")
|
||||
{"bug_number": 1234})
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -196,7 +189,7 @@ def test_put_duplicate_bug_number(webapp, classified_failures, failure_lines,
|
|||
assert len(classified_failures) == old_len - 1
|
||||
|
||||
|
||||
def test_get_with_bug(webapp, classified_failures, bugs):
|
||||
def test_get_with_bug(client, classified_failures, bugs):
|
||||
"""
|
||||
test getting a single failure line
|
||||
"""
|
||||
|
@ -204,11 +197,11 @@ def test_get_with_bug(webapp, classified_failures, bugs):
|
|||
classified_failures[0].bug_number = bug.id
|
||||
classified_failures[0].save()
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("classified-failure-detail", kwargs={"pk": classified_failures[0].id}))
|
||||
|
||||
assert resp.status_int == 200
|
||||
actual = resp.json
|
||||
assert resp.status_code == 200
|
||||
actual = resp.json()
|
||||
expected = {"id": classified_failures[0].id,
|
||||
"bug_number": bug.id,
|
||||
"bug": {"status": bug.status,
|
||||
|
@ -225,8 +218,7 @@ def test_get_with_bug(webapp, classified_failures, bugs):
|
|||
assert actual == expected
|
||||
|
||||
|
||||
def test_put_multiple(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_multiple(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -235,7 +227,7 @@ def test_put_multiple(webapp, classified_failures, test_user):
|
|||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 5678},
|
||||
{"id": classified_failures[1].id, "bug_number": 9012}],
|
||||
format="json")
|
||||
)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -254,8 +246,7 @@ def test_put_multiple(webapp, classified_failures, test_user):
|
|||
assert classified_failures[1].bug_number == 9012
|
||||
|
||||
|
||||
def test_put_multiple_repeat(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_multiple_repeat(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -264,7 +255,7 @@ def test_put_multiple_repeat(webapp, classified_failures, test_user):
|
|||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234},
|
||||
{"id": classified_failures[1].id, "bug_number": 5678}],
|
||||
format="json")
|
||||
)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -284,8 +275,7 @@ def test_put_multiple_repeat(webapp, classified_failures, test_user):
|
|||
assert classified_failures[1].bug_number == 5678
|
||||
|
||||
|
||||
def test_put_multiple_duplicate(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_multiple_duplicate(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
new = ClassifiedFailure(bug_number=1234)
|
||||
|
@ -295,7 +285,8 @@ def test_put_multiple_duplicate(webapp, classified_failures, test_user):
|
|||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234},
|
||||
{"id": classified_failures[1].id, "bug_number": 5678}],
|
||||
format="json")
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
actual = resp.data
|
||||
assert len(actual) == 2
|
||||
|
@ -311,8 +302,7 @@ def test_put_multiple_duplicate(webapp, classified_failures, test_user):
|
|||
assert len(new_classified_failures) == len(classified_failures) - 1
|
||||
|
||||
|
||||
def test_put_multiple_duplicate_1(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_multiple_duplicate_1(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
new = ClassifiedFailure(bug_number=1234)
|
||||
|
@ -322,7 +312,8 @@ def test_put_multiple_duplicate_1(webapp, classified_failures, test_user):
|
|||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234},
|
||||
{"id": classified_failures[1].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
actual = resp.data
|
||||
assert len(actual) == 2
|
||||
|
@ -338,8 +329,7 @@ def test_put_multiple_duplicate_1(webapp, classified_failures, test_user):
|
|||
assert len(new_classified_failures) == len(classified_failures) - 2
|
||||
|
||||
|
||||
def test_put_multiple_duplicate_2(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_multiple_duplicate_2(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
classified_failures[0].bug_number = 1234
|
||||
|
@ -350,12 +340,12 @@ def test_put_multiple_duplicate_2(webapp, classified_failures, test_user):
|
|||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 5678},
|
||||
{"id": classified_failures[1].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
)
|
||||
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
def test_get_matching_lines(webapp, test_job, failure_lines, classified_failures):
|
||||
def test_get_matching_lines(client, test_job, failure_lines, classified_failures):
|
||||
"""
|
||||
test getting a single failure line
|
||||
"""
|
||||
|
@ -372,32 +362,35 @@ def test_get_matching_lines(webapp, test_job, failure_lines, classified_failures
|
|||
extra_lines[1].best_classification = classified_failures[1]
|
||||
extra_lines[1].save()
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("classified-failure-matches", kwargs={"pk": classified_failures[0].id}))
|
||||
|
||||
assert resp.status_int == 200
|
||||
actual = resp.json["results"]
|
||||
assert resp.status_code == 200
|
||||
actual = resp.json()["results"]
|
||||
|
||||
assert [item["id"] for item in actual] == [item.id for item in reversed(failure_lines)]
|
||||
|
||||
|
||||
def test_put_duplicate_repeated(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_duplicate_repeated(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
new = ClassifiedFailure(bug_number=1234)
|
||||
new.save()
|
||||
classified_failures.append(new)
|
||||
|
||||
client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
resp = client.put(
|
||||
reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234}],
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
new_classified_failures = ClassifiedFailure.objects.all()
|
||||
assert [item.id for item in new_classified_failures] == [2, 3]
|
||||
assert [item.bug_number for item in new_classified_failures] == [None, 1234]
|
||||
|
||||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
|
||||
actual = resp.data
|
||||
assert len(actual) == 1
|
||||
|
@ -410,24 +403,25 @@ def test_put_duplicate_repeated(webapp, classified_failures, test_user):
|
|||
assert len(new_classified_failures) == len(classified_failures) - 1
|
||||
|
||||
|
||||
def test_put_duplicate_multiple_repeated(webapp, classified_failures, test_user):
|
||||
client = APIClient()
|
||||
def test_put_duplicate_multiple_repeated(client, classified_failures, test_user):
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
new = ClassifiedFailure(bug_number=1234)
|
||||
new.save()
|
||||
classified_failures.append(new)
|
||||
|
||||
client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
resp = client.put(
|
||||
reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234}],
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
new_classified_failures = ClassifiedFailure.objects.all()
|
||||
assert [item.id for item in new_classified_failures] == [2, 3]
|
||||
assert [item.bug_number for item in new_classified_failures] == [None, 1234]
|
||||
resp = client.put(reverse("classified-failure-list"),
|
||||
[{"id": classified_failures[0].id, "bug_number": 1234},
|
||||
{"id": classified_failures[1].id, "bug_number": 1234}],
|
||||
format="json")
|
||||
)
|
||||
|
||||
actual = resp.data
|
||||
assert len(actual) == 2
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from tests.autoclassify.utils import (create_failure_lines,
|
||||
create_text_log_errors,
|
||||
|
@ -17,16 +16,16 @@ from treeherder.model.models import (BugJobMap,
|
|||
from treeherder.model.search import TestFailureLine as _TestFailureLine
|
||||
|
||||
|
||||
def test_get_failure_line(webapp, failure_lines):
|
||||
def test_get_failure_line(client, failure_lines):
|
||||
"""
|
||||
test getting a single failure line
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("failure-line-detail", kwargs={"pk": failure_lines[0].id}))
|
||||
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
failure_line = resp.json
|
||||
failure_line = resp.json()
|
||||
|
||||
assert isinstance(failure_line, object)
|
||||
exp_failure_keys = ["id", "job_guid", "repository", "job_log",
|
||||
|
@ -41,10 +40,10 @@ def test_get_failure_line(webapp, failure_lines):
|
|||
def test_update_failure_line_verify(test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -60,7 +59,7 @@ def test_update_failure_line_verify(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -81,11 +80,11 @@ def test_update_failure_line_verify(test_repository,
|
|||
def test_update_failure_line_replace(test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
|
@ -102,7 +101,7 @@ def test_update_failure_line_replace(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -125,13 +124,13 @@ def test_update_failure_line_replace(test_repository,
|
|||
def test_update_failure_line_mark_job(test_repository, test_job,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
bug = Bugscache.objects.create(id=1234,
|
||||
|
@ -150,7 +149,7 @@ def test_update_failure_line_mark_job(test_repository, test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -176,12 +175,13 @@ def test_update_failure_line_mark_job(test_repository, test_job,
|
|||
|
||||
def test_update_failure_line_mark_job_with_human_note(test_job,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures, test_user):
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
_, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
JobNote.objects.create(job=test_job,
|
||||
|
@ -194,7 +194,7 @@ def test_update_failure_line_mark_job_with_human_note(test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -211,12 +211,12 @@ def test_update_failure_line_mark_job_with_auto_note(test_job,
|
|||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
_, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
JobNote.objects.create(job=test_job,
|
||||
|
@ -227,7 +227,7 @@ def test_update_failure_line_mark_job_with_auto_note(test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -250,13 +250,13 @@ def test_update_failure_lines(mock_autoclassify_jobs_true,
|
|||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
eleven_jobs_stored,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
jobs = (Job.objects.get(id=1), Job.objects.get(id=2))
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
lines = [(test_line, {}),
|
||||
|
@ -281,7 +281,7 @@ def test_update_failure_lines(mock_autoclassify_jobs_true,
|
|||
body = [{"id": failure_line.id,
|
||||
"best_classification": classified_failures[1].id}
|
||||
for failure_line in failure_lines]
|
||||
resp = client.put(reverse("failure-line-list"), body, format="json")
|
||||
resp = client.put(reverse("failure-line-list"), body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -306,10 +306,11 @@ def test_update_failure_lines(mock_autoclassify_jobs_true,
|
|||
def test_update_failure_line_ignore(test_job,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures, test_user):
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
@ -326,7 +327,7 @@ def test_update_failure_line_ignore(test_job,
|
|||
|
||||
resp = client.put(
|
||||
reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -344,12 +345,12 @@ def test_update_failure_line_all_ignore_mark_job(test_job,
|
|||
mock_autoclassify_jobs_true,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
job_failure_lines = [line for line in failure_lines if
|
||||
|
@ -373,7 +374,7 @@ def test_update_failure_line_all_ignore_mark_job(test_job,
|
|||
body = {"best_classification": None}
|
||||
|
||||
resp = client.put(reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -395,12 +396,12 @@ def test_update_failure_line_partial_ignore_mark_job(test_job,
|
|||
mock_autoclassify_jobs_true,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
client,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
for i, (error_line, failure_line) in enumerate(zip(text_log_errors, failure_lines)):
|
||||
|
@ -410,7 +411,7 @@ def test_update_failure_line_partial_ignore_mark_job(test_job,
|
|||
body = {"best_classification": None if i == 0 else classified_failures[0].id}
|
||||
|
||||
resp = client.put(reverse("failure-line-detail", kwargs={"pk": failure_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from treeherder.model.models import (Job,
|
|||
|
||||
|
||||
def test_job_details(test_repository, failure_classifications,
|
||||
generic_reference_data, push_stored, webapp):
|
||||
generic_reference_data, push_stored, client):
|
||||
details = {
|
||||
'abcd': {
|
||||
'title': 'title',
|
||||
|
@ -56,70 +56,70 @@ def test_job_details(test_repository, failure_classifications,
|
|||
print(JobDetail.objects.filter(job__guid='abcd'))
|
||||
|
||||
# trying to get them all should return an error
|
||||
resp = webapp.get(reverse('jobdetail-list'), expect_errors=True)
|
||||
assert resp.status_int == 400
|
||||
resp = client.get(reverse('jobdetail-list'))
|
||||
assert resp.status_code == 400
|
||||
|
||||
# filter to just get one guid at a time
|
||||
for guid_identifier in ['job_guid', 'job__guid']:
|
||||
for (guid, detail) in iteritems(details):
|
||||
resp = webapp.get(reverse('jobdetail-list') + '?{}={}'.format(
|
||||
resp = client.get(reverse('jobdetail-list') + '?{}={}'.format(
|
||||
guid_identifier, guid))
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 1
|
||||
result = resp.json['results'][0]
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 1
|
||||
result = resp.json()['results'][0]
|
||||
del result['job_guid']
|
||||
del result['job_id']
|
||||
assert result == detail
|
||||
|
||||
# filter to get first with (just) job_id
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?job_id=1')
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json['results']]) == set(
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json()['results']]) == set(
|
||||
['abcd'])
|
||||
|
||||
# filter to get the first and second with job_id__in and repository
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?repository={}&job_id__in=1,2'.format(
|
||||
test_repository.name))
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 2
|
||||
assert set([v['job_guid'] for v in resp.json['results']]) == set(
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 2
|
||||
assert set([v['job_guid'] for v in resp.json()['results']]) == set(
|
||||
['abcd', 'efgh'])
|
||||
|
||||
# filter to get the last element with job_id__in and repository
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?repository={}&job_id__in=3'.format(
|
||||
test_repository2.name))
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json['results']]) == set(
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json()['results']]) == set(
|
||||
['ijkl'])
|
||||
|
||||
# make sure that filtering by repository with a job id in
|
||||
# a different repository returns no results
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?repository={}&job_id__in=3'.format(
|
||||
test_repository.name))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json['results'] == []
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['results'] == []
|
||||
|
||||
# add an extra one, but filter to just get those with a specific title.
|
||||
# we should only have one
|
||||
JobDetail.objects.create(title='title2', job=Job.objects.get(guid='abcd'),
|
||||
value='foo')
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?title=title&job_guid=abcd')
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json['results']]) == set(['abcd'])
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set([v['job_guid'] for v in resp.json()['results']]) == set(['abcd'])
|
||||
|
||||
# should also be able to filter by value
|
||||
resp = webapp.get(reverse('jobdetail-list') +
|
||||
resp = client.get(reverse('jobdetail-list') +
|
||||
'?value=value1&job_guid=abcd')
|
||||
assert resp.status_int == 200
|
||||
assert resp.json['results'] == [{
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['results'] == [{
|
||||
'job_guid': 'abcd',
|
||||
'job_id': 1,
|
||||
'title': 'title',
|
||||
|
@ -128,9 +128,9 @@ def test_job_details(test_repository, failure_classifications,
|
|||
}]
|
||||
|
||||
# Should be able to filter by push_id
|
||||
resp = webapp.get(reverse('jobdetail-list') + '?push_id=2')
|
||||
assert resp.status_int == 200
|
||||
assert resp.json['results'] == [{
|
||||
resp = client.get(reverse('jobdetail-list') + '?push_id=2')
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['results'] == [{
|
||||
'job_guid': 'ijkl',
|
||||
'job_id': 3,
|
||||
'title': 'title3',
|
||||
|
|
|
@ -6,7 +6,7 @@ from treeherder.model.models import JobLog
|
|||
|
||||
def test_get_job_log_urls(test_repository, push_stored,
|
||||
failure_classifications,
|
||||
generic_reference_data, webapp):
|
||||
generic_reference_data, client):
|
||||
job1 = create_generic_job('1234', test_repository, 1,
|
||||
generic_reference_data)
|
||||
job2 = create_generic_job('5678', test_repository, 1,
|
||||
|
@ -25,14 +25,14 @@ def test_get_job_log_urls(test_repository, push_stored,
|
|||
url='http://yahoo.com',
|
||||
status=JobLog.PARSED)
|
||||
|
||||
resp = webapp.get(reverse('job-log-url-list',
|
||||
resp = client.get(reverse('job-log-url-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?job_id=1')
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json) == 2
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()) == 2
|
||||
|
||||
resp = webapp.get(reverse('job-log-url-list',
|
||||
resp = client.get(reverse('job-log-url-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?job_id=1&job_id=2')
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json) == 3
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()) == 3
|
||||
|
|
|
@ -6,7 +6,6 @@ import pytest
|
|||
from dateutil import parser
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.status import HTTP_400_BAD_REQUEST
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import (Job,
|
||||
TaskclusterMetadata,
|
||||
|
@ -21,7 +20,7 @@ from treeherder.webapp.api.jobs import JobsViewSet
|
|||
(5, None, 6),
|
||||
(0, 5, 5),
|
||||
(10, 10, 1)])
|
||||
def test_job_list(webapp, eleven_jobs_stored, test_repository,
|
||||
def test_job_list(client, eleven_jobs_stored, test_repository,
|
||||
offset, count, expected_num):
|
||||
"""
|
||||
test retrieving a list of json blobs from the jobs-list
|
||||
|
@ -33,9 +32,9 @@ def test_job_list(webapp, eleven_jobs_stored, test_repository,
|
|||
[('offset', offset), ('count', count)] if v])
|
||||
if params:
|
||||
url += '?{}'.format(params)
|
||||
resp = webapp.get(url)
|
||||
assert resp.status_int == 200
|
||||
response_dict = resp.json
|
||||
resp = client.get(url)
|
||||
assert resp.status_code == 200
|
||||
response_dict = resp.json()
|
||||
jobs = response_dict["results"]
|
||||
assert isinstance(jobs, list)
|
||||
assert len(jobs) == expected_num
|
||||
|
@ -80,17 +79,18 @@ def test_job_list(webapp, eleven_jobs_stored, test_repository,
|
|||
assert set(job.keys()) == set(exp_keys)
|
||||
|
||||
|
||||
def test_job_list_bad_project(webapp, transactional_db):
|
||||
def test_job_list_bad_project(client, transactional_db):
|
||||
"""
|
||||
test retrieving a job list with a bad project throws 404.
|
||||
"""
|
||||
badurl = reverse("jobs-list",
|
||||
kwargs={"project": "badproject"})
|
||||
|
||||
webapp.get(badurl, status=404)
|
||||
resp = client.get(badurl)
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_job_list_equals_filter(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_job_list_equals_filter(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a job list with a querystring filter.
|
||||
"""
|
||||
|
@ -98,9 +98,9 @@ def test_job_list_equals_filter(webapp, eleven_jobs_stored, test_repository):
|
|||
kwargs={"project": test_repository.name})
|
||||
final_url = url + "?job_guid=f1c75261017c7c5ce3000931dce4c442fe0a1297"
|
||||
|
||||
resp = webapp.get(final_url).json
|
||||
|
||||
assert len(resp['results']) == 1
|
||||
resp = client.get(final_url)
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 1
|
||||
|
||||
|
||||
job_filter_values = [
|
||||
|
@ -138,7 +138,7 @@ job_filter_values = [
|
|||
|
||||
|
||||
@pytest.mark.parametrize(('fieldname', 'expected'), job_filter_values)
|
||||
def test_job_list_filter_fields(webapp, eleven_jobs_stored, test_repository, fieldname, expected):
|
||||
def test_job_list_filter_fields(client, eleven_jobs_stored, test_repository, fieldname, expected):
|
||||
"""
|
||||
test retrieving a job list with a querystring filter.
|
||||
|
||||
|
@ -151,14 +151,13 @@ def test_job_list_filter_fields(webapp, eleven_jobs_stored, test_repository, fie
|
|||
url = reverse("jobs-list",
|
||||
kwargs={"project": test_repository.name})
|
||||
final_url = url + "?{}={}".format(fieldname, expected)
|
||||
print(final_url)
|
||||
resp = webapp.get(final_url).json
|
||||
first = resp['results'][0]
|
||||
|
||||
resp = client.get(final_url)
|
||||
assert resp.status_code == 200
|
||||
first = resp.json()['results'][0]
|
||||
assert first[fieldname] == expected
|
||||
|
||||
|
||||
def test_job_list_in_filter(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_job_list_in_filter(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a job list with a querystring filter.
|
||||
"""
|
||||
|
@ -168,61 +167,64 @@ def test_job_list_in_filter(webapp, eleven_jobs_stored, test_repository):
|
|||
"f1c75261017c7c5ce3000931dce4c442fe0a1297,"
|
||||
"9abb6f7d54a49d763c584926377f09835c5e1a32")
|
||||
|
||||
resp = webapp.get(final_url).json
|
||||
assert len(resp['results']) == 2
|
||||
resp = client.get(final_url)
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()['results']) == 2
|
||||
|
||||
|
||||
def test_job_detail(webapp, test_job):
|
||||
def test_job_detail(client, test_job):
|
||||
"""
|
||||
test retrieving a single job from the jobs-detail
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-detail",
|
||||
kwargs={"project": test_job.repository.name,
|
||||
"pk": test_job.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, dict)
|
||||
assert resp.json["id"] == test_job.id
|
||||
assert not resp.json.get("taskcluster_metadata")
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), dict)
|
||||
assert resp.json()["id"] == test_job.id
|
||||
assert not resp.json().get("taskcluster_metadata")
|
||||
|
||||
# add some taskcluster metadata to the test job so we can test that too
|
||||
tm = TaskclusterMetadata.objects.create(job=test_job,
|
||||
task_id='IYyscnNMTLuxzna7PNqUJQ',
|
||||
retry_id=0)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-detail",
|
||||
kwargs={"project": test_job.repository.name,
|
||||
"pk": test_job.id})
|
||||
)
|
||||
assert resp.json["taskcluster_metadata"] == {
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["taskcluster_metadata"] == {
|
||||
"task_id": tm.task_id,
|
||||
"retry_id": tm.retry_id
|
||||
}
|
||||
|
||||
|
||||
def test_job_retrigger_unauthorized(webapp, test_repository):
|
||||
def test_job_retrigger_unauthorized(client, test_repository):
|
||||
"""
|
||||
Validate that only authenticated users can hit this endpoint.
|
||||
"""
|
||||
url = reverse("jobs-retrigger",
|
||||
kwargs={"project": test_repository.name})
|
||||
webapp.post(url, {"job_id_list": [1]}, status=403)
|
||||
resp = client.post(url, {"job_id_list": [1]})
|
||||
assert resp.status_code == 403
|
||||
|
||||
|
||||
def test_job_retrigger_authorized(webapp, eleven_jobs_stored,
|
||||
def test_job_retrigger_authorized(client, eleven_jobs_stored,
|
||||
pulse_action_consumer, test_user):
|
||||
"""
|
||||
Validate that only authenticated users can hit this endpoint.
|
||||
"""
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
job = Job.objects.get(id=1)
|
||||
url = reverse("jobs-retrigger",
|
||||
kwargs={"project": job.repository.name})
|
||||
client.post(url, {"job_id_list": [job.id]})
|
||||
resp = client.post(url, {"job_id_list": [job.id]})
|
||||
assert resp.status_code == 200
|
||||
|
||||
message = pulse_action_consumer.get(block=True, timeout=2)
|
||||
content = message.payload
|
||||
|
@ -233,12 +235,11 @@ def test_job_retrigger_authorized(webapp, eleven_jobs_stored,
|
|||
assert content['requester'] == test_user.email
|
||||
|
||||
|
||||
def test_job_cancel_authorized(webapp, test_repository, eleven_jobs_stored,
|
||||
def test_job_cancel_authorized(client, test_repository, eleven_jobs_stored,
|
||||
pulse_action_consumer, test_user):
|
||||
"""
|
||||
Validate that job gets updated when a valid user hits this endpoint.
|
||||
"""
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
# get the job, set its state to pending
|
||||
|
@ -248,7 +249,8 @@ def test_job_cancel_authorized(webapp, test_repository, eleven_jobs_stored,
|
|||
|
||||
url = reverse("jobs-cancel",
|
||||
kwargs={"project": test_repository.name})
|
||||
client.post(url, {"job_id_list": [job.id]})
|
||||
resp = client.post(url, {"job_id_list": [job.id]})
|
||||
assert resp.status_code == 200
|
||||
|
||||
message = pulse_action_consumer.get(block=True, timeout=2)
|
||||
content = message.payload
|
||||
|
@ -265,43 +267,42 @@ def test_job_cancel_authorized(webapp, test_repository, eleven_jobs_stored,
|
|||
assert job.result == 'usercancel'
|
||||
|
||||
|
||||
def test_job_detail_bad_project(webapp, transactional_db):
|
||||
def test_job_detail_bad_project(client, transactional_db):
|
||||
"""
|
||||
test retrieving a single job from the jobs-detail
|
||||
endpoint.
|
||||
"""
|
||||
badurl = reverse("jobs-detail",
|
||||
kwargs={"project": "badproject", "pk": 1})
|
||||
|
||||
webapp.get(badurl, status=404)
|
||||
resp = client.get(badurl)
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_job_detail_not_found(webapp, test_repository):
|
||||
def test_job_detail_not_found(client, test_repository):
|
||||
"""
|
||||
test retrieving a HTTP 404 from the jobs-detail
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-detail",
|
||||
kwargs={"project": test_repository.name, "pk": -32767}),
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 404
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_job_error_lines(webapp, eleven_jobs_stored, failure_lines, classified_failures):
|
||||
def test_job_error_lines(client, eleven_jobs_stored, failure_lines, classified_failures):
|
||||
"""
|
||||
test retrieving failure lines
|
||||
"""
|
||||
job = Job.objects.get(id=1)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-failure-lines",
|
||||
kwargs={"project": job.repository.name, "pk": job.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
failures = resp.json
|
||||
failures = resp.json()
|
||||
assert isinstance(failures, list)
|
||||
|
||||
exp_failure_keys = ["id", "job_guid", "repository", "job_log", "action", "line",
|
||||
|
@ -327,7 +328,7 @@ def test_job_error_lines(webapp, eleven_jobs_stored, failure_lines, classified_f
|
|||
assert set(classified.keys()) == set(exp_classified_keys)
|
||||
|
||||
|
||||
def test_text_log_steps_and_errors(webapp, test_job):
|
||||
def test_text_log_steps_and_errors(client, test_job):
|
||||
|
||||
TextLogStep.objects.create(job=test_job,
|
||||
name='step1',
|
||||
|
@ -347,13 +348,13 @@ def test_text_log_steps_and_errors(webapp, test_job):
|
|||
line_number=101)
|
||||
TextLogError.objects.create(step=step2, line='failure 2',
|
||||
line_number=102)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-text-log-steps",
|
||||
kwargs={"project": test_job.repository.name,
|
||||
"pk": test_job.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == [
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == [
|
||||
{
|
||||
'errors': [],
|
||||
'finished': '1970-01-01T00:01:40',
|
||||
|
@ -404,7 +405,7 @@ def test_text_log_steps_and_errors(webapp, test_job):
|
|||
]
|
||||
|
||||
|
||||
def test_text_log_errors(webapp, test_job):
|
||||
def test_text_log_errors(client, test_job):
|
||||
|
||||
TextLogStep.objects.create(job=test_job,
|
||||
name='step1',
|
||||
|
@ -424,13 +425,13 @@ def test_text_log_errors(webapp, test_job):
|
|||
line_number=101)
|
||||
TextLogError.objects.create(step=step2, line='failure 2',
|
||||
line_number=102)
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("jobs-text-log-errors",
|
||||
kwargs={"project": test_job.repository.name,
|
||||
"pk": test_job.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == [
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == [
|
||||
{
|
||||
'id': 1,
|
||||
'line': 'failure 1',
|
||||
|
@ -466,7 +467,7 @@ def test_text_log_errors(webapp, test_job):
|
|||
(1, None, 2),
|
||||
(0, 1, 1),
|
||||
(2, 10, 1)])
|
||||
def test_list_similar_jobs(webapp, eleven_jobs_stored,
|
||||
def test_list_similar_jobs(client, eleven_jobs_stored,
|
||||
offset, count, expected_num):
|
||||
"""
|
||||
test retrieving similar jobs
|
||||
|
@ -479,11 +480,11 @@ def test_list_similar_jobs(webapp, eleven_jobs_stored,
|
|||
[('offset', offset), ('count', count)] if v])
|
||||
if params:
|
||||
url += '?{}'.format(params)
|
||||
resp = webapp.get(url)
|
||||
resp = client.get(url)
|
||||
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
similar_jobs = resp.json
|
||||
similar_jobs = resp.json()
|
||||
|
||||
assert 'results' in similar_jobs
|
||||
|
||||
|
@ -492,20 +493,19 @@ def test_list_similar_jobs(webapp, eleven_jobs_stored,
|
|||
assert len(similar_jobs['results']) == expected_num
|
||||
|
||||
|
||||
def test_job_create(webapp, test_repository, test_user, eleven_job_blobs,
|
||||
def test_job_create(client, test_repository, test_user, eleven_job_blobs,
|
||||
failure_classifications, monkeypatch):
|
||||
monkeypatch.setattr(JobsViewSet, 'permission_classes', ())
|
||||
|
||||
url = reverse("jobs-list",
|
||||
kwargs={"project": test_repository.name})
|
||||
client = APIClient()
|
||||
resp = client.post(url, data=eleven_job_blobs, format="json")
|
||||
resp = client.post(url, data=eleven_job_blobs)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
# test that the jobs were actually created
|
||||
assert Job.objects.count() == 11
|
||||
test_job_list(webapp, None, test_repository, 0, 11, 11)
|
||||
test_job_list(client, None, test_repository, 0, 11, 11)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('lm_key,lm_value,exp_status, exp_job_count', [
|
||||
|
@ -514,7 +514,7 @@ def test_job_create(webapp, test_repository, test_user, eleven_job_blobs,
|
|||
("last_modified__gt", "-Infinity", HTTP_400_BAD_REQUEST, 0),
|
||||
("last_modified__gt", "whatever", HTTP_400_BAD_REQUEST, 0),
|
||||
])
|
||||
def test_last_modified(webapp, eleven_jobs_stored, test_repository,
|
||||
def test_last_modified(client, eleven_jobs_stored, test_repository,
|
||||
lm_key, lm_value, exp_status, exp_job_count):
|
||||
try:
|
||||
param_date = parser.parse(lm_value)
|
||||
|
@ -531,7 +531,7 @@ def test_last_modified(webapp, eleven_jobs_stored, test_repository,
|
|||
url = reverse("jobs-list", kwargs={"project": test_repository.name})
|
||||
final_url = url + ("?{}={}".format(lm_key, lm_value))
|
||||
|
||||
resp = webapp.get(final_url, expect_errors=(exp_status != 200))
|
||||
assert resp.status_int == exp_status
|
||||
resp = client.get(final_url)
|
||||
assert resp.status_code == exp_status
|
||||
if exp_status == 200:
|
||||
assert len(resp.json["results"]) == exp_job_count
|
||||
assert len(resp.json()["results"]) == exp_job_count
|
||||
|
|
|
@ -2,26 +2,25 @@ import json
|
|||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import (Job,
|
||||
JobNote)
|
||||
|
||||
|
||||
def test_note_list(webapp, test_job_with_notes):
|
||||
def test_note_list(client, test_job_with_notes):
|
||||
"""
|
||||
test retrieving a list of notes from the note-list endpoint
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("note-list", kwargs={
|
||||
"project": test_job_with_notes.repository.name
|
||||
}),
|
||||
{"job_id": test_job_with_notes.id}
|
||||
)
|
||||
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, list)
|
||||
assert resp.json == [{
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), list)
|
||||
assert resp.json() == [{
|
||||
"id": note.id,
|
||||
"job_id": note.job.id,
|
||||
"failure_classification_id": note.failure_classification.id,
|
||||
|
@ -31,14 +30,14 @@ def test_note_list(webapp, test_job_with_notes):
|
|||
} for note in JobNote.objects.filter(job=test_job_with_notes)]
|
||||
|
||||
|
||||
def test_note_detail(webapp, test_job_with_notes):
|
||||
def test_note_detail(client, test_job_with_notes):
|
||||
"""
|
||||
test retrieving a single note from the notes-detail
|
||||
endpoint.
|
||||
"""
|
||||
note = JobNote.objects.get(id=1)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("note-detail",
|
||||
kwargs={
|
||||
"project": test_job_with_notes.repository.name,
|
||||
|
@ -46,9 +45,9 @@ def test_note_detail(webapp, test_job_with_notes):
|
|||
})
|
||||
)
|
||||
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, dict)
|
||||
assert resp.json == {
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), dict)
|
||||
assert resp.json() == {
|
||||
"id": 1,
|
||||
"job_id": note.job.id,
|
||||
"failure_classification_id": 2,
|
||||
|
@ -58,51 +57,48 @@ def test_note_detail(webapp, test_job_with_notes):
|
|||
}
|
||||
|
||||
|
||||
def test_note_detail_not_found(webapp, test_repository):
|
||||
def test_note_detail_not_found(client, test_repository):
|
||||
"""
|
||||
test retrieving a HTTP 404 from the note-detail
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("note-detail",
|
||||
kwargs={"project": test_repository.name, "pk": -32767}),
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 404
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_note_detail_bad_project(webapp, test_repository):
|
||||
def test_note_detail_bad_project(client, test_repository):
|
||||
"""
|
||||
test retrieving a HTTP 404 from the note-detail
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("note-detail",
|
||||
kwargs={"project": "foo", "pk": -32767}),
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 404
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.parametrize('test_no_auth', [True, False])
|
||||
def test_create_note(webapp, test_job, mock_message_broker,
|
||||
def test_create_note(client, test_job, mock_message_broker,
|
||||
test_user, test_no_auth):
|
||||
"""
|
||||
test creating a single note via endpoint when authenticated
|
||||
"""
|
||||
client = APIClient()
|
||||
if not test_no_auth:
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
resp = client.post(
|
||||
reverse("note-list", kwargs={"project": test_job.repository.name}),
|
||||
{
|
||||
data={
|
||||
"job_id": test_job.id,
|
||||
"failure_classification_id": 2,
|
||||
"who": test_user.email,
|
||||
"text": "you look like a man-o-lantern"
|
||||
},
|
||||
expect_errors=test_no_auth)
|
||||
)
|
||||
|
||||
if test_no_auth:
|
||||
assert resp.status_code == 403
|
||||
|
@ -127,12 +123,11 @@ def test_create_note(webapp, test_job, mock_message_broker,
|
|||
|
||||
|
||||
@pytest.mark.parametrize('test_no_auth', [True, False])
|
||||
def test_delete_note(webapp, test_job_with_notes, mock_message_broker, test_repository,
|
||||
def test_delete_note(client, test_job_with_notes, mock_message_broker, test_repository,
|
||||
test_sheriff, test_no_auth):
|
||||
"""
|
||||
test deleting a single note via endpoint
|
||||
"""
|
||||
client = APIClient()
|
||||
if not test_no_auth:
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
|
||||
|
@ -141,7 +136,6 @@ def test_delete_note(webapp, test_job_with_notes, mock_message_broker, test_repo
|
|||
resp = client.delete(
|
||||
reverse("note-detail", kwargs={"project": test_repository.name,
|
||||
"pk": test_job_with_notes.id}),
|
||||
expect_errors=test_no_auth
|
||||
)
|
||||
new_notes_count = JobNote.objects.count()
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ import datetime
|
|||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import Push
|
||||
from treeherder.perf.models import (PerformanceAlert,
|
||||
|
@ -12,15 +11,15 @@ from treeherder.perf.models import (PerformanceAlert,
|
|||
PerformanceFramework)
|
||||
|
||||
|
||||
def test_alerts_get(webapp, test_repository, test_perf_alert):
|
||||
resp = webapp.get(reverse('performance-alerts-list'))
|
||||
assert resp.status_int == 200
|
||||
def test_alerts_get(client, test_repository, test_perf_alert):
|
||||
resp = client.get(reverse('performance-alerts-list'))
|
||||
assert resp.status_code == 200
|
||||
|
||||
# should just have the one alert
|
||||
assert resp.json['next'] is None
|
||||
assert resp.json['previous'] is None
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set(resp.json['results'][0].keys()) == set([
|
||||
assert resp.json()['next'] is None
|
||||
assert resp.json()['previous'] is None
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set(resp.json()['results'][0].keys()) == set([
|
||||
'amount_pct',
|
||||
'amount_abs',
|
||||
'id',
|
||||
|
@ -35,7 +34,7 @@ def test_alerts_get(webapp, test_repository, test_perf_alert):
|
|||
't_value',
|
||||
'classifier'
|
||||
])
|
||||
assert resp.json['results'][0]['related_summary_id'] is None
|
||||
assert resp.json()['results'][0]['related_summary_id'] is None
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
@ -50,22 +49,22 @@ def test_perf_alert_summary_2(test_perf_alert_summary):
|
|||
manually_created=False)
|
||||
|
||||
|
||||
def test_alerts_put(webapp, push_stored, test_repository,
|
||||
def test_alerts_put(client, push_stored, test_repository,
|
||||
test_perf_alert, test_perf_alert_summary_2, test_user,
|
||||
test_sheriff):
|
||||
resp = webapp.get(reverse('performance-alerts-list'))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json['results'][0]['related_summary_id'] is None
|
||||
resp = client.get(reverse('performance-alerts-list'))
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()['results'][0]['related_summary_id'] is None
|
||||
|
||||
# verify that we fail if not authenticated
|
||||
webapp.put_json(reverse('performance-alerts-list') + '1/', {
|
||||
resp = client.put(reverse('performance-alerts-list') + '1/', {
|
||||
'related_summary_id': 2,
|
||||
'status': PerformanceAlert.DOWNSTREAM
|
||||
}, status=403)
|
||||
})
|
||||
assert resp.status_code == 403
|
||||
assert PerformanceAlert.objects.get(id=1).related_summary_id is None
|
||||
|
||||
# verify that we fail if authenticated, but not staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
resp = client.put(reverse('performance-alerts-list') + '1/', {
|
||||
'related_summary_id': 2,
|
||||
|
@ -75,7 +74,6 @@ def test_alerts_put(webapp, push_stored, test_repository,
|
|||
assert PerformanceAlert.objects.get(id=1).related_summary_id is None
|
||||
|
||||
# verify that we succeed if authenticated + staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
resp = client.put(reverse('performance-alerts-list') + '1/', {
|
||||
'related_summary_id': 2,
|
||||
|
@ -94,7 +92,8 @@ def test_alerts_put(webapp, push_stored, test_repository,
|
|||
assert PerformanceAlert.objects.get(id=1).related_summary_id is None
|
||||
|
||||
|
||||
def test_reassign_different_repository(push_stored,
|
||||
def test_reassign_different_repository(client,
|
||||
push_stored,
|
||||
test_repository, test_repository_2,
|
||||
test_perf_alert,
|
||||
test_perf_alert_summary_2,
|
||||
|
@ -104,7 +103,6 @@ def test_reassign_different_repository(push_stored,
|
|||
test_perf_alert_summary_2.repository = test_repository_2
|
||||
test_perf_alert_summary_2.save()
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
|
||||
# reassign to summary with different repository, should fail
|
||||
|
@ -129,7 +127,8 @@ def test_reassign_different_repository(push_stored,
|
|||
assert test_perf_alert.classifier == test_sheriff
|
||||
|
||||
|
||||
def test_reassign_different_framework(push_stored,
|
||||
def test_reassign_different_framework(client,
|
||||
push_stored,
|
||||
test_repository, test_repository_2,
|
||||
test_perf_alert,
|
||||
test_perf_alert_summary_2,
|
||||
|
@ -141,7 +140,6 @@ def test_reassign_different_framework(push_stored,
|
|||
test_perf_alert_summary_2.framework = framework_2
|
||||
test_perf_alert_summary_2.save()
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
|
||||
resp = client.put(reverse('performance-alerts-list') + '1/', {
|
||||
|
@ -164,7 +162,7 @@ def alert_create_post_blob(test_perf_alert_summary, test_perf_signature):
|
|||
}
|
||||
|
||||
|
||||
def test_alerts_post(webapp, test_repository, test_perf_signature,
|
||||
def test_alerts_post(client, test_repository, test_perf_signature,
|
||||
test_perf_alert_summary, alert_create_post_blob,
|
||||
test_user, test_sheriff):
|
||||
|
||||
|
@ -184,11 +182,11 @@ def test_alerts_post(webapp, test_repository, test_perf_signature,
|
|||
push_timestamp=push.time)
|
||||
|
||||
# verify that we fail if not authenticated
|
||||
webapp.post_json(reverse('performance-alerts-list'),
|
||||
alert_create_post_blob, status=403)
|
||||
resp = client.post(reverse('performance-alerts-list'),
|
||||
alert_create_post_blob)
|
||||
assert resp.status_code == 403
|
||||
|
||||
# verify that we fail if authenticated, but not staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
resp = client.post(reverse('performance-alerts-list'),
|
||||
alert_create_post_blob)
|
||||
|
@ -196,7 +194,6 @@ def test_alerts_post(webapp, test_repository, test_perf_signature,
|
|||
assert PerformanceAlert.objects.count() == 0
|
||||
|
||||
# verify that we succeed if staff + authenticated
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
resp = client.post(reverse('performance-alerts-list'),
|
||||
alert_create_post_blob)
|
||||
|
@ -214,14 +211,13 @@ def test_alerts_post(webapp, test_repository, test_perf_signature,
|
|||
assert alert.summary.id == 1
|
||||
|
||||
|
||||
def test_alerts_post_insufficient_data(test_repository,
|
||||
def test_alerts_post_insufficient_data(client,
|
||||
test_repository,
|
||||
test_perf_alert_summary,
|
||||
test_perf_signature, test_sheriff,
|
||||
alert_create_post_blob):
|
||||
# we should not succeed if insufficient data is passed through
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
|
||||
# we should not succeed if insufficient data is passed through
|
||||
for removed_key in ['summary_id', 'signature_id']:
|
||||
new_post_blob = copy.copy(alert_create_post_blob)
|
||||
del new_post_blob[removed_key]
|
||||
|
|
|
@ -2,7 +2,6 @@ import datetime
|
|||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import Push
|
||||
from treeherder.perf.models import PerformanceAlertSummary
|
||||
|
@ -57,17 +56,17 @@ def test_perf_alert_onhold(test_perf_signature, test_perf_alert_summary_onhold):
|
|||
t_value=20.0)
|
||||
|
||||
|
||||
def test_alert_summaries_get(webapp, test_perf_alert_summary,
|
||||
def test_alert_summaries_get(client, test_perf_alert_summary,
|
||||
test_perf_alert):
|
||||
# verify that we get the performance summary + alert on GET
|
||||
resp = webapp.get(reverse('performance-alert-summaries-list'))
|
||||
assert resp.status_int == 200
|
||||
resp = client.get(reverse('performance-alert-summaries-list'))
|
||||
assert resp.status_code == 200
|
||||
|
||||
# should just have the one alert summary (with one alert)
|
||||
assert resp.json['next'] is None
|
||||
assert resp.json['previous'] is None
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set(resp.json['results'][0].keys()) == set([
|
||||
assert resp.json()['next'] is None
|
||||
assert resp.json()['previous'] is None
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set(resp.json()['results'][0].keys()) == set([
|
||||
'alerts',
|
||||
'bug_number',
|
||||
'issue_tracker',
|
||||
|
@ -81,8 +80,8 @@ def test_alert_summaries_get(webapp, test_perf_alert_summary,
|
|||
'push_id',
|
||||
'status',
|
||||
])
|
||||
assert len(resp.json['results'][0]['alerts']) == 1
|
||||
assert set(resp.json['results'][0]['alerts'][0].keys()) == set([
|
||||
assert len(resp.json()['results'][0]['alerts']) == 1
|
||||
assert set(resp.json()['results'][0]['alerts'][0].keys()) == set([
|
||||
'id',
|
||||
'status',
|
||||
'series_signature',
|
||||
|
@ -97,21 +96,21 @@ def test_alert_summaries_get(webapp, test_perf_alert_summary,
|
|||
'related_summary_id',
|
||||
'classifier'
|
||||
])
|
||||
assert resp.json['results'][0]['related_alerts'] == []
|
||||
assert resp.json()['results'][0]['related_alerts'] == []
|
||||
|
||||
|
||||
def test_alert_summaries_get_onhold(webapp, test_perf_alert_summary,
|
||||
def test_alert_summaries_get_onhold(client, test_perf_alert_summary,
|
||||
test_perf_alert, test_perf_alert_summary_onhold,
|
||||
test_perf_alert_onhold, test_repository_onhold):
|
||||
# verify that we get the performance summary + alert on GET
|
||||
resp = webapp.get(reverse('performance-alert-summaries-list'))
|
||||
assert resp.status_int == 200
|
||||
resp = client.get(reverse('performance-alert-summaries-list'))
|
||||
assert resp.status_code == 200
|
||||
|
||||
# should just have the one alert summary (with one alert)
|
||||
assert resp.json['next'] is None
|
||||
assert resp.json['previous'] is None
|
||||
assert len(resp.json['results']) == 1
|
||||
assert set(resp.json['results'][0].keys()) == set([
|
||||
assert resp.json()['next'] is None
|
||||
assert resp.json()['previous'] is None
|
||||
assert len(resp.json()['results']) == 1
|
||||
assert set(resp.json()['results'][0].keys()) == set([
|
||||
'alerts',
|
||||
'bug_number',
|
||||
'issue_tracker',
|
||||
|
@ -125,8 +124,8 @@ def test_alert_summaries_get_onhold(webapp, test_perf_alert_summary,
|
|||
'push_id',
|
||||
'status',
|
||||
])
|
||||
assert len(resp.json['results'][0]['alerts']) == 1
|
||||
assert set(resp.json['results'][0]['alerts'][0].keys()) == set([
|
||||
assert len(resp.json()['results'][0]['alerts']) == 1
|
||||
assert set(resp.json()['results'][0]['alerts'][0].keys()) == set([
|
||||
'id',
|
||||
'status',
|
||||
'series_signature',
|
||||
|
@ -141,19 +140,19 @@ def test_alert_summaries_get_onhold(webapp, test_perf_alert_summary,
|
|||
'related_summary_id',
|
||||
'classifier'
|
||||
])
|
||||
assert resp.json['results'][0]['related_alerts'] == []
|
||||
assert resp.json()['results'][0]['related_alerts'] == []
|
||||
|
||||
|
||||
def test_alert_summaries_put(webapp, test_repository, test_perf_signature,
|
||||
def test_alert_summaries_put(client, test_repository, test_perf_signature,
|
||||
test_perf_alert_summary, test_user, test_sheriff):
|
||||
# verify that we fail if not authenticated
|
||||
webapp.put_json(reverse('performance-alert-summaries-list') + '1/', {
|
||||
resp = client.put(reverse('performance-alert-summaries-list') + '1/', {
|
||||
'status': 1
|
||||
}, status=403)
|
||||
})
|
||||
assert resp.status_code == 403
|
||||
assert PerformanceAlertSummary.objects.get(id=1).status == 0
|
||||
|
||||
# verify that we fail if authenticated, but not staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
resp = client.put(reverse('performance-alert-summaries-list') + '1/', {
|
||||
'status': 1
|
||||
|
@ -162,7 +161,6 @@ def test_alert_summaries_put(webapp, test_repository, test_perf_signature,
|
|||
assert PerformanceAlertSummary.objects.get(id=1).status == 0
|
||||
|
||||
# verify that we succeed if authenticated + staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
resp = client.put(reverse('performance-alert-summaries-list') + '1/', {
|
||||
'status': 1
|
||||
|
@ -171,7 +169,7 @@ def test_alert_summaries_put(webapp, test_repository, test_perf_signature,
|
|||
assert PerformanceAlertSummary.objects.get(id=1).status == 1
|
||||
|
||||
|
||||
def test_alert_summary_post(webapp, test_repository, push_stored,
|
||||
def test_alert_summary_post(client, test_repository, push_stored,
|
||||
test_perf_signature, test_user, test_sheriff):
|
||||
# this blob should be sufficient to create a new alert summary (assuming
|
||||
# the user of this API is authorized to do so!)
|
||||
|
@ -183,19 +181,17 @@ def test_alert_summary_post(webapp, test_repository, push_stored,
|
|||
}
|
||||
|
||||
# verify that we fail if not authenticated
|
||||
webapp.post_json(reverse('performance-alert-summaries-list'), post_blob,
|
||||
status=403)
|
||||
resp = client.post(reverse('performance-alert-summaries-list'), post_blob)
|
||||
assert resp.status_code == 403
|
||||
assert PerformanceAlertSummary.objects.count() == 0
|
||||
|
||||
# verify that we fail if authenticated, but not staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
resp = client.post(reverse('performance-alert-summaries-list'), post_blob)
|
||||
assert resp.status_code == 403
|
||||
assert PerformanceAlertSummary.objects.count() == 0
|
||||
|
||||
# verify that we succeed if authenticated + staff
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_sheriff)
|
||||
resp = client.post(reverse('performance-alert-summaries-list'), post_blob)
|
||||
assert resp.status_code == 200
|
||||
|
|
|
@ -4,7 +4,7 @@ from treeherder.perf.models import (PerformanceBugTemplate,
|
|||
PerformanceFramework)
|
||||
|
||||
|
||||
def test_perf_bug_template_api(webapp, test_perf_framework):
|
||||
def test_perf_bug_template_api(client, test_perf_framework):
|
||||
framework2 = PerformanceFramework.objects.create(name='test_talos2', enabled=True)
|
||||
|
||||
template_dicts = []
|
||||
|
@ -22,12 +22,12 @@ def test_perf_bug_template_api(webapp, test_perf_framework):
|
|||
template_dicts.append(dict)
|
||||
|
||||
# test that we can get them all
|
||||
resp = webapp.get(reverse('performance-bug-template-list'))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == template_dicts
|
||||
resp = client.get(reverse('performance-bug-template-list'))
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == template_dicts
|
||||
|
||||
# test that we can get just one (the usual case, probably)
|
||||
resp = webapp.get(reverse('performance-bug-template-list') +
|
||||
resp = client.get(reverse('performance-bug-template-list') +
|
||||
'?framework={}'.format(test_perf_framework.id))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == [template_dicts[0]]
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == [template_dicts[0]]
|
||||
|
|
|
@ -2,7 +2,6 @@ import datetime
|
|||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.model.models import (MachinePlatform,
|
||||
Push)
|
||||
|
@ -56,13 +55,13 @@ def test_perf_signature_same_hash_different_framework(test_perf_signature):
|
|||
return new_signature
|
||||
|
||||
|
||||
def test_no_summary_performance_data(webapp, test_perf_signature,
|
||||
def test_no_summary_performance_data(client, test_perf_signature,
|
||||
test_repository):
|
||||
|
||||
resp = webapp.get(reverse('performance-signatures-list',
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={"project": test_repository.name}))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == {
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == {
|
||||
test_perf_signature.signature_hash: {
|
||||
'id': test_perf_signature.id,
|
||||
'test': test_perf_signature.test,
|
||||
|
@ -75,28 +74,28 @@ def test_no_summary_performance_data(webapp, test_perf_signature,
|
|||
}
|
||||
|
||||
|
||||
def test_performance_platforms(webapp, test_perf_signature):
|
||||
resp = webapp.get(reverse('performance-signatures-platforms-list',
|
||||
def test_performance_platforms(client, test_perf_signature):
|
||||
resp = client.get(reverse('performance-signatures-platforms-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == ['win7']
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == ['win7']
|
||||
|
||||
|
||||
def test_performance_platforms_expired_test(webapp, test_perf_signature):
|
||||
def test_performance_platforms_expired_test(client, test_perf_signature):
|
||||
# check that we have no performance platform if the signatures are too old
|
||||
test_perf_signature.last_updated = datetime.datetime.utcfromtimestamp(0)
|
||||
test_perf_signature.save()
|
||||
resp = webapp.get(reverse('performance-signatures-platforms-list',
|
||||
resp = client.get(reverse('performance-signatures-platforms-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}) + '?interval={}'.format(86400))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == []
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == []
|
||||
|
||||
|
||||
def test_performance_platforms_framework_filtering(webapp, test_perf_signature):
|
||||
def test_performance_platforms_framework_filtering(client, test_perf_signature):
|
||||
# check framework filtering
|
||||
framework2 = PerformanceFramework.objects.create(name='test_talos2', enabled=True)
|
||||
platform2 = MachinePlatform.objects.create(
|
||||
|
@ -115,31 +114,30 @@ def test_performance_platforms_framework_filtering(webapp, test_perf_signature):
|
|||
last_updated=test_perf_signature.last_updated)
|
||||
|
||||
# by default should return both
|
||||
resp = webapp.get(reverse('performance-signatures-platforms-list',
|
||||
resp = client.get(reverse('performance-signatures-platforms-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}))
|
||||
assert resp.status_int == 200
|
||||
assert sorted(resp.json) == ['win7', 'win7-a']
|
||||
assert resp.status_code == 200
|
||||
assert sorted(resp.json()) == ['win7', 'win7-a']
|
||||
|
||||
# if we specify just one framework, should only return one
|
||||
resp = webapp.get(reverse('performance-signatures-platforms-list',
|
||||
resp = client.get(reverse('performance-signatures-platforms-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}) + '?framework={}'.format(framework2.id))
|
||||
assert resp.status_int == 200
|
||||
assert resp.json == ['win7-a']
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == ['win7-a']
|
||||
|
||||
|
||||
def test_summary_performance_data(webapp, test_repository,
|
||||
def test_summary_performance_data(client, test_repository,
|
||||
summary_perf_signature,
|
||||
test_perf_signature):
|
||||
summary_signature_hash = summary_perf_signature.signature_hash
|
||||
resp = webapp.get(reverse('performance-signatures-list',
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={"project": test_repository.name}))
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
client = APIClient()
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={"project": test_repository.name}))
|
||||
assert resp.status_code == 200
|
||||
|
@ -168,17 +166,15 @@ def test_summary_performance_data(webapp, test_repository,
|
|||
assert resp.data[signature.signature_hash] == expected
|
||||
|
||||
|
||||
def test_filter_signatures_by_framework(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_signatures_by_framework(client, test_repository, test_perf_signature,
|
||||
test_perf_signature_same_hash_different_framework):
|
||||
signature2 = test_perf_signature_same_hash_different_framework
|
||||
|
||||
client = APIClient()
|
||||
|
||||
# Filter by original framework
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?framework=%s' % test_perf_signature.framework.id,
|
||||
format='json')
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.data.keys()) == 1
|
||||
assert resp.data[test_perf_signature.signature_hash]['framework_id'] == test_perf_signature.framework.id
|
||||
|
@ -187,13 +183,13 @@ def test_filter_signatures_by_framework(webapp, test_repository, test_perf_signa
|
|||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?framework=%s' % signature2.framework.id,
|
||||
format='json')
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.data.keys()) == 1
|
||||
assert resp.data[signature2.signature_hash]['framework_id'] == signature2.framework.id
|
||||
|
||||
|
||||
def test_filter_data_by_framework(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_data_by_framework(client, test_repository, test_perf_signature,
|
||||
push_stored,
|
||||
test_perf_signature_same_hash_different_framework):
|
||||
signature2 = test_perf_signature_same_hash_different_framework
|
||||
|
@ -207,8 +203,6 @@ def test_filter_data_by_framework(webapp, test_repository, test_perf_signature,
|
|||
value=0.0,
|
||||
push_timestamp=push.time)
|
||||
|
||||
client = APIClient()
|
||||
|
||||
# No filtering, return two datapoints (this behaviour actually sucks,
|
||||
# but it's "by design" for now, see bug 1265709)
|
||||
resp = client.get(reverse('performance-data-list',
|
||||
|
@ -242,41 +236,41 @@ def test_filter_data_by_framework(webapp, test_repository, test_perf_signature,
|
|||
assert datums[0]['signature_id'] == 2
|
||||
|
||||
|
||||
def test_filter_signatures_by_interval(webapp, test_repository, test_perf_signature):
|
||||
def test_filter_signatures_by_interval(client, test_repository, test_perf_signature):
|
||||
# interval for the last 24 hours, only one signature exists last updated within that timeframe
|
||||
resp = webapp.get(reverse('performance-signatures-list',
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}) + '?interval={}'.format(86400))
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json.keys()) == 1
|
||||
assert resp.json[test_perf_signature.signature_hash]['id'] == 1
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json().keys()) == 1
|
||||
assert resp.json()[test_perf_signature.signature_hash]['id'] == 1
|
||||
|
||||
|
||||
@pytest.mark.parametrize('start_date, end_date, exp_count, exp_id', [
|
||||
(SEVEN_DAYS_AGO, ONE_DAY_AGO, 1, 1),
|
||||
(THREE_DAYS_AGO, '', 1, 1),
|
||||
(ONE_DAY_AGO, '', 0, 0)])
|
||||
def test_filter_signatures_by_range(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_signatures_by_range(client, test_repository, test_perf_signature,
|
||||
start_date, end_date, exp_count, exp_id):
|
||||
# set signature last updated to 3 days ago
|
||||
test_perf_signature.last_updated = THREE_DAYS_AGO
|
||||
test_perf_signature.save()
|
||||
|
||||
resp = webapp.get(reverse('performance-signatures-list',
|
||||
resp = client.get(reverse('performance-signatures-list',
|
||||
kwargs={
|
||||
"project": test_perf_signature.repository.name
|
||||
}) + '?start_date={}&end_date={}'.format(start_date, end_date))
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json.keys()) == exp_count
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json().keys()) == exp_count
|
||||
if exp_count != 0:
|
||||
assert resp.json[test_perf_signature.signature_hash]['id'] == exp_id
|
||||
assert resp.json()[test_perf_signature.signature_hash]['id'] == exp_id
|
||||
|
||||
|
||||
@pytest.mark.parametrize('interval, exp_datums_len, exp_push_ids', [
|
||||
(86400, 1, [1]),
|
||||
(86400 * 3, 2, [2, 1])])
|
||||
def test_filter_data_by_interval(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_data_by_interval(client, test_repository, test_perf_signature,
|
||||
interval, exp_datums_len, exp_push_ids):
|
||||
# create some test data
|
||||
for (i, timestamp) in enumerate([NOW, NOW - datetime.timedelta(days=2),
|
||||
|
@ -293,8 +287,6 @@ def test_filter_data_by_interval(webapp, test_repository, test_perf_signature,
|
|||
value=i,
|
||||
push_timestamp=timestamp)
|
||||
|
||||
client = APIClient()
|
||||
|
||||
# going back interval of 1 day, should find 1 item
|
||||
resp = client.get(reverse('performance-data-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
|
@ -312,7 +304,7 @@ def test_filter_data_by_interval(webapp, test_repository, test_perf_signature,
|
|||
@pytest.mark.parametrize('start_date, end_date, exp_datums_len, exp_push_ids', [
|
||||
(SEVEN_DAYS_AGO, THREE_DAYS_AGO, 1, [3]),
|
||||
(THREE_DAYS_AGO, '', 2, [2, 1])])
|
||||
def test_filter_data_by_range(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_data_by_range(client, test_repository, test_perf_signature,
|
||||
start_date, end_date, exp_datums_len,
|
||||
exp_push_ids):
|
||||
# create some test data
|
||||
|
@ -330,8 +322,6 @@ def test_filter_data_by_range(webapp, test_repository, test_perf_signature,
|
|||
value=i,
|
||||
push_timestamp=timestamp)
|
||||
|
||||
client = APIClient()
|
||||
|
||||
resp = client.get(reverse('performance-data-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?signature_id={}&start_date={}&end_date={}'.format(
|
||||
|
@ -345,20 +335,19 @@ def test_filter_data_by_range(webapp, test_repository, test_perf_signature,
|
|||
assert datums[x]['push_id'] == exp_push_ids[x]
|
||||
|
||||
|
||||
def test_job_ids_validity(webapp, test_repository):
|
||||
resp = webapp.get(reverse('performance-data-list',
|
||||
def test_job_ids_validity(client, test_repository):
|
||||
resp = client.get(reverse('performance-data-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?job_id=1')
|
||||
assert resp.status_code == 200
|
||||
|
||||
resp = webapp.get(reverse('performance-data-list',
|
||||
resp = client.get(reverse('performance-data-list',
|
||||
kwargs={"project": test_repository.name}) +
|
||||
'?job_id=foo',
|
||||
expect_errors=True)
|
||||
'?job_id=foo')
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
def test_filter_data_by_signature(webapp, test_repository, test_perf_signature,
|
||||
def test_filter_data_by_signature(client, test_repository, test_perf_signature,
|
||||
summary_perf_signature):
|
||||
push = Push.objects.create(repository=test_repository,
|
||||
revision='abcdefghi',
|
||||
|
@ -373,8 +362,6 @@ def test_filter_data_by_signature(webapp, test_repository, test_perf_signature,
|
|||
value=i,
|
||||
push_timestamp=NOW)
|
||||
|
||||
client = APIClient()
|
||||
|
||||
# test that we get the expected value for all different permutations of
|
||||
# passing in signature_id and signature hash
|
||||
for (i, signature) in enumerate([test_perf_signature, summary_perf_signature]):
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import copy
|
||||
import datetime
|
||||
import json
|
||||
|
||||
import pytest
|
||||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from treeherder.etl.push import store_push_data
|
||||
from treeherder.model.models import (FailureClassification,
|
||||
|
@ -13,18 +13,21 @@ from treeherder.model.models import (FailureClassification,
|
|||
from treeherder.webapp.api import utils
|
||||
|
||||
|
||||
def test_push_list_basic(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_push_list_basic(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a list of ten json blobs from the jobs-list
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}))
|
||||
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
# The .json() method of the Django test client doesn't handle unicode properly on
|
||||
# Python 2, so we have to deserialize ourselves. TODO: Clean up once on Python 3.
|
||||
data = json.loads(resp.content)
|
||||
results = data['results']
|
||||
meta = data['meta']
|
||||
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(results, list)
|
||||
|
||||
assert len(results) == 10
|
||||
|
@ -47,45 +50,46 @@ def test_push_list_basic(webapp, eleven_jobs_stored, test_repository):
|
|||
})
|
||||
|
||||
|
||||
def test_push_list_bad_project(webapp, transactional_db):
|
||||
def test_push_list_bad_project(client, transactional_db):
|
||||
"""
|
||||
test that we have a sane error when the repository does not exist
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": "foo"}),
|
||||
expect_errors=True
|
||||
)
|
||||
|
||||
assert resp.status_int == 404
|
||||
assert resp.json == {"detail": "No project with name foo"}
|
||||
assert resp.status_code == 404
|
||||
assert resp.json() == {"detail": "No project with name foo"}
|
||||
|
||||
|
||||
def test_push_list_empty_push_still_show(webapp, sample_push, test_repository):
|
||||
def test_push_list_empty_push_still_show(client, sample_push, test_repository):
|
||||
"""
|
||||
test retrieving a push list, when the push has no jobs.
|
||||
should show.
|
||||
"""
|
||||
store_push_data(test_repository, sample_push)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert len(resp.json['results']) == 10
|
||||
assert resp.status_code == 200
|
||||
# The .json() method of the Django test client doesn't handle unicode properly on
|
||||
# Python 2, so we have to deserialize ourselves. TODO: Clean up once on Python 3.
|
||||
data = json.loads(resp.content)
|
||||
assert len(data['results']) == 10
|
||||
|
||||
|
||||
def test_push_list_single_short_revision(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_push_list_single_short_revision(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a push list, filtered by single short revision
|
||||
"""
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
{"revision": "45f8637cb9f7"}
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
assert resp.status_code == 200
|
||||
results = resp.json()['results']
|
||||
meta = resp.json()['meta']
|
||||
assert len(results) == 1
|
||||
assert set([rs["revision"] for rs in results]) == {"45f8637cb9f78f19cb8463ff174e81756805d8cf"}
|
||||
assert(meta == {
|
||||
|
@ -98,18 +102,18 @@ def test_push_list_single_short_revision(webapp, eleven_jobs_stored, test_reposi
|
|||
)
|
||||
|
||||
|
||||
def test_push_list_single_long_revision(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_push_list_single_long_revision(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a push list, filtered by a single long revision
|
||||
"""
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
{"revision": "45f8637cb9f78f19cb8463ff174e81756805d8cf"}
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
assert resp.status_code == 200
|
||||
results = resp.json()['results']
|
||||
meta = resp.json()['meta']
|
||||
assert len(results) == 1
|
||||
assert set([rs["revision"] for rs in results]) == {"45f8637cb9f78f19cb8463ff174e81756805d8cf"}
|
||||
assert(meta == {
|
||||
|
@ -122,7 +126,7 @@ def test_push_list_single_long_revision(webapp, eleven_jobs_stored, test_reposit
|
|||
)
|
||||
|
||||
|
||||
def test_push_list_single_long_revision_stored_long(webapp, sample_push, test_repository):
|
||||
def test_push_list_single_long_revision_stored_long(client, sample_push, test_repository):
|
||||
"""
|
||||
test retrieving a push list with store long revision, filtered by a single long revision
|
||||
"""
|
||||
|
@ -133,13 +137,13 @@ def test_push_list_single_long_revision_stored_long(webapp, sample_push, test_re
|
|||
push["revisions"][0]["revision"] = long_revision
|
||||
store_push_data(test_repository, [push])
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
{"revision": long_revision}
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
assert resp.status_code == 200
|
||||
results = resp.json()['results']
|
||||
meta = resp.json()['meta']
|
||||
assert len(results) == 1
|
||||
assert set([ph["revision"] for ph in results]) == {sample_push[0]['revision']}
|
||||
assert(meta == {
|
||||
|
@ -152,18 +156,21 @@ def test_push_list_single_long_revision_stored_long(webapp, sample_push, test_re
|
|||
)
|
||||
|
||||
|
||||
def test_push_list_filter_by_revision(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_push_list_filter_by_revision(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a push list, filtered by a revision range
|
||||
"""
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
{"fromchange": "130965d3df6c", "tochange": "f361dcb60bbe"}
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
assert resp.status_code == 200
|
||||
# The .json() method of the Django test client doesn't handle unicode properly on
|
||||
# Python 2, so we have to deserialize ourselves. TODO: Clean up once on Python 3.
|
||||
data = json.loads(resp.content)
|
||||
results = data['results']
|
||||
meta = data['meta']
|
||||
assert len(results) == 4
|
||||
assert set([rs["revision"] for rs in results]) == {
|
||||
u'130965d3df6c9a1093b4725f3b877eaef80d72bc',
|
||||
|
@ -183,7 +190,7 @@ def test_push_list_filter_by_revision(webapp, eleven_jobs_stored, test_repositor
|
|||
)
|
||||
|
||||
|
||||
def test_push_list_filter_by_date(webapp,
|
||||
def test_push_list_filter_by_date(client,
|
||||
test_repository,
|
||||
sample_push):
|
||||
"""
|
||||
|
@ -197,13 +204,16 @@ def test_push_list_filter_by_date(webapp,
|
|||
|
||||
store_push_data(test_repository, sample_push)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
{"startdate": "2013-08-10", "enddate": "2013-08-13"}
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
meta = resp.json['meta']
|
||||
assert resp.status_code == 200
|
||||
# The .json() method of the Django test client doesn't handle unicode properly on
|
||||
# Python 2, so we have to deserialize ourselves. TODO: Clean up once on Python 3.
|
||||
data = json.loads(resp.content)
|
||||
results = data['results']
|
||||
meta = data['meta']
|
||||
assert len(results) == 4
|
||||
assert set([rs["revision"] for rs in results]) == {
|
||||
u'ce17cad5d554cfffddee13d1d8421ae9ec5aad82',
|
||||
|
@ -230,7 +240,7 @@ def test_push_list_filter_by_date(webapp,
|
|||
('id__gt=2', [3]),
|
||||
('id__gte=2', [2, 3])
|
||||
])
|
||||
def test_push_list_filter_by_id(webapp,
|
||||
def test_push_list_filter_by_id(client,
|
||||
test_repository,
|
||||
filter_param,
|
||||
exp_ids):
|
||||
|
@ -244,16 +254,16 @@ def test_push_list_filter_by_id(webapp,
|
|||
revision=revision,
|
||||
author=author,
|
||||
time=datetime.datetime.now())
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}) +
|
||||
'?' + filter_param
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
results = resp.json['results']
|
||||
assert resp.status_code == 200
|
||||
results = resp.json()['results']
|
||||
assert set([result['id'] for result in results]) == set(exp_ids)
|
||||
|
||||
|
||||
def test_push_list_id_in(webapp, test_repository):
|
||||
def test_push_list_id_in(client, test_repository):
|
||||
"""
|
||||
test the id__in parameter
|
||||
"""
|
||||
|
@ -264,40 +274,40 @@ def test_push_list_id_in(webapp, test_repository):
|
|||
revision=revision,
|
||||
author=author,
|
||||
time=datetime.datetime.now())
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}) +
|
||||
'?id__in=1,2'
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
results = resp.json['results']
|
||||
results = resp.json()['results']
|
||||
assert len(results) == 2 # would have 3 if filter not applied
|
||||
assert set([result['id'] for result in results]) == set([1, 2])
|
||||
|
||||
# test that we do something sane if invalid list passed in
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}) +
|
||||
'?id__in=1,2,foobar',
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 400
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
def test_push_list_bad_count(webapp, test_repository):
|
||||
def test_push_list_bad_count(client, test_repository):
|
||||
"""
|
||||
test for graceful error when passed an invalid count value
|
||||
"""
|
||||
bad_count = "ZAP%n%s%n%s"
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}),
|
||||
params={'count': bad_count}, expect_errors=True)
|
||||
data={'count': bad_count}
|
||||
)
|
||||
|
||||
assert resp.status_code == 400
|
||||
assert resp.json == {'detail': 'Valid count value required'}
|
||||
assert resp.json() == {'detail': 'Valid count value required'}
|
||||
|
||||
|
||||
def test_push_author(webapp, test_repository):
|
||||
def test_push_author(client, test_repository):
|
||||
"""
|
||||
test the author parameter
|
||||
"""
|
||||
|
@ -309,28 +319,28 @@ def test_push_author(webapp, test_repository):
|
|||
author=author,
|
||||
time=datetime.datetime.now())
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}) +
|
||||
'?author=foo@bar.com'
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
results = resp.json['results']
|
||||
results = resp.json()['results']
|
||||
assert len(results) == 2 # would have 3 if filter not applied
|
||||
assert set([result['id'] for result in results]) == set([1, 2])
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name}) +
|
||||
'?author=foo2@bar.com'
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
results = resp.json['results']
|
||||
results = resp.json()['results']
|
||||
assert len(results) == 1 # would have 3 if filter not applied
|
||||
assert results[0]['id'] == 3
|
||||
|
||||
|
||||
def test_push_list_without_jobs(webapp,
|
||||
def test_push_list_without_jobs(client,
|
||||
test_repository,
|
||||
sample_push):
|
||||
"""
|
||||
|
@ -338,16 +348,19 @@ def test_push_list_without_jobs(webapp,
|
|||
"""
|
||||
store_push_data(test_repository, sample_push)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-list", kwargs={"project": test_repository.name})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert resp.status_code == 200
|
||||
|
||||
results = resp.json['results']
|
||||
# The .json() method of the Django test client doesn't handle unicode properly on
|
||||
# Python 2, so we have to deserialize ourselves. TODO: Clean up once on Python 3.
|
||||
data = json.loads(resp.content)
|
||||
results = data['results']
|
||||
assert len(results) == 10
|
||||
assert all([('platforms' not in result) for result in results])
|
||||
|
||||
meta = resp.json['meta']
|
||||
meta = data['meta']
|
||||
|
||||
assert meta == {
|
||||
u'count': len(results),
|
||||
|
@ -356,7 +369,7 @@ def test_push_list_without_jobs(webapp,
|
|||
}
|
||||
|
||||
|
||||
def test_push_detail(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_push_detail(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
test retrieving a push from the push-detail
|
||||
endpoint.
|
||||
|
@ -364,49 +377,46 @@ def test_push_detail(webapp, eleven_jobs_stored, test_repository):
|
|||
|
||||
push = Push.objects.get(id=1)
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-detail",
|
||||
kwargs={"project": test_repository.name, "pk": 1})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, dict)
|
||||
assert resp.json["id"] == push.id
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), dict)
|
||||
assert resp.json()["id"] == push.id
|
||||
|
||||
|
||||
def test_push_detail_not_found(webapp, test_repository):
|
||||
def test_push_detail_not_found(client, test_repository):
|
||||
"""
|
||||
test retrieving a HTTP 404 from the push-detail
|
||||
endpoint.
|
||||
"""
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-detail",
|
||||
kwargs={"project": test_repository.name, "pk": -32767}),
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 404
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_push_detail_bad_project(webapp, test_repository):
|
||||
def test_push_detail_bad_project(client, test_repository):
|
||||
"""
|
||||
test retrieving a HTTP 404 from the push-detail
|
||||
endpoint.
|
||||
"""
|
||||
bad_pk = -32767
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-detail",
|
||||
kwargs={"project": "foo", "pk": bad_pk}),
|
||||
expect_errors=True
|
||||
)
|
||||
assert resp.status_int == 404
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_push_cancel_all(failure_classifications,
|
||||
def test_push_cancel_all(client, failure_classifications,
|
||||
push_with_three_jobs, pulse_action_consumer,
|
||||
test_repository, test_user):
|
||||
"""
|
||||
Issue cancellation of a push with three unfinished jobs.
|
||||
"""
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
# Ensure all jobs are pending..
|
||||
|
@ -415,7 +425,8 @@ def test_push_cancel_all(failure_classifications,
|
|||
|
||||
url = reverse("push-cancel-all",
|
||||
kwargs={"project": test_repository.name, "pk": push_with_three_jobs.id})
|
||||
client.post(url)
|
||||
resp = client.post(url)
|
||||
assert resp.status_code == 200
|
||||
|
||||
# Ensure all jobs are cancelled..
|
||||
for job in Job.objects.all():
|
||||
|
@ -430,7 +441,7 @@ def test_push_cancel_all(failure_classifications,
|
|||
assert content['project'] == test_repository.name
|
||||
|
||||
|
||||
def test_push_status(webapp, test_job, test_user):
|
||||
def test_push_status(client, test_job, test_user):
|
||||
"""
|
||||
test retrieving the status of a push
|
||||
"""
|
||||
|
@ -439,23 +450,23 @@ def test_push_status(webapp, test_job, test_user):
|
|||
|
||||
push = test_job.push
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-status",
|
||||
kwargs={"project": push.repository.name, "pk": push.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, dict)
|
||||
assert resp.json == {'success': 1}
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), dict)
|
||||
assert resp.json() == {'success': 1}
|
||||
|
||||
JobNote.objects.create(job=test_job,
|
||||
failure_classification=failure_classification,
|
||||
user=test_user,
|
||||
text='A random note')
|
||||
|
||||
resp = webapp.get(
|
||||
resp = client.get(
|
||||
reverse("push-status",
|
||||
kwargs={"project": push.repository.name, "pk": push.id})
|
||||
)
|
||||
assert resp.status_int == 200
|
||||
assert isinstance(resp.json, dict)
|
||||
assert resp.json == {}
|
||||
assert resp.status_code == 200
|
||||
assert isinstance(resp.json(), dict)
|
||||
assert resp.json() == {}
|
||||
|
|
|
@ -5,7 +5,7 @@ from treeherder.model.models import RunnableJob
|
|||
|
||||
|
||||
@patch('treeherder.etl.runnable_jobs._taskcluster_runnable_jobs', return_value=[])
|
||||
def test_runnable_jobs_api(taskcluster_runnable_jobs, webapp, test_job):
|
||||
def test_runnable_jobs_api(taskcluster_runnable_jobs, client, test_job):
|
||||
RunnableJob.objects.create(
|
||||
build_platform=test_job.build_platform,
|
||||
machine_platform=test_job.machine_platform,
|
||||
|
@ -17,8 +17,9 @@ def test_runnable_jobs_api(taskcluster_runnable_jobs, webapp, test_job):
|
|||
repository=test_job.repository)
|
||||
url = reverse("runnable_jobs-list",
|
||||
kwargs={"project": test_job.repository.name})
|
||||
resp = webapp.get(url).json
|
||||
assert resp == {
|
||||
resp = client.get(url)
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == {
|
||||
'meta': {
|
||||
'count': 1,
|
||||
'offset': 0,
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from tests.autoclassify.utils import (create_failure_lines,
|
||||
create_text_log_errors,
|
||||
|
@ -18,13 +17,12 @@ from treeherder.model.models import (BugJobMap,
|
|||
from treeherder.model.search import TestFailureLine as _TestFailureLine
|
||||
|
||||
|
||||
def test_get_error(text_log_errors_failure_lines):
|
||||
def test_get_error(client, text_log_errors_failure_lines):
|
||||
"""
|
||||
test getting a single failure line
|
||||
"""
|
||||
text_log_errors, _ = text_log_errors_failure_lines
|
||||
|
||||
client = APIClient()
|
||||
resp = client.get(
|
||||
reverse("text-log-error-detail", kwargs={"pk": text_log_errors[0].id}))
|
||||
|
||||
|
@ -43,13 +41,13 @@ def test_get_error(text_log_errors_failure_lines):
|
|||
assert set(data["metadata"].keys()) == set(exp_meta_keys)
|
||||
|
||||
|
||||
def test_update_error_verify(test_repository,
|
||||
def test_update_error_verify(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -64,7 +62,7 @@ def test_update_error_verify(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -81,14 +79,14 @@ def test_update_error_verify(test_repository,
|
|||
assert es_line.best_is_verified
|
||||
|
||||
|
||||
def test_update_error_replace(test_repository,
|
||||
def test_update_error_replace(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
|
@ -104,7 +102,7 @@ def test_update_error_replace(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -123,7 +121,8 @@ def test_update_error_replace(test_repository,
|
|||
assert error_line.matches.get(classified_failure_id=classified_failures[1].id).matcher == expected_matcher
|
||||
|
||||
|
||||
def test_update_error_mark_job(test_job,
|
||||
def test_update_error_mark_job(client,
|
||||
test_job,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -132,7 +131,6 @@ def test_update_error_mark_job(test_job,
|
|||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
bug = Bugscache.objects.create(id=1234,
|
||||
|
@ -150,7 +148,7 @@ def test_update_error_mark_job(test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("text-log-error-detail", kwargs={"pk": text_log_error.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -173,14 +171,14 @@ def test_update_error_mark_job(test_job,
|
|||
assert job_bugs[0].bug_id == bug.id
|
||||
|
||||
|
||||
def test_update_error_mark_job_with_human_note(test_job,
|
||||
def test_update_error_mark_job_with_human_note(client,
|
||||
test_job,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures, test_user):
|
||||
|
||||
text_log_errors, _ = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
JobNote.objects.create(job=test_job,
|
||||
|
@ -193,7 +191,7 @@ def test_update_error_mark_job_with_human_note(test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -205,7 +203,8 @@ def test_update_error_mark_job_with_human_note(test_job,
|
|||
assert note.user == test_user
|
||||
|
||||
|
||||
def test_update_error_line_mark_job_with_auto_note(test_job,
|
||||
def test_update_error_line_mark_job_with_auto_note(client,
|
||||
test_job,
|
||||
mock_autoclassify_jobs_true,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
|
@ -214,7 +213,6 @@ def test_update_error_line_mark_job_with_auto_note(test_job,
|
|||
text_log_errors, _ = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
JobNote.objects.create(job=test_job,
|
||||
|
@ -225,7 +223,7 @@ def test_update_error_line_mark_job_with_auto_note(test_job,
|
|||
body = {"best_classification": classified_failures[1].id}
|
||||
|
||||
resp = client.put(reverse("text-log-error-detail", kwargs={"pk": text_log_error.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -243,7 +241,8 @@ def test_update_error_line_mark_job_with_auto_note(test_job,
|
|||
assert notes[1].text == "note"
|
||||
|
||||
|
||||
def test_update_errors(mock_autoclassify_jobs_true,
|
||||
def test_update_errors(client,
|
||||
mock_autoclassify_jobs_true,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
|
@ -254,7 +253,6 @@ def test_update_errors(mock_autoclassify_jobs_true,
|
|||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
lines = [(test_line, {}),
|
||||
|
@ -279,7 +277,7 @@ def test_update_errors(mock_autoclassify_jobs_true,
|
|||
body = [{"id": failure_line.id,
|
||||
"best_classification": classified_failures[1].id}
|
||||
for failure_line in failure_lines]
|
||||
resp = client.put(reverse("text-log-error-list"), body, format="json")
|
||||
resp = client.put(reverse("text-log-error-list"), body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -300,11 +298,10 @@ def test_update_errors(mock_autoclassify_jobs_true,
|
|||
assert note.user == test_user
|
||||
|
||||
|
||||
def test_update_error_ignore(test_job, text_log_errors_failure_lines,
|
||||
def test_update_error_ignore(client, test_job, text_log_errors_failure_lines,
|
||||
classified_failures, test_user):
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
@ -321,7 +318,7 @@ def test_update_error_ignore(test_job, text_log_errors_failure_lines,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": text_log_error.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -334,7 +331,8 @@ def test_update_error_ignore(test_job, text_log_errors_failure_lines,
|
|||
assert text_log_error.metadata.best_is_verified
|
||||
|
||||
|
||||
def test_update_error_all_ignore_mark_job(test_job,
|
||||
def test_update_error_all_ignore_mark_job(client,
|
||||
test_job,
|
||||
mock_autoclassify_jobs_true,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
|
@ -343,7 +341,6 @@ def test_update_error_all_ignore_mark_job(test_job,
|
|||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
job_failure_lines = [line for line in failure_lines if
|
||||
|
@ -367,7 +364,7 @@ def test_update_error_all_ignore_mark_job(test_job,
|
|||
body = {"best_classification": None}
|
||||
|
||||
resp = client.put(reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -384,7 +381,8 @@ def test_update_error_all_ignore_mark_job(test_job,
|
|||
assert JobNote.objects.count() == 1
|
||||
|
||||
|
||||
def test_update_error_partial_ignore_mark_job(test_job,
|
||||
def test_update_error_partial_ignore_mark_job(client,
|
||||
test_job,
|
||||
mock_autoclassify_jobs_true,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
|
@ -393,7 +391,6 @@ def test_update_error_partial_ignore_mark_job(test_job,
|
|||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
for i, (error_line, failure_line) in enumerate(zip(text_log_errors, failure_lines)):
|
||||
|
@ -404,7 +401,7 @@ def test_update_error_partial_ignore_mark_job(test_job,
|
|||
body = {"best_classification": None if i == 0 else classified_failures[0].id}
|
||||
|
||||
resp = client.put(reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -428,7 +425,8 @@ def test_update_error_partial_ignore_mark_job(test_job,
|
|||
assert note.user == test_user
|
||||
|
||||
|
||||
def test_update_error_verify_bug(test_repository,
|
||||
def test_update_error_verify_bug(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -436,7 +434,6 @@ def test_update_error_verify_bug(test_repository,
|
|||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -454,7 +451,7 @@ def test_update_error_verify_bug(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -471,7 +468,8 @@ def test_update_error_verify_bug(test_repository,
|
|||
assert es_line.best_is_verified
|
||||
|
||||
|
||||
def test_update_error_verify_new_bug(test_repository,
|
||||
def test_update_error_verify_new_bug(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -479,7 +477,6 @@ def test_update_error_verify_new_bug(test_repository,
|
|||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -495,7 +492,7 @@ def test_update_error_verify_new_bug(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -510,7 +507,8 @@ def test_update_error_verify_new_bug(test_repository,
|
|||
assert error_line.metadata.best_classification.bug_number == 78910
|
||||
|
||||
|
||||
def test_update_error_verify_ignore_now(test_repository,
|
||||
def test_update_error_verify_ignore_now(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -518,7 +516,6 @@ def test_update_error_verify_ignore_now(test_repository,
|
|||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -534,7 +531,7 @@ def test_update_error_verify_ignore_now(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -547,7 +544,8 @@ def test_update_error_verify_ignore_now(test_repository,
|
|||
assert error_line.metadata.best_is_verified
|
||||
|
||||
|
||||
def test_update_error_change_bug(test_repository,
|
||||
def test_update_error_change_bug(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -555,7 +553,6 @@ def test_update_error_change_bug(test_repository,
|
|||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -572,7 +569,7 @@ def test_update_error_change_bug(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
@ -588,7 +585,8 @@ def test_update_error_change_bug(test_repository,
|
|||
assert error_line.metadata.best_classification.bug_number == 78910
|
||||
|
||||
|
||||
def test_update_error_bug_change_cf(test_repository,
|
||||
def test_update_error_bug_change_cf(client,
|
||||
test_repository,
|
||||
text_log_errors_failure_lines,
|
||||
classified_failures,
|
||||
test_user):
|
||||
|
@ -596,7 +594,6 @@ def test_update_error_bug_change_cf(test_repository,
|
|||
MatcherManager.register_detector(ManualDetector)
|
||||
|
||||
text_log_errors, failure_lines = text_log_errors_failure_lines
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=test_user)
|
||||
|
||||
failure_line = failure_lines[0]
|
||||
|
@ -616,7 +613,7 @@ def test_update_error_bug_change_cf(test_repository,
|
|||
|
||||
resp = client.put(
|
||||
reverse("text-log-error-detail", kwargs={"pk": error_line.id}),
|
||||
body, format="json")
|
||||
body)
|
||||
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
import pytest
|
||||
from webtest.app import TestApp
|
||||
|
||||
from treeherder.config import wsgi
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def webapp():
|
||||
"""
|
||||
we can use this object to test calls to a wsgi application
|
||||
"""
|
||||
return TestApp(wsgi.application)
|
|
@ -1,7 +1,7 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
|
||||
|
||||
def test_graphql_options(webapp, eleven_jobs_stored, test_repository):
|
||||
def test_graphql_options(client, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
Retrieve a GraphQL set of the Options and OptionCollectionHashes.
|
||||
"""
|
||||
|
@ -9,9 +9,9 @@ def test_graphql_options(webapp, eleven_jobs_stored, test_repository):
|
|||
reverse("graphql"),
|
||||
'query=query{allOptionCollections{optionCollectionHash option{name}}}'
|
||||
)
|
||||
resp = webapp.post(url)
|
||||
assert resp.status_int == 200
|
||||
response_dict = resp.json
|
||||
resp = client.post(url)
|
||||
assert resp.status_code == 200
|
||||
response_dict = resp.json()
|
||||
expected = {'data': {
|
||||
'allOptionCollections': [
|
||||
{'option': {'name': 'opt'},
|
||||
|
@ -25,7 +25,7 @@ def test_graphql_options(webapp, eleven_jobs_stored, test_repository):
|
|||
assert expected == response_dict
|
||||
|
||||
|
||||
def test_graphql_push_with_jobs(webapp, sample_push, eleven_jobs_stored, test_repository):
|
||||
def test_graphql_push_with_jobs(client, sample_push, eleven_jobs_stored, test_repository):
|
||||
"""
|
||||
Retrieve a GraphQL set of a push and its jobs.
|
||||
"""
|
||||
|
@ -74,9 +74,9 @@ def test_graphql_push_with_jobs(webapp, sample_push, eleven_jobs_stored, test_re
|
|||
}}
|
||||
""".format(revision=sample_push[0]["revision"])
|
||||
url = "{}?{}".format(reverse("graphql"), 'query={}'.format(query))
|
||||
resp = webapp.post(url)
|
||||
assert resp.status_int == 200
|
||||
response_dict = resp.json
|
||||
resp = client.post(url)
|
||||
assert resp.status_code == 200
|
||||
response_dict = resp.json()
|
||||
expected = {'data': {'allPushes': {'edges': [{'node': {'jobs': {
|
||||
'edges': [{'node': {'buildPlatform': {'platform': 'b2g-emu-jb'},
|
||||
'failureClassification': {
|
||||
|
|
Загрузка…
Ссылка в новой задаче