Skip to content

Commit b668888

Browse files
authored
fix: Fix listAssignments and assign methods in RetentionPolicyModule (#886)
1 parent a529648 commit b668888

File tree

3 files changed

+131
-15
lines changed

3 files changed

+131
-15
lines changed

IntegrationTests/RetentionPoliciesModuleIntegrationSpecs.swift

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RetentionPoliciesModuleIntegrationSpecs: BaseIntegrationSpecs {
3636
self.retireRetention(retentionPolicy)
3737
}
3838

39-
it("assign then get and unassign retention policy") {
39+
it("assign get list unassign retention policy in folder context") {
4040
guard let retentionPolicy = retentionPolicy else {
4141
fail("An error occurred during setup initial data")
4242
return
@@ -49,13 +49,13 @@ class RetentionPoliciesModuleIntegrationSpecs: BaseIntegrationSpecs {
4949
self.client.retentionPolicy.assign(
5050
policyId: retentionPolicy.id,
5151
assignedContentId: self.rootFolder.id,
52-
assignContentType: RetentionPolicyAssignmentItemType.folder
52+
assignContentType: .folder
5353
) { result in
5454
switch result {
5555
case let .success(assignment):
5656
retentionPolicyAssignment = assignment
5757
expect(retentionPolicyAssignment?.retentionPolicy?.id).to(equal(retentionPolicy.id))
58-
expect(retentionPolicyAssignment?.assignedTo?.type).to(equal(RetentionPolicyAssignmentItemType.folder))
58+
expect(retentionPolicyAssignment?.assignedTo?.type).to(equal(.folder))
5959
expect(retentionPolicyAssignment?.assignedTo?.id).to(equal(self.rootFolder.id))
6060
case let .failure(error):
6161
fail("Expected assign call to succeed, but instead got \(error)")
@@ -73,7 +73,7 @@ class RetentionPoliciesModuleIntegrationSpecs: BaseIntegrationSpecs {
7373
switch result {
7474
case let .success(assignment):
7575
expect(assignment.retentionPolicy?.id).to(equal(retentionPolicy.id))
76-
expect(assignment.assignedTo?.type).to(equal(RetentionPolicyAssignmentItemType.folder))
76+
expect(assignment.assignedTo?.type).to(equal(.folder))
7777
expect(assignment.assignedTo?.id).to(equal(self.rootFolder.id))
7878
case let .failure(error):
7979
fail("Expected get call to succeed, but instead got \(error)")
@@ -83,6 +83,67 @@ class RetentionPoliciesModuleIntegrationSpecs: BaseIntegrationSpecs {
8383
}
8484
}
8585

86+
// List
87+
let iterator = self.client.retentionPolicy.listAssignments(policyId: retentionPolicy.id, type: .folder, fields: ["assigned_to"])
88+
waitUntil(timeout: .seconds(Constants.Timeout.default)) { done in
89+
iterator.next { result in
90+
switch result {
91+
case let .success(page):
92+
expect(page.entries.count).to(equal(1))
93+
expect(page.entries[0].id).to(equal(retentionPolicyAssignment.id))
94+
expect(page.entries[0].assignedTo?.type).to(equal(.folder))
95+
expect(page.entries[0].assignedTo?.id).to(equal(self.rootFolder.id))
96+
case let .failure(error):
97+
fail("Expected listAssignments call to succeeded, but it instead got: \(error)")
98+
}
99+
100+
done()
101+
}
102+
}
103+
104+
// Delete
105+
waitUntil(timeout: .seconds(Constants.Timeout.default)) { done in
106+
self.client.retentionPolicy.deleteAssignment(assignmentId: retentionPolicyAssignment.id) { result in
107+
if case let .failure(error) = result {
108+
fail("Expected delete call to succeed, but instead got \(error)")
109+
}
110+
111+
done()
112+
}
113+
}
114+
}
115+
116+
it("assign unassign retention policy in enterprise context") {
117+
guard let retentionPolicy = retentionPolicy else {
118+
fail("An error occurred during setup initial data")
119+
return
120+
}
121+
122+
var retentionPolicyAssignment: RetentionPolicyAssignment?
123+
124+
// Assign
125+
waitUntil(timeout: .seconds(Constants.Timeout.default)) { done in
126+
self.client.retentionPolicy.assign(
127+
policyId: retentionPolicy.id,
128+
assignedContentId: nil,
129+
assignContentType: .enterprise
130+
) { result in
131+
switch result {
132+
case let .success(assignment):
133+
retentionPolicyAssignment = assignment
134+
expect(retentionPolicyAssignment?.retentionPolicy?.id).to(equal(retentionPolicy.id))
135+
expect(retentionPolicyAssignment?.assignedTo?.type).to(equal(.enterprise))
136+
expect(retentionPolicyAssignment?.assignedTo?.id).toNot(beNil())
137+
case let .failure(error):
138+
fail("Expected assign call to succeed, but instead got \(error)")
139+
}
140+
141+
done()
142+
}
143+
}
144+
145+
guard let retentionPolicyAssignment = retentionPolicyAssignment else { return }
146+
86147
// Delete
87148
waitUntil(timeout: .seconds(Constants.Timeout.default)) { done in
88149
self.client.retentionPolicy.deleteAssignment(assignmentId: retentionPolicyAssignment.id) { result in

Sources/Modules/RetentionPolicyModule.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,13 @@ public class RetentionPoliciesModule {
174174
///
175175
/// - Parameters:
176176
/// - id: The id of the retention policy to assign this content to.
177-
/// - assignedContentId: The id of the content to assign the retention policy to. If assigning to an enterprise, no id should be provided.
177+
/// - assignedContentId: The id of the content to assign the retention policy to. If assigning to an enterprise set this to nil.
178178
/// - assignContentType: The type of item policy is assigned to. The type can only be one of three attributes: enterprise, folder, or metadata_template.
179179
/// - filterFields: The array of metadata field filters
180180
/// - completion: Returns either new assignment upon success or an error.
181181
public func assign(
182182
policyId id: String,
183-
assignedContentId: String,
183+
assignedContentId: String?,
184184
assignContentType: RetentionPolicyAssignmentItemType,
185185
filterFields: [MetadataFieldFilter]? = nil,
186186
completion: @escaping Callback<RetentionPolicyAssignment>
@@ -225,20 +225,24 @@ public class RetentionPoliciesModule {
225225
/// - marker: The position marker at which to begin the response. See [marker-based paging]
226226
/// (https://developer.box.com/reference#section-marker-based-paging) for details.
227227
/// - limit: The maximum number of items to return. The default is 100.
228+
/// - fields: Comma-separated list of [fields](https://developer.box.com/reference#fields) to
229+
/// include in the response.
228230
/// - Returns: Returns a pagination iterator to fetch a list of the retention policy assignments associated with the specified retention policy.
229231
public func listAssignments(
230232
policyId id: String,
231-
type: RetentionPolicyType? = nil,
233+
type: RetentionPolicyAssignmentItemType? = nil,
232234
marker: String? = nil,
233-
limit: Int? = nil
235+
limit: Int? = nil,
236+
fields: [String]? = nil
234237
) -> PagingIterator<RetentionPolicyAssignment> {
235238
.init(
236239
client: boxClient,
237240
url: URL.boxAPIEndpoint("/2.0/retention_policies/\(id)/assignments", configuration: boxClient.configuration),
238241
queryParameters: [
239-
"policy_type": type?.description,
242+
"type": type?.description,
240243
"marker": marker,
241-
"limit": limit
244+
"limit": limit,
245+
"fields": FieldsQueryParam(fields)
242246
]
243247
)
244248
}

Tests/Modules/RetentionPolicyModuleSpecs.swift

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ class RetentionPolicyModuleSpecs: QuickSpec {
271271
}
272272

273273
describe("assign()") {
274-
it("should create new retention policy assignment") {
274+
it("should create new retention policy assignment for folder") {
275275
let id = "11446498"
276276
stub(
277277
condition: isHost("api.box.com") &&
@@ -319,6 +319,54 @@ class RetentionPolicyModuleSpecs: QuickSpec {
319319
}
320320
}
321321
}
322+
323+
it("should create new retention policy assignment for enterprise") {
324+
let id = "11446498"
325+
stub(
326+
condition: isHost("api.box.com") &&
327+
isPath("/2.0/retention_policy_assignments") &&
328+
isMethodPOST() &&
329+
hasJsonBody([
330+
"policy_id": id,
331+
"assign_to": [
332+
"id": nil,
333+
"type": "enterprise"
334+
],
335+
"filter_fields": [
336+
[
337+
"field": "test",
338+
"value": "test"
339+
]
340+
]
341+
])
342+
) { _ in
343+
OHHTTPStubsResponse(
344+
fileAtPath: OHPathForFile("CreateRetentionPolicyAssignment.json", type(of: self))!,
345+
statusCode: 200, headers: ["Content-Type": "application/json"]
346+
)
347+
}
348+
waitUntil(timeout: .seconds(10)) { done in
349+
self.sut.retentionPolicy.assign(
350+
policyId: id,
351+
assignedContentId: nil,
352+
assignContentType: RetentionPolicyAssignmentItemType.enterprise,
353+
filterFields: [MetadataFieldFilter(field: "test", value: "test")]
354+
) { result in
355+
switch result {
356+
case let .success(retentionPolicyAssignment):
357+
expect(retentionPolicyAssignment.id).to(equal(id))
358+
expect(retentionPolicyAssignment.retentionPolicy?.id).to(equal("11446498"))
359+
expect(retentionPolicyAssignment.retentionPolicy?.name).to(equal("Some Policy Name"))
360+
expect(retentionPolicyAssignment.assignedBy?.id).to(equal("11111"))
361+
expect(retentionPolicyAssignment.assignedBy?.name).to(equal("Test User"))
362+
expect(retentionPolicyAssignment.assignedBy?.login).to(equal("[email protected]"))
363+
case let .failure(error):
364+
fail("Expected call to assign to succeed, but instead got \(error)")
365+
}
366+
done()
367+
}
368+
}
369+
}
322370
}
323371

324372
describe("deleteAssignment()") {
@@ -352,17 +400,20 @@ class RetentionPolicyModuleSpecs: QuickSpec {
352400
condition: isHost("api.box.com") &&
353401
isPath("/2.0/retention_policies/\(id)/assignments") &&
354402
isMethodGET() &&
355-
containsQueryParams([
356-
"policy_type": "finite"
357-
])
403+
containsQueryParams(["fields": "retention_policy,assigned_to", "type": "folder"])
404+
358405
) { _ in
359406
OHHTTPStubsResponse(
360407
fileAtPath: OHPathForFile("GetRetentionPolicyAssignments.json", type(of: self))!,
361408
statusCode: 200, headers: ["Content-Type": "application/json"]
362409
)
363410
}
364411
waitUntil(timeout: .seconds(10)) { done in
365-
let iterator = self.sut.retentionPolicy.listAssignments(policyId: id, type: .finite)
412+
let iterator = self.sut.retentionPolicy.listAssignments(
413+
policyId: id,
414+
type: .folder,
415+
fields: ["retention_policy", "assigned_to"]
416+
)
366417
iterator.next { result in
367418
switch result {
368419
case let .success(page):

0 commit comments

Comments
 (0)