Test returning notifications by "?status=failed"

Check that all failure states are returned by asking for
notifications of type "failure".
This commit is contained in:
Paul Craig
2016-11-25 14:55:45 +00:00
parent 57a0d7295d
commit df7450698c
3 changed files with 30 additions and 4 deletions

View File

@@ -309,6 +309,7 @@ def _filter_query(query, filter_dict=None):
# filter by status # filter by status
statuses = multidict.getlist('status') statuses = multidict.getlist('status')
if statuses: if statuses:
statuses = Notification.substitute_status(statuses)
query = query.filter(Notification.status.in_(statuses)) query = query.filter(Notification.status.in_(statuses))
# filter by template # filter by template

View File

@@ -8,8 +8,6 @@ import pytest
from freezegun import freeze_time from freezegun import freeze_time
from sqlalchemy.exc import SQLAlchemyError, IntegrityError from sqlalchemy.exc import SQLAlchemyError, IntegrityError
from app import db
from app.models import ( from app.models import (
Notification, Notification,
NotificationHistory, NotificationHistory,
@@ -17,6 +15,7 @@ from app.models import (
NotificationStatistics, NotificationStatistics,
TemplateStatistics, TemplateStatistics,
NOTIFICATION_STATUS_TYPES, NOTIFICATION_STATUS_TYPES,
NOTIFICATION_STATUS_TYPES_FAILED,
KEY_TYPE_NORMAL, KEY_TYPE_NORMAL,
KEY_TYPE_TEAM, KEY_TYPE_TEAM,
KEY_TYPE_TEST KEY_TYPE_TEST
@@ -683,7 +682,10 @@ def test_get_all_notifications_for_job_by_status(notify_db, notify_db_session, s
assert len(notifications().items) == len(NOTIFICATION_STATUS_TYPES) assert len(notifications().items) == len(NOTIFICATION_STATUS_TYPES)
for status in NOTIFICATION_STATUS_TYPES: for status in NOTIFICATION_STATUS_TYPES:
assert len(notifications(filter_dict={'status': status}).items) == 1 if status == 'failed':
assert len(notifications(filter_dict={'status': status}).items) == len(NOTIFICATION_STATUS_TYPES_FAILED)
else:
assert len(notifications(filter_dict={'status': status}).items) == 1
assert len(notifications(filter_dict={'status': NOTIFICATION_STATUS_TYPES[:3]}).items) == 3 assert len(notifications(filter_dict={'status': NOTIFICATION_STATUS_TYPES[:3]}).items) == 3

View File

@@ -184,7 +184,30 @@ def test_get_all_notifications_filter_by_multiple_statuses(client, notify_db, no
def test_get_all_notifications_filter_by_failed_status(client, notify_db, notify_db_session): def test_get_all_notifications_filter_by_failed_status(client, notify_db, notify_db_session):
pass created_notification = create_sample_notification(notify_db, notify_db_session, status="created")
failed_notifications = [
create_sample_notification(notify_db, notify_db_session, status=_status)
for _status in ["technical-failure", "temporary-failure", "permanent-failure"]
]
auth_header = create_authorization_header(service_id=created_notification.service_id)
response = client.get(
path='/v2/notifications?status=failed',
headers=[('Content-Type', 'application/json'), auth_header])
json_response = json.loads(response.get_data(as_text=True))
assert response.status_code == 200
assert response.headers['Content-type'] == "application/json"
assert json_response['links']['current'] == "/v2/notifications?status=failed"
assert 'next' in json_response['links'].keys()
assert len(json_response['notifications']) == 3
returned_notification_ids = [n['id'] for n in json_response['notifications']]
for _id in [_notification.id for _notification in failed_notifications]:
assert str(_id) in returned_notification_ids
assert created_notification.id not in returned_notification_ids
def test_get_all_notifications_filter_by_id(client, notify_db, notify_db_session): def test_get_all_notifications_filter_by_id(client, notify_db, notify_db_session):