Skip to content

Commit 1ec5b01

Browse files
authored
feat: Add content_type field to Sign Requests signer (#871)
1 parent e2b7a17 commit 1ec5b01

File tree

10 files changed

+162
-9
lines changed

10 files changed

+162
-9
lines changed

BoxSDK.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
0508665F28A2A19D0073DC77 /* FileRequestsModuleSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0508665E28A2A19D0073DC77 /* FileRequestsModuleSpecs.swift */; };
2222
0508666128A2A62B0073DC77 /* UpdateFileRequest.json in Resources */ = {isa = PBXBuildFile; fileRef = 0508666028A2A62B0073DC77 /* UpdateFileRequest.json */; };
2323
0508666328A2B1240073DC77 /* CopyFileRequest.json in Resources */ = {isa = PBXBuildFile; fileRef = 0508666228A2B1240073DC77 /* CopyFileRequest.json */; };
24+
050E725128BE54C000213B4D /* SignRequestSignerInputContentTypeSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050E725028BE54C000213B4D /* SignRequestSignerInputContentTypeSpecs.swift */; };
2425
052A03F328772E2F0063513C /* UserAvatarUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 052A03F228772E2F0063513C /* UserAvatarUpload.swift */; };
2526
052A03F5287885860063513C /* MimeTypeProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 052A03F4287885860063513C /* MimeTypeProvider.swift */; };
2627
052A03F828788CAF0063513C /* MimeTypeProviderSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 052A03F628788C7C0063513C /* MimeTypeProviderSpecs.swift */; };
@@ -633,6 +634,7 @@
633634
0508665E28A2A19D0073DC77 /* FileRequestsModuleSpecs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileRequestsModuleSpecs.swift; sourceTree = "<group>"; };
634635
0508666028A2A62B0073DC77 /* UpdateFileRequest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = UpdateFileRequest.json; sourceTree = "<group>"; };
635636
0508666228A2B1240073DC77 /* CopyFileRequest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = CopyFileRequest.json; sourceTree = "<group>"; };
637+
050E725028BE54C000213B4D /* SignRequestSignerInputContentTypeSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignRequestSignerInputContentTypeSpecs.swift; sourceTree = "<group>"; };
636638
052A03F228772E2F0063513C /* UserAvatarUpload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAvatarUpload.swift; sourceTree = "<group>"; };
637639
052A03F4287885860063513C /* MimeTypeProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MimeTypeProvider.swift; sourceTree = "<group>"; };
638640
052A03F628788C7C0063513C /* MimeTypeProviderSpecs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MimeTypeProviderSpecs.swift; sourceTree = "<group>"; };
@@ -2092,6 +2094,7 @@
20922094
05F59F0826FC871A00D9A539 /* SharedItemSpecs.swift */,
20932095
05EE814B2718658F006A2329 /* SignRequestPrefillTagSpecs.swift */,
20942096
05EE814927186427006A2329 /* SignRequestSignerDecisionTypeSpecs.swift */,
2097+
050E725028BE54C000213B4D /* SignRequestSignerInputContentTypeSpecs.swift */,
20952098
05EE814D27186880006A2329 /* SignRequestSignerInputTypeSpecs.swift */,
20962099
05EE814727186336006A2329 /* SignRequestSignerRoleSpecs.swift */,
20972100
05EE814527185554006A2329 /* SignRequestSpecs.swift */,
@@ -3055,6 +3058,7 @@
30553058
0C63989C2253A536004021D3 /* FilesModuleSpecs.swift in Sources */,
30563059
9DE4586E22D6490800C93CF5 /* URLExtensionTest.swift in Sources */,
30573060
05A58A4426FB415700AB309C /* QueryParameterConvertibleSpecs.swift in Sources */,
3061+
050E725128BE54C000213B4D /* SignRequestSignerInputContentTypeSpecs.swift in Sources */,
30583062
F969D38F233A7279001301FC /* StoragePolicyAssignmentSpecs.swift in Sources */,
30593063
F929D6322331AE3E0039E452 /* LegalHoldPolicySpecs.swift in Sources */,
30603064
0C506CA922A6AA76007F18A4 /* CollaborationsModuleSpecs.swift in Sources */,

Sources/Responses/SignRequestSignerInput.swift

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,104 @@ public enum SignRequestSignerInputType: BoxEnum {
5252
}
5353
}
5454

55+
// swiftlint:disable cyclomatic_complexity
56+
57+
/// Represents a content_type of input.
58+
public enum SignRequestSignerInputContentType: BoxEnum {
59+
/// Initial
60+
case initial
61+
/// Stamp
62+
case stamp
63+
/// Signature
64+
case signature
65+
/// Company
66+
case company
67+
/// Title
68+
case title
69+
/// Email
70+
case email
71+
/// Full name
72+
case fullName
73+
/// First name
74+
case firstName
75+
/// Last name
76+
case lastName
77+
/// Text
78+
case text
79+
/// Date
80+
case date
81+
/// Checkbox
82+
case checkbox
83+
/// Custom value for enum values not yet implemented in the SDK
84+
case customValue(String)
85+
86+
/// Initializer
87+
/// - Parameter value: The string value of the content type
88+
public init(_ value: String) {
89+
switch value {
90+
case "initial":
91+
self = .initial
92+
case "stamp":
93+
self = .stamp
94+
case "signature":
95+
self = .signature
96+
case "company":
97+
self = .company
98+
case "title":
99+
self = .title
100+
case "email":
101+
self = .email
102+
case "full_name":
103+
self = .fullName
104+
case "first_name":
105+
self = .firstName
106+
case "last_name":
107+
self = .lastName
108+
case "text":
109+
self = .text
110+
case "date":
111+
self = .date
112+
case "checkbox":
113+
self = .checkbox
114+
default:
115+
self = .customValue(value)
116+
}
117+
}
118+
119+
public var description: String {
120+
switch self {
121+
case .initial:
122+
return "initial"
123+
case .stamp:
124+
return "stamp"
125+
case .signature:
126+
return "signature"
127+
case .company:
128+
return "company"
129+
case .title:
130+
return "title"
131+
case .email:
132+
return "email"
133+
case .fullName:
134+
return "full_name"
135+
case .firstName:
136+
return "first_name"
137+
case .lastName:
138+
return "last_name"
139+
case .text:
140+
return "text"
141+
case .date:
142+
return "date"
143+
case .checkbox:
144+
return "checkbox"
145+
case let .customValue(value):
146+
return value
147+
}
148+
}
149+
}
150+
151+
// swiftlint:enable cyclomatic_complexity
152+
55153
/// Prefill tags are used to prefill placeholders with signer input data. Only none value field can be included.
56154
public class SignRequestSignerInput: BoxModel {
57155

@@ -71,6 +169,8 @@ public class SignRequestSignerInput: BoxModel {
71169
public let checkboxValue: Bool?
72170
/// Date prefill value
73171
public let dateValue: Date?
172+
/// Content type value
173+
public let contentType: SignRequestSignerInputContentType?
74174

75175
/// Initializer.
76176
///
@@ -84,5 +184,6 @@ public class SignRequestSignerInput: BoxModel {
84184
textValue = try BoxJSONDecoder.optionalDecode(json: json, forKey: "text_value")
85185
checkboxValue = try BoxJSONDecoder.optionalDecode(json: json, forKey: "checkbox_value")
86186
dateValue = try BoxJSONDecoder.optionalDecodeDate(json: json, forKey: "date_value")
187+
contentType = try BoxJSONDecoder.optionalDecodeEnum(json: json, forKey: "content_type")
87188
}
88189
}

Tests/Modules/SignRequestsModuleSpecs.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class SignRequestsModuleSpecs: QuickSpec {
3535
&& hasJsonBody([
3636
"signers": [
3737
[
38-
"email": "[email protected]",
38+
"email": "[email protected]",
3939
"role": "signer",
4040
"redirect_url": "https://box.com/redirect_url_signer_1",
4141
"declined_redirect_url": "https://box.com/declined_redirect_url_signer_1"
@@ -55,7 +55,7 @@ class SignRequestsModuleSpecs: QuickSpec {
5555
"external_id": "123",
5656
"days_valid": 2,
5757
"redirect_url": "https://box.com/redirect_url",
58-
"declined_redirect_url": "https://box.com/declined_redirect_url",
58+
"declined_redirect_url": "https://box.com/declined_redirect_url"
5959
])
6060
) { _ in
6161
OHHTTPStubsResponse(
@@ -109,8 +109,10 @@ class SignRequestsModuleSpecs: QuickSpec {
109109
expect(signRequest.signers[0].declinedRedirectUrl).to(equal("https://box.com/declined_redirect_url_signer_1"))
110110
expect(signRequest.signers[0].inputs?[0].documentTagId).to(equal("1234"))
111111
expect(signRequest.signers[0].inputs?[0].textValue).to(equal("text"))
112+
expect(signRequest.signers[0].inputs?[0].contentType).to(equal(.text))
112113
expect(signRequest.signers[0].inputs?[1].documentTagId).to(equal("4567"))
113114
expect(signRequest.signers[0].inputs?[1].dateValue).to(equal("2021-12-03".iso8601))
115+
expect(signRequest.signers[0].inputs?[1].contentType).to(equal(.date))
114116
expect(signRequest.prefillTags?[0].documentTagId).to(equal("1234"))
115117
expect(signRequest.prefillTags?[0].textValue).to(equal("text"))
116118
expect(signRequest.prefillTags?[1].documentTagId).to(equal("4567"))
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//
2+
// SignRequestSignerInputContentTypeSpecs.swift
3+
// BoxSDKTests-iOS
4+
//
5+
// Created by Minh Nguyen Cong on 30/08/2022.
6+
// Copyright © 2022 box. All rights reserved.
7+
//
8+
9+
@testable import BoxSDK
10+
import Nimble
11+
import Quick
12+
13+
class SignRequestSignerInputContentTypeSpecs: QuickSpec {
14+
15+
override func spec() {
16+
describe("SignRequestSignerInputContentType") {
17+
18+
describe("init()") {
19+
20+
it("should correctly create an enum value from it's string representation") {
21+
expect(SignRequestSignerInputContentType.initial).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.initial.description)))
22+
expect(SignRequestSignerInputContentType.stamp).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.stamp.description)))
23+
expect(SignRequestSignerInputContentType.signature).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.signature.description)))
24+
expect(SignRequestSignerInputContentType.company).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.company.description)))
25+
expect(SignRequestSignerInputContentType.title).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.title.description)))
26+
expect(SignRequestSignerInputContentType.email).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.email.description)))
27+
expect(SignRequestSignerInputContentType.fullName).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.fullName.description)))
28+
expect(SignRequestSignerInputContentType.firstName).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.firstName.description)))
29+
expect(SignRequestSignerInputContentType.lastName).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.lastName.description)))
30+
expect(SignRequestSignerInputContentType.text).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.text.description)))
31+
expect(SignRequestSignerInputContentType.date).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.date.description)))
32+
expect(SignRequestSignerInputContentType.checkbox).to(equal(SignRequestSignerInputContentType(SignRequestSignerInputContentType.checkbox.description)))
33+
expect(SignRequestSignerInputContentType.customValue("custom value")).to(equal(SignRequestSignerInputContentType("custom value")))
34+
}
35+
}
36+
}
37+
}
38+
}

Tests/Responses/SignRequestSpecs.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class SignRequestSpecs: QuickSpec {
5555
expect(signRequest.signers[0].inputs?[0].type).to(equal(.text))
5656
expect(signRequest.signers[0].inputs?[0].textValue).to(equal("text"))
5757
expect(signRequest.signers[0].inputs?[0].pageIndex).to(equal(4))
58+
expect(signRequest.signers[0].inputs?[0].contentType).to(equal(.text))
5859
expect(signRequest.sourceFiles[0].id).to(equal("12345"))
5960
expect(signRequest.sourceFiles[0].etag).to(equal("1"))
6061
expect(signRequest.sourceFiles[0].name).to(equal("Contract.pdf"))

Tests/Stubs/Resources/SignRequests/CancelSignRequest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"document_tag_id": "1234",
2222
"text_value": "text",
2323
"type": "text",
24-
"page_index": 4
24+
"page_index": 4,
25+
"content_type": "text"
2526
}
2627
],
2728
"embed_url": "https://example.com",

Tests/Stubs/Resources/SignRequests/CreateSignRequest.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@
2323
"checkbox_value": null,
2424
"date_value": null,
2525
"type": "text",
26-
"page_index": 4
26+
"page_index": 4,
27+
"content_type": "text"
2728
},
2829
{
2930
"document_tag_id": "4567",
3031
"text_value": "Dec 3, 2021",
3132
"checkbox_value": null,
3233
"date_value": "2021-12-03",
3334
"type": "date",
34-
"page_index": 4
35+
"page_index": 4,
36+
"content_type": "date"
3537
}
3638
],
3739
"embed_url": "https://example.com",

Tests/Stubs/Resources/SignRequests/FullSignRequest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"document_tag_id": "1234",
2222
"text_value": "text",
2323
"type": "text",
24-
"page_index": 4
24+
"page_index": 4,
25+
"content_type": "text"
2526
}
2627
],
2728
"embed_url": "https://example.com",

Tests/Stubs/Resources/SignRequests/GetSignRequest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"document_tag_id": "1234",
2222
"text_value": "text",
2323
"type": "text",
24-
"page_index": 4
24+
"page_index": 4,
25+
"content_type": "text"
2526
}
2627
],
2728
"embed_url": "https://example.com",

Tests/Stubs/Resources/SignRequests/GetSignRequests.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,17 @@
2727
"checkbox_value": null,
2828
"date_value": "2021-04-26",
2929
"type": "date",
30-
"page_index": 0
30+
"page_index": 0,
31+
"content_type": "date"
3132
},
3233
{
3334
"document_tag_id": null,
3435
"text_value": "",
3536
"checkbox_value": null,
3637
"date_value": null,
3738
"type": "signature",
38-
"page_index": 0
39+
"page_index": 0,
40+
"content_type": "signature"
3941
}
4042
],
4143
"embed_url": "https://example.com",

0 commit comments

Comments
 (0)