Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from unittest.mock import Mock, patch 

2from canonicalwebteam.store_api.exceptions import StoreApiResponseErrorList 

3 

4from tests.admin.tests_models import TestModelServiceEndpoints 

5 

6 

7class TestGetPolicies(TestModelServiceEndpoints): 

8 @patch("webapp.admin.views.admin_api.get_store_model_policies") 

9 def test_get_policies(self, mock_get_store_model_policies): 

10 mock_get_store_model_policies.return_value = ["policy1", "policy2"] 

11 

12 response = self.client.get("/admin/store/1/models/Model1/policies") 

13 data = response.json 

14 

15 self.assertEqual(response.status_code, 200) 

16 self.assertTrue(data["success"]) 

17 self.assertEqual(data["data"], ["policy1", "policy2"]) 

18 

19 @patch("webapp.admin.views.admin_api.get_store_model_policies") 

20 def test_failed_get_policies(self, mock_get_store_model_policies): 

21 mock_get_store_model_policies.side_effect = StoreApiResponseErrorList( 

22 "An error occurred", 500, [{"message": "An error occurred"}] 

23 ) 

24 

25 response = self.client.get("/admin/store/1/models/Model1/policies") 

26 data = response.json 

27 

28 self.assertEqual(response.status_code, 500) 

29 self.assertFalse(data["success"]) 

30 self.assertEqual(data["message"], "An error occurred") 

31 

32 

33class TestCreatePolicies(TestModelServiceEndpoints): 

34 @patch("webapp.admin.views.admin_api.get_store_signing_keys") 

35 @patch("webapp.admin.views.admin_api.create_store_model_policy") 

36 def test_create_policy( 

37 self, mock_create_store_model_policy, mock_get_store_signing_keys 

38 ): 

39 mock_get_store_signing_keys.return_value = [ 

40 {"sha3-384": "valid_signing_key"} 

41 ] 

42 mock_create_store_model_policy.return_value = None 

43 

44 payload = {"signing_key": "valid_signing_key"} 

45 response = self.client.post( 

46 "/admin/store/1/models/Model1/policies", data=payload 

47 ) 

48 data = response.json 

49 

50 self.assertEqual(response.status_code, 200) 

51 self.assertTrue(data["success"]) 

52 

53 @patch("webapp.admin.views.admin_api.get_store_signing_keys") 

54 def test_missing_signing_key(self, mock_get_store_signing_keys): 

55 mock_get_store_signing_keys.return_value = [ 

56 {"sha3-384": "valid_signing_key"} 

57 ] 

58 

59 payload = {} 

60 response = self.client.post( 

61 "/admin/store/1/models/Model1/policies", data=payload 

62 ) 

63 data = response.json 

64 

65 self.assertEqual(response.status_code, 500) 

66 self.assertFalse(data["success"]) 

67 self.assertEqual(data["message"], "Signing key required") 

68 

69 @patch("webapp.admin.views.admin_api.get_store_signing_keys") 

70 def test_invalid_signing_key(self, mock_get_store_signing_keys): 

71 mock_get_store_signing_keys.return_value = [{"sha3-384": "valid_key"}] 

72 

73 payload = {"signing_key": "invalid_key"} 

74 response = self.client.post( 

75 "/admin/store/1/models/Model1/policies", data=payload 

76 ) 

77 data = response.json 

78 

79 self.assertEqual(response.status_code, 500) 

80 self.assertFalse(data["success"]) 

81 self.assertEqual(data["message"], "Invalid signing key") 

82 

83 @patch("webapp.admin.views.admin_api.get_store_signing_keys") 

84 @patch("webapp.admin.views.admin_api.create_store_model_policy") 

85 def test_exception_in_create_policy( 

86 self, 

87 mock_create_store_model_policy, 

88 mock_get_store_signing_keys, 

89 ): 

90 mock_get_store_signing_keys.return_value = [{"sha3-384": "valid_key"}] 

91 mock_create_store_model_policy.side_effect = StoreApiResponseErrorList( 

92 "Simulated failure", 500, [{"message": "An error occurred"}] 

93 ) 

94 

95 payload = {"signing_key": "valid_key"} 

96 response = self.client.post( 

97 "/admin/store/1/models/Model1/policies", data=payload 

98 ) 

99 data = response.json 

100 

101 self.assertEqual(response.status_code, 500) 

102 self.assertFalse(data["success"]) 

103 self.assertEqual(data["message"], "An error occurred") 

104 

105 

106class TestDeletePolicies(TestModelServiceEndpoints): 

107 @patch("webapp.admin.views.admin_api.delete_store_model_policy") 

108 def test_successful_delete_policy(self, mock_delete_store_model_policy): 

109 mock_delete_store_model_policy.return_value = Mock(status_code=204) 

110 

111 response = self.client.delete( 

112 "/admin/store/1/models/Model1/policies/1" 

113 ) 

114 data = response.json 

115 

116 self.assertEqual(response.status_code, 200) 

117 self.assertTrue(data["success"]) 

118 

119 @patch("webapp.admin.views.admin_api.delete_store_model_policy") 

120 def test_policy_not_found(self, mock_delete_store_model_policy): 

121 mock_delete_store_model_policy.return_value = Mock(status_code=404) 

122 

123 response = self.client.delete( 

124 "/admin/store/1/models/Model1/policies/1" 

125 ) 

126 data = response.json 

127 

128 self.assertEqual(response.status_code, 500) 

129 self.assertFalse(data["success"]) 

130 self.assertEqual(data["message"], "Policy not found") 

131 

132 @patch("webapp.admin.views.admin_api.delete_store_model_policy") 

133 def test_exception_in_delete_policy(self, mock_delete_store_model_policy): 

134 mock_delete_store_model_policy.side_effect = StoreApiResponseErrorList( 

135 "An error occured", 500, [{"message": "An error occurred"}] 

136 ) 

137 

138 response = self.client.delete( 

139 "/admin/store/1/models/Model1/policies/1" 

140 ) 

141 data = response.json 

142 

143 self.assertEqual(response.status_code, 500) 

144 self.assertFalse(data["success"]) 

145 self.assertEqual(data["message"], "An error occurred")