Hide keyboard shortcuts

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 

4 

5# Make sure tests fail on stray responses. 

6responses.mock.assert_all_requests_are_fired = True 

7 

8 

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 ) 

15 

16 

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) 

25 

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 } 

48 

49 responses.add( 

50 responses.POST, self.api_url, json=metrics_payload, status=200 

51 ) 

52 

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 ) 

58 

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 } 

73 

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 ) 

82 

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) 

87 

88 expected_response = {"error": "Please provide a list of snaps"} 

89 

90 self.assertEqual(500, response.status_code) 

91 self.assertEqual(expected_response, response.json) 

92 

93 @responses.activate 

94 def test_metrics_bad_id_payload(self): 

95 headers = {"content-type": "application/json"} 

96 

97 metrics_payload = { 

98 "error_list": [{"message": "Error", "code": "invalid"}] 

99 } 

100 

101 responses.add( 

102 responses.POST, self.api_url, json=metrics_payload, status=400 

103 ) 

104 

105 payload = {"badid": "badname"} 

106 response = self.client.post( 

107 self.endpoint_url, data=json.dumps(payload), headers=headers 

108 ) 

109 

110 expected_response = { 

111 "error": "An error occured while fetching metrics" 

112 } 

113 

114 self.assertEqual(500, response.status_code) 

115 self.assertEqual(expected_response, response.json)