from unittest.mock import MagicMock import application import pytest from labelaudit.logic import audit_persistence from labelaudit.logic import start_audit from labelaudit.logic.result import Result def build_client(): return application.app.test_client() def get_response_content(resp): data = resp.get_data() content = data.decode('utf8') return content @pytest.fixture def label_audit(): return { 'auditStatus': 'requested', 'initiatedById': 456, 'reportLocation': 'over-there', 'createdTimestamp': '1304-02-11 00:03:53', 'updatedTimestamp': '1307-03-12 01:23:45', 'vendorId': 123, 'youtubeAuditId': 123 } def test_hello(client): resp = client.get('/hello/') assert resp.status_code == 200 def test_start_label_audit_bad_params(client, monkeypatch): monkeypatch.setattr(start_audit, 'start_label_audit', MagicMock()) resp = client.post('/label_audit') assert resp.status_code == 400 assert get_response_content(resp).find('vendor_id') > 0 assert not start_audit.start_label_audit.called resp = client.post('/label_audit?vendor_id=abc') assert resp.status_code == 400 assert get_response_content(resp).find('vendor_id') > 0 assert not start_audit.start_label_audit.called resp = client.post('/label_audit?vendor_id=123') assert resp.status_code == 400 assert get_response_content(resp).find('user_id') > 0 assert not start_audit.start_label_audit.called resp = client.post('/label_audit?vendor_id=123') assert resp.status_code == 400 assert get_response_content(resp).find('user_id') > 0 assert not start_audit.start_label_audit.called resp = client.post('/label_audit?vendor_id=123&user_id=abc') assert resp.status_code == 400 assert get_response_content(resp).find('user_id') > 0 assert not start_audit.start_label_audit.called def test_start_label_audit_fail(monkeypatch): result = Result(errors={'foo': 'bar'}, status=400) monkeypatch.setattr( start_audit, 'start_label_audit', MagicMock(return_value=result)) c = build_client() resp = c.post('/label_audit?vendor_id=123&user_id=456') assert resp.status_code == 400 def test_start_label_audit_pass(monkeypatch, label_audit): result = Result(message=label_audit, status=201) monkeypatch.setattr( start_audit, 'start_label_audit', MagicMock(return_value=result)) c = build_client() resp = c.post('/label_audit?vendor_id=123&user_id=456') assert resp.status_code == 201 def test_get_label_audit_bad_params(monkeypatch): monkeypatch.setattr(audit_persistence, 'fetch', MagicMock()) c = build_client() resp = c.get('/label_audit/abc') assert resp.status_code == 404 assert not audit_persistence.fetch.called def test_get_label_audit_fail(monkeypatch): result = Result(errors={'foo': 'bar'}, status=400) monkeypatch.setattr( audit_persistence, 'fetch', MagicMock(return_value=result)) c = build_client() resp = c.get('/label_audit/123') assert resp.status_code == 400 def test_get_label_audit_pass(monkeypatch, label_audit): result = Result(message=label_audit, status=200) monkeypatch.setattr( audit_persistence, 'fetch', MagicMock(return_value=result)) c = build_client() resp = c.get('/label_audit/123') assert resp.status_code == 200 def test_get_label_audits_fail(monkeypatch): result = Result(errors={'foo': 'bar'}, status=400) monkeypatch.setattr( audit_persistence, 'fetch_all', MagicMock(return_value=result)) c = build_client() resp = c.get('/label_audit') assert resp.status_code == 400 def test_get_label_audits_pass(monkeypatch): audits_data = { 'audits': [], 'total_records': 0 } result = Result(message=audits_data, status=200) monkeypatch.setattr( audit_persistence, 'fetch_all', MagicMock(return_value=result)) c = build_client() resp = c.get('/label_audit?vendor_id=123') assert resp.status_code == 200