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

46 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 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 ] 

77 ) 

78 } 

79 ), 

80 ] 

81 ) 

82 self.featured_snaps_api_url = "".join( 

83 [ 

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

85 "snaps/search", 

86 "?", 

87 urlencode( 

88 { 

89 "q": "", 

90 "size": "13", 

91 "page": "1", 

92 "scope": "wide", 

93 "confinement": "strict,classic", 

94 "fields": "package_name,title,summary," 

95 "architecture,media,developer_name,developer_id," 

96 "developer_validation,origin,apps,sections", 

97 "arch": "wide", 

98 "section": "featured", 

99 } 

100 ), 

101 ] 

102 ) 

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

104 

105 def create_app(self): 

106 app = create_app(testing=True) 

107 app.secret_key = "secret_key" 

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

109 

110 return app 

111 

112 @responses.activate 

113 def test_api_404(self): 

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

115 responses.add( 

116 responses.Response( 

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

118 ) 

119 ) 

120 

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

122 

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

124 called = responses.calls[0] 

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

126 

127 self.assert404(response) 

128 

129 @responses.activate 

130 def test_api_500(self): 

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

132 responses.add( 

133 responses.Response( 

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

135 ) 

136 ) 

137 

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

139 

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

141 called = responses.calls[0] 

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

143 

144 self.assertStatus(response, 502) 

145 

146 def test_no_distro_data(self): 

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

148 

149 self.assert404(response) 

150 

151 @responses.activate 

152 def test_get_page(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 responses.add( 

162 responses.Response( 

163 method="GET", 

164 url=self.featured_snaps_api_url, 

165 json={}, 

166 status=200, 

167 ) 

168 ) 

169 

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

171 

172 self.assert200(response) 

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