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

65 statements  

« prev     ^ index     » next       coverage.py v7.10.2, created at 2025-08-05 22:06 +0000

1from flask import 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 AccountSnapsNotAuth(BaseTestCases.EndpointLoggedOut): 

10 def setUp(self): 

11 endpoint_url = "/snaps/api/snap-count" 

12 

13 super().setUp(snap_name=None, endpoint_url=endpoint_url) 

14 

15 

16class AccountSnapsPage(BaseTestCases.EndpointLoggedInErrorHandling): 

17 def setUp(self): 

18 api_url = "https://dashboard.snapcraft.io/dev/api/account" 

19 endpoint_url = "/snaps/api/snap-count" 

20 

21 super().setUp( 

22 snap_name=None, 

23 endpoint_url=endpoint_url, 

24 method_endpoint="GET", 

25 api_url=api_url, 

26 method_api="GET", 

27 ) 

28 

29 @responses.activate 

30 def test_no_snaps(self): 

31 payload = {"snaps": {"16": {}}} 

32 responses.add(responses.GET, self.api_url, json=payload, status=200) 

33 

34 response = self.client.get("/snaps/api/snap-count") 

35 self.assertEqual(200, response.status_code) 

36 # Add pyQuery basic context checks 

37 

38 self.assertEqual(1, len(responses.calls)) 

39 called = responses.calls[0] 

40 self.assertEqual(self.api_url, called.request.url) 

41 self.assertEqual( 

42 self.authorization, called.request.headers.get("Authorization") 

43 ) 

44 

45 assert response.status_code == 200 

46 data = json.loads(response.get_data()) 

47 assert data["count"] == 0 

48 

49 @responses.activate 

50 def test_uploaded_snaps(self): 

51 payload = { 

52 "snaps": { 

53 "16": { 

54 "test": { 

55 "status": "Approved", 

56 "snap-name": "test", 

57 "latest_revisions": [ 

58 { 

59 "test": "test", 

60 "since": "2018-01-01T00:00:00Z", 

61 "channels": [], 

62 } 

63 ], 

64 } 

65 } 

66 } 

67 } 

68 responses.add(responses.GET, self.api_url, json=payload, status=200) 

69 

70 response = self.client.get("/snaps/api/snap-count") 

71 self.assertEqual(200, response.status_code) 

72 # Add pyQuery basic context checks 

73 

74 self.assertEqual(1, len(responses.calls)) 

75 called = responses.calls[0] 

76 self.assertEqual(self.api_url, called.request.url) 

77 self.assertEqual( 

78 self.authorization, called.request.headers.get("Authorization") 

79 ) 

80 

81 assert response.status_code == 200 

82 data = json.loads(response.get_data()) 

83 assert data["count"] == 1 

84 

85 @responses.activate 

86 def test_uploaded_snaps_registered_snaps(self): 

87 payload = { 

88 "snaps": { 

89 "16": { 

90 "test": { 

91 "status": "Approved", 

92 "snap-name": "test", 

93 "latest_revisions": [ 

94 { 

95 "test": "test", 

96 "since": "2018-01-01T00:00:00Z", 

97 "channels": [], 

98 } 

99 ], 

100 }, 

101 "test2": { 

102 "status": "Approved", 

103 "snap-name": "test2", 

104 "latest_revisions": [], 

105 }, 

106 } 

107 } 

108 } 

109 responses.add(responses.GET, self.api_url, json=payload, status=200) 

110 

111 response = self.client.get("/snaps/api/snap-count") 

112 self.assertEqual(200, response.status_code) 

113 # Add pyQuery basic context checks 

114 

115 self.assertEqual(1, len(responses.calls)) 

116 called = responses.calls[0] 

117 self.assertEqual(self.api_url, called.request.url) 

118 self.assertEqual( 

119 self.authorization, called.request.headers.get("Authorization") 

120 ) 

121 

122 assert response.status_code == 200 

123 data = json.loads(response.get_data()) 

124 assert data["count"] == 1 

125 

126 @responses.activate 

127 def test_revoked_snaps(self): 

128 payload = { 

129 "snaps": { 

130 "16": { 

131 "test": { 

132 "status": "Approved", 

133 "snap-name": "test", 

134 "latest_revisions": [ 

135 { 

136 "test": "test", 

137 "since": "2018-01-01T00:00:00Z", 

138 "channels": [], 

139 } 

140 ], 

141 }, 

142 "test2": { 

143 "status": "Approved", 

144 "snap-name": "test2", 

145 "latest_revisions": [], 

146 }, 

147 "test3": { 

148 "status": "Revoked", 

149 "snap-name": "test", 

150 "latest_revisions": [ 

151 { 

152 "test": "test", 

153 "since": "2018-01-01T00:00:00Z", 

154 "channels": [], 

155 } 

156 ], 

157 }, 

158 "test4": { 

159 "status": "Revoked", 

160 "snap-name": "test2", 

161 "latest_revisions": [], 

162 }, 

163 } 

164 } 

165 } 

166 responses.add(responses.GET, self.api_url, json=payload, status=200) 

167 

168 response = self.client.get("/snaps/api/snap-count") 

169 self.assertEqual(200, response.status_code) 

170 # Add pyQuery basic context checks 

171 

172 self.assertEqual(1, len(responses.calls)) 

173 called = responses.calls[0] 

174 self.assertEqual(self.api_url, called.request.url) 

175 self.assertEqual( 

176 self.authorization, called.request.headers.get("Authorization") 

177 ) 

178 

179 assert response.status_code == 200 

180 data = json.loads(response.get_data()) 

181 assert data["count"] == 1