Coverage for tests/publisher/snaps/tests_post_default_track.py: 100%

79 statements  

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

1import responses 

2from tests.publisher.endpoint_testing import BaseTestCases 

3 

4 

5class PostDefaultTrackNotAuth(BaseTestCases.EndpointLoggedOut): 

6 def setUp(self): 

7 snap_name = "test-snap" 

8 endpoint_url = "/{}/releases/default-track".format(snap_name) 

9 

10 super().setUp( 

11 snap_name=snap_name, 

12 endpoint_url=endpoint_url, 

13 method_endpoint="POST", 

14 ) 

15 

16 

17class PostDefaultTrackGetSnapId(BaseTestCases.EndpointLoggedIn): 

18 def setUp(self): 

19 snap_name = "test-snap" 

20 endpoint_url = "/{}/releases/default-track".format(snap_name) 

21 json = {"default-track": "test"} 

22 

23 api_url = "https://dashboard.snapcraft.io/dev/api/snaps/info/{}" 

24 api_url = api_url.format(snap_name) 

25 

26 super().setUp( 

27 snap_name=snap_name, 

28 api_url=api_url, 

29 endpoint_url=endpoint_url, 

30 method_api="GET", 

31 method_endpoint="POST", 

32 json=json, 

33 ) 

34 

35 @responses.activate 

36 def test_page_not_found(self): 

37 payload = {"error_list": []} 

38 responses.add(responses.GET, self.api_url, json=payload, status=404) 

39 

40 response = self.client.post(self.endpoint_url, json=self.json) 

41 self.check_call_by_api_url(responses.calls) 

42 

43 assert response.status_code == 404 

44 self.assert_template_used("404.html") 

45 

46 @responses.activate 

47 def test_error_4xx(self): 

48 payload = {"error_list": []} 

49 responses.add(responses.GET, self.api_url, json=payload, status=400) 

50 

51 response = self.client.post(self.endpoint_url, json=self.json) 

52 self.check_call_by_api_url(responses.calls) 

53 

54 assert response.status_code == 400 

55 assert response.get_json() == [] 

56 

57 

58class PostDefaultTrack(BaseTestCases.EndpointLoggedIn): 

59 def setUp(self): 

60 snap_name = "test-snap" 

61 snap_id = "test_id" 

62 endpoint_url = "/{}/releases/default-track".format(snap_name) 

63 api_url = ( 

64 "https://dashboard.snapcraft.io/dev/api/" 

65 "snaps/{}/metadata?conflict_on_update=true" 

66 ).format(snap_id) 

67 

68 json = {"default-track": "test"} 

69 

70 api_info_url = "https://dashboard.snapcraft.io/dev/api/snaps/info/{}" 

71 api_info_url = api_info_url.format(snap_name) 

72 responses.add( 

73 method=responses.GET, 

74 url=api_info_url, 

75 json={"snap_id": snap_id}, 

76 status=200, 

77 ) 

78 

79 super().setUp( 

80 snap_name=snap_name, 

81 api_url=api_url, 

82 endpoint_url=endpoint_url, 

83 method_api="PUT", 

84 method_endpoint="POST", 

85 json=json, 

86 ) 

87 

88 @responses.activate 

89 def test_page_not_found(self): 

90 payload = {"error_list": []} 

91 responses.add(responses.PUT, self.api_url, json=payload, status=404) 

92 

93 response = self.client.post(self.endpoint_url, json=self.json) 

94 self.check_call_by_api_url(responses.calls) 

95 

96 assert response.status_code == 404 

97 self.assert_template_used("404.html") 

98 

99 def test_post_no_data(self): 

100 response = self.client.post(self.endpoint_url, json={}) 

101 

102 assert response.status_code == 400 

103 assert response.get_json() == {} 

104 

105 @responses.activate 

106 def test_post_data(self): 

107 payload = {} 

108 

109 responses.add(responses.PUT, self.api_url, json=payload, status=200) 

110 

111 response = self.client.post(self.endpoint_url, json=self.json) 

112 self.check_call_by_api_url(responses.calls) 

113 

114 result = {"success": True} 

115 self.assertEqual(response.json, result) 

116 

117 @responses.activate 

118 def test_return_error(self): 

119 payload = {"error_list": [{"code": "code", "name": ["message"]}]} 

120 

121 responses.add(responses.PUT, self.api_url, json=payload, status=400) 

122 

123 response = self.client.post(self.endpoint_url, json=self.json) 

124 self.check_call_by_api_url(responses.calls) 

125 

126 expected_response = { 

127 "errors": [{"code": "code", "name": ["message"]}], 

128 "success": False, 

129 } 

130 self.assertEqual(response.json, expected_response) 

131 

132 @responses.activate 

133 def test_error_4xx(self): 

134 payload = {"error_list": []} 

135 responses.add(responses.PUT, self.api_url, json=payload, status=400) 

136 

137 response = self.client.post(self.endpoint_url, json=self.json) 

138 self.check_call_by_api_url(responses.calls) 

139 

140 expected_response = {"errors": [], "success": False} 

141 assert response.status_code == 400 

142 assert response.get_json() == expected_response