@@ -213,6 +213,37 @@ class ResourceRoutesV2Spec extends RetryableAnyFlatSpec with Matchers with TestS
213
213
}
214
214
}
215
215
216
+ it should " 204 create resource with content with parent with create_with_parent action" in {
217
+ val resourceType = ResourceType (
218
+ ResourceTypeName (" rt" ),
219
+ Set (ResourceActionPattern (SamResourceActions .setParent.value, " " , false )),
220
+ Set (ResourceRole (ResourceRoleName (" owner" ), Set (SamResourceActions .createWithParent, SamResourceActions .addChild))),
221
+ ResourceRoleName (" owner" )
222
+ )
223
+ val samRoutes = TestSamRoutes (Map (resourceType.name -> resourceType))
224
+
225
+ val createParentResourceRequest = CreateResourceRequest (
226
+ ResourceId (" parent" ),
227
+ Map (AccessPolicyName (" goober" ) -> AccessPolicyMembershipRequest (Set (defaultUserInfo.email), Set .empty, Set (resourceType.ownerRoleName))),
228
+ Set .empty,
229
+ Some (false )
230
+ )
231
+ Post (s " /api/resources/v2/ ${resourceType.name}" , createParentResourceRequest) ~> samRoutes.route ~> check {
232
+ status shouldEqual StatusCodes .NoContent
233
+ }
234
+
235
+ val createResourceRequest = CreateResourceRequest (
236
+ ResourceId (" foo" ),
237
+ Map (AccessPolicyName (" goober" ) -> AccessPolicyMembershipRequest (Set (defaultUserInfo.email), Set .empty, Set (resourceType.ownerRoleName))),
238
+ Set .empty,
239
+ Some (false ),
240
+ Some (FullyQualifiedResourceId (resourceType.name, createParentResourceRequest.resourceId))
241
+ )
242
+ Post (s " /api/resources/v2/ ${resourceType.name}" , createResourceRequest) ~> samRoutes.route ~> check {
243
+ status shouldEqual StatusCodes .NoContent
244
+ }
245
+ }
246
+
216
247
it should " 400 with parent when parents not allowed" in {
217
248
val resourceType = ResourceType (
218
249
ResourceTypeName (" rt" ),
@@ -2036,6 +2067,30 @@ class ResourceRoutesV2Spec extends RetryableAnyFlatSpec with Matchers with TestS
2036
2067
}
2037
2068
}
2038
2069
2070
+ it should " 403 if user only has create_with_parent on child resource" in {
2071
+ val fullyQualifiedChildResource = FullyQualifiedResourceId (defaultResourceType.name, ResourceId (" child" ))
2072
+ val newParentResource = FullyQualifiedResourceId (defaultResourceType.name, ResourceId (" newParent" ))
2073
+ val currentParentResource = FullyQualifiedResourceId (defaultResourceType.name, ResourceId (" currentParent" ))
2074
+ val samRoutes = createSamRoutes()
2075
+
2076
+ setupParentRoutes(
2077
+ samRoutes,
2078
+ fullyQualifiedChildResource,
2079
+ currentParentOpt = Option (currentParentResource),
2080
+ newParentOpt = Option (newParentResource),
2081
+ actionsOnChild = Set (SamResourceActions .readPolicies, SamResourceActions .createWithParent),
2082
+ actionsOnCurrentParent = Set (SamResourceActions .removeChild),
2083
+ actionsOnNewParent = Set (SamResourceActions .addChild)
2084
+ )
2085
+
2086
+ Put (
2087
+ s " /api/resources/v2/ ${defaultResourceType.name}/ ${fullyQualifiedChildResource.resourceId.value}/parent " ,
2088
+ newParentResource
2089
+ ) ~> samRoutes.route ~> check {
2090
+ status shouldEqual StatusCodes .Forbidden
2091
+ }
2092
+ }
2093
+
2039
2094
it should " 403 if user is missing add_child on new parent resource" in {
2040
2095
val fullyQualifiedChildResource = FullyQualifiedResourceId (defaultResourceType.name, ResourceId (" child" ))
2041
2096
val newParentResource = FullyQualifiedResourceId (defaultResourceType.name, ResourceId (" newParent" ))
0 commit comments