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

70 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-28 22:05 +0000

1import responses 

2from urllib.parse import urlencode 

3from flask_testing import TestCase 

4from webapp.app import create_app 

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 } 

42 ], 

43 } 

44 

45 def setUp(self): 

46 self.snap_name = "toto" 

47 self.api_url = "".join( 

48 [ 

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

50 "snaps/info/", 

51 self.snap_name, 

52 "?", 

53 urlencode( 

54 { 

55 "fields": ",".join( 

56 [ 

57 "title", 

58 "summary", 

59 "description", 

60 "license", 

61 "contact", 

62 "website", 

63 "publisher", 

64 "media", 

65 "download", 

66 "version", 

67 "created-at", 

68 "confinement", 

69 "categories", 

70 "trending", 

71 "unlisted", 

72 "links", 

73 ] 

74 ) 

75 } 

76 ), 

77 ] 

78 ) 

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

80 

81 def create_app(self): 

82 app = create_app(testing=True) 

83 app.secret_key = "secret_key" 

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

85 

86 return app 

87 

88 @responses.activate 

89 def test_api_404(self): 

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

91 responses.add( 

92 responses.Response( 

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

94 ) 

95 ) 

96 

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

98 

99 assert len(responses.calls) == 1 

100 called = responses.calls[0] 

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

102 

103 assert response.status_code == 404 

104 

105 @responses.activate 

106 def test_api_500(self): 

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

108 responses.add( 

109 responses.Response( 

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

111 ) 

112 ) 

113 

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

115 

116 assert len(responses.calls) == 1 

117 called = responses.calls[0] 

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

119 

120 assert response.status_code == 502 

121 

122 @responses.activate 

123 def test_api_500_no_answer(self): 

124 responses.add( 

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

126 ) 

127 

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

129 

130 assert len(responses.calls) == 1 

131 called = responses.calls[0] 

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

133 

134 assert response.status_code == 502 

135 

136 @responses.activate 

137 def test_no_channel_map(self): 

138 payload = self.snap_payload 

139 payload["channel_map"] = None 

140 

141 responses.add( 

142 responses.Response( 

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

144 ) 

145 ) 

146 

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

148 

149 self.assertEqual(response.status_code, 200) 

150 

151 @responses.activate 

152 def test_get_card(self): 

153 payload = self.snap_payload 

154 

155 responses.add( 

156 responses.Response( 

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

158 ) 

159 ) 

160 

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

162 

163 self.assertEqual(response.status_code, 200) 

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

165 self.assert_context("button", None) 

166 

167 @responses.activate 

168 def test_get_card_default_button(self): 

169 payload = self.snap_payload 

170 

171 responses.add( 

172 responses.Response( 

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

174 ) 

175 ) 

176 

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

178 

179 self.assertEqual(response.status_code, 200) 

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

181 

182 @responses.activate 

183 def test_get_card_white_button(self): 

184 payload = self.snap_payload 

185 

186 responses.add( 

187 responses.Response( 

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

189 ) 

190 ) 

191 

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

193 

194 self.assertEqual(response.status_code, 200) 

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