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

46 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 GetDistroPageTest(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.featured_snaps_api_url = "".join( 

84 [ 

85 "https://api.snapcraft.io/api/v1/", 

86 "snaps/search", 

87 "?", 

88 urlencode( 

89 { 

90 "q": "", 

91 "size": "13", 

92 "page": "1", 

93 "scope": "wide", 

94 "confinement": "strict,classic", 

95 "fields": "package_name,title,summary," 

96 "architecture,media,developer_name,developer_id," 

97 "developer_validation,origin,apps,sections", 

98 "arch": "wide", 

99 "section": "featured", 

100 } 

101 ), 

102 ] 

103 ) 

104 self.endpoint_url = "/install/" + self.snap_name + "/debian" 

105 

106 def create_app(self): 

107 app = create_app(testing=True) 

108 app.secret_key = "secret_key" 

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

110 

111 return app 

112 

113 @responses.activate 

114 def test_api_404(self): 

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

116 responses.add( 

117 responses.Response( 

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

119 ) 

120 ) 

121 

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

123 

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

125 called = responses.calls[0] 

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

127 

128 self.assert404(response) 

129 

130 @responses.activate 

131 def test_api_500(self): 

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

133 responses.add( 

134 responses.Response( 

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

136 ) 

137 ) 

138 

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

140 

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

142 called = responses.calls[0] 

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

144 

145 self.assertStatus(response, 502) 

146 

147 def test_no_distro_data(self): 

148 response = self.client.get("/install/" + self.snap_name + "/noname") 

149 

150 self.assert404(response) 

151 

152 @responses.activate 

153 def test_get_page(self): 

154 payload = self.snap_payload 

155 

156 responses.add( 

157 responses.Response( 

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

159 ) 

160 ) 

161 

162 responses.add( 

163 responses.Response( 

164 method="GET", 

165 url=self.featured_snaps_api_url, 

166 json={}, 

167 status=200, 

168 ) 

169 ) 

170 

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

172 

173 self.assert200(response) 

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