Coverage for tests/publisher/tests_account_snaps_metrics.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import json
2import responses
3from tests.publisher.endpoint_testing import BaseTestCases
5# Make sure tests fail on stray responses.
6responses.mock.assert_all_requests_are_fired = True
9class AccountSnapsMetricsNotAuth(BaseTestCases.EndpointLoggedOut):
10 def setUp(self):
11 endpoint_url = "/snaps/metrics/json"
12 super().setUp(
13 snap_name=None, endpoint_url=endpoint_url, method_endpoint="POST"
14 )
17class AccountSnapsMetrics(BaseTestCases.BaseAppTesting):
18 def setUp(self):
19 api_url = "https://dashboard.snapcraft.io/dev/api/snaps/metrics"
20 endpoint_url = "/snaps/metrics/json"
21 super().setUp(
22 snap_name=None, endpoint_url=endpoint_url, api_url=api_url
23 )
24 self.authorization = self._log_in(self.client)
26 @responses.activate
27 def test_metrics(self):
28 metrics_payload = {
29 "metrics": [
30 {
31 "snap_id": "1",
32 "status": "OK",
33 "series": [
34 {"values": [0, 3], "name": "new"},
35 {"values": [2, 3], "name": "lost"},
36 {"values": [9, 6], "name": "continued"},
37 ],
38 "buckets": ["2018-04-13", "2018-04-20"],
39 },
40 {
41 "snap_id": "2",
42 "status": "NODATA",
43 "series": [],
44 "buckets": [],
45 },
46 ]
47 }
49 responses.add(
50 responses.POST, self.api_url, json=metrics_payload, status=200
51 )
53 payload = {"1": "test1", "2": "test2"}
54 headers = {"content-type": "application/json"}
55 response = self.client.post(
56 self.endpoint_url, data=json.dumps(payload), headers=headers
57 )
59 expected_response = {
60 "buckets": ["2018-04-13", "2018-04-20"],
61 "snaps": [
62 {
63 "id": "1",
64 "name": None,
65 "series": [
66 {"name": "new", "values": [0, 3]},
67 {"name": "lost", "values": [2, 3]},
68 {"name": "continued", "values": [9, 6]},
69 ],
70 }
71 ],
72 }
74 self.assertEqual(200, response.status_code)
75 self.assertEqual(expected_response, response.json)
76 self.assertEqual(1, len(responses.calls))
77 called = responses.calls[0]
78 self.assertEqual(self.api_url, called.request.url)
79 self.assertEqual(
80 self.authorization, called.request.headers.get("Authorization")
81 )
83 @responses.activate
84 def test_metrics_no_payload(self):
85 headers = {"content-type": "application/json"}
86 response = self.client.post(self.endpoint_url, headers=headers)
88 expected_response = {"error": "Please provide a list of snaps"}
90 self.assertEqual(500, response.status_code)
91 self.assertEqual(expected_response, response.json)
93 @responses.activate
94 def test_metrics_bad_id_payload(self):
95 headers = {"content-type": "application/json"}
97 metrics_payload = {
98 "error_list": [{"message": "Error", "code": "invalid"}]
99 }
101 responses.add(
102 responses.POST, self.api_url, json=metrics_payload, status=400
103 )
105 payload = {"badid": "badname"}
106 response = self.client.post(
107 self.endpoint_url, data=json.dumps(payload), headers=headers
108 )
110 expected_response = {
111 "error": "An error occured while fetching metrics"
112 }
114 self.assertEqual(500, response.status_code)
115 self.assertEqual(expected_response, response.json)