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

71 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2025-12-29 22:06 +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 ] 

77 ) 

78 } 

79 ), 

80 ] 

81 ) 

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

83 

84 def create_app(self): 

85 app = create_app(testing=True) 

86 app.secret_key = "secret_key" 

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

88 

89 return app 

90 

91 @responses.activate 

92 def test_api_404(self): 

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

94 responses.add( 

95 responses.Response( 

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

97 ) 

98 ) 

99 

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

101 

102 assert len(responses.calls) == 1 

103 called = responses.calls[0] 

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

105 

106 assert response.status_code == 404 

107 

108 @responses.activate 

109 def test_api_500(self): 

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

111 responses.add( 

112 responses.Response( 

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

114 ) 

115 ) 

116 

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

118 

119 assert len(responses.calls) == 1 

120 called = responses.calls[0] 

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

122 

123 assert response.status_code == 502 

124 

125 @responses.activate 

126 def test_api_500_no_answer(self): 

127 responses.add( 

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

129 ) 

130 

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

132 

133 assert len(responses.calls) == 1 

134 called = responses.calls[0] 

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

136 

137 assert response.status_code == 502 

138 

139 @responses.activate 

140 def test_no_channel_map(self): 

141 payload = self.snap_payload 

142 payload["channel_map"] = None 

143 

144 responses.add( 

145 responses.Response( 

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

147 ) 

148 ) 

149 

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

151 

152 self.assertEqual(response.status_code, 200) 

153 

154 @responses.activate 

155 def test_get_card(self): 

156 payload = self.snap_payload 

157 

158 responses.add( 

159 responses.Response( 

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

161 ) 

162 ) 

163 

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

165 

166 self.assertEqual(response.status_code, 200) 

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

168 self.assert_context("button", None) 

169 

170 @responses.activate 

171 def test_get_card_default_button(self): 

172 payload = self.snap_payload 

173 

174 responses.add( 

175 responses.Response( 

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

177 ) 

178 ) 

179 

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

181 

182 self.assertEqual(response.status_code, 200) 

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

184 

185 @responses.activate 

186 def test_get_card_white_button(self): 

187 payload = self.snap_payload 

188 

189 responses.add( 

190 responses.Response( 

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

192 ) 

193 ) 

194 

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

196 

197 self.assertEqual(response.status_code, 200) 

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