Coverage for tests/store/tests_embedded_card.py: 100%

71 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-10 22:08 +0000

1import responses 

2from urllib.parse import urlencode 

3from webapp.app import create_app 

4from flask_testing import TestCase 

5 

6 

7class GetEmbeddedCardTest(TestCase): 

8 snap_payload = { 

9 "snap-id": "id", 

10 "name": "snapName", 

11 "default-track": None, 

12 "snap": { 

13 "title": "Snap Title", 

14 "summary": "This is a summary", 

15 "description": "this is a description", 

16 "media": [], 

17 "license": "license", 

18 "publisher": { 

19 "display-name": "Toto", 

20 "username": "toto", 

21 "validation": True, 

22 }, 

23 "categories": [{"name": "test"}], 

24 "trending": False, 

25 "unlisted": False, 

26 "links": {}, 

27 }, 

28 "channel-map": [ 

29 { 

30 "channel": { 

31 "architecture": "amd64", 

32 "name": "stable", 

33 "risk": "stable", 

34 "track": "latest", 

35 "released-at": "2018-09-18T14:45:28.064633+00:00", 

36 }, 

37 "created-at": "2018-09-18T14:45:28.064633+00:00", 

38 "version": "1.0", 

39 "confinement": "conf", 

40 "download": {"size": 100000}, 

41 "revision": 1, 

42 } 

43 ], 

44 } 

45 

46 def setUp(self): 

47 super().setUp() 

48 self.snap_name = "toto" 

49 self.api_url = "".join( 

50 [ 

51 "https://api.snapcraft.io/v2/", 

52 "snaps/info/", 

53 self.snap_name, 

54 "?", 

55 urlencode( 

56 { 

57 "fields": ",".join( 

58 [ 

59 "title", 

60 "summary", 

61 "description", 

62 "license", 

63 "contact", 

64 "website", 

65 "publisher", 

66 "media", 

67 "download", 

68 "version", 

69 "created-at", 

70 "confinement", 

71 "categories", 

72 "trending", 

73 "unlisted", 

74 "links", 

75 "revision", 

76 "sboms", 

77 ] 

78 ) 

79 } 

80 ), 

81 ] 

82 ) 

83 self.endpoint_url = "/" + self.snap_name + "/embedded" 

84 

85 def create_app(self): 

86 app = create_app(testing=True) 

87 app.secret_key = "secret_key" 

88 app.config["WTF_CSRF_METHODS"] = [] 

89 

90 return app 

91 

92 @responses.activate 

93 def test_api_404(self): 

94 payload = {"error-list": []} 

95 responses.add( 

96 responses.Response( 

97 method="GET", url=self.api_url, json=payload, status=404 

98 ) 

99 ) 

100 

101 response = self.client.get(self.endpoint_url) 

102 

103 assert len(responses.calls) == 1 

104 called = responses.calls[0] 

105 assert called.request.url == self.api_url 

106 

107 assert response.status_code == 404 

108 

109 @responses.activate 

110 def test_api_500(self): 

111 payload = {"error-list": []} 

112 responses.add( 

113 responses.Response( 

114 method="GET", url=self.api_url, json=payload, status=500 

115 ) 

116 ) 

117 

118 response = self.client.get(self.endpoint_url) 

119 

120 assert len(responses.calls) == 1 

121 called = responses.calls[0] 

122 assert called.request.url == self.api_url 

123 

124 assert response.status_code == 502 

125 

126 @responses.activate 

127 def test_api_500_no_answer(self): 

128 responses.add( 

129 responses.Response(method="GET", url=self.api_url, status=500) 

130 ) 

131 

132 response = self.client.get(self.endpoint_url) 

133 

134 assert len(responses.calls) == 1 

135 called = responses.calls[0] 

136 assert called.request.url == self.api_url 

137 

138 assert response.status_code == 502 

139 

140 @responses.activate 

141 def test_no_channel_map(self): 

142 payload = self.snap_payload 

143 payload["channel_map"] = None 

144 

145 responses.add( 

146 responses.Response( 

147 method="GET", url=self.api_url, json=payload, status=200 

148 ) 

149 ) 

150 

151 response = self.client.get(self.endpoint_url) 

152 

153 self.assertEqual(response.status_code, 200) 

154 

155 @responses.activate 

156 def test_get_card(self): 

157 payload = self.snap_payload 

158 

159 responses.add( 

160 responses.Response( 

161 method="GET", url=self.api_url, json=payload, status=200 

162 ) 

163 ) 

164 

165 response = self.client.get(self.endpoint_url) 

166 

167 self.assertEqual(response.status_code, 200) 

168 self.assert_context("snap_title", "Snap Title") 

169 self.assert_context("button", None) 

170 

171 @responses.activate 

172 def test_get_card_default_button(self): 

173 payload = self.snap_payload 

174 

175 responses.add( 

176 responses.Response( 

177 method="GET", url=self.api_url, json=payload, status=200 

178 ) 

179 ) 

180 

181 response = self.client.get(self.endpoint_url + "?button=test") 

182 

183 self.assertEqual(response.status_code, 200) 

184 self.assert_context("button", "black") 

185 

186 @responses.activate 

187 def test_get_card_white_button(self): 

188 payload = self.snap_payload 

189 

190 responses.add( 

191 responses.Response( 

192 method="GET", url=self.api_url, json=payload, status=200 

193 ) 

194 ) 

195 

196 response = self.client.get(self.endpoint_url + "?button=white") 

197 

198 self.assertEqual(response.status_code, 200) 

199 self.assert_context("button", "white")