Skip to content
This repository was archived by the owner on Mar 18, 2025. It is now read-only.

Commit 2850495

Browse files
committed
Add support to message and otp on create transaction
1 parent 3abf3f0 commit 2850495

File tree

8 files changed

+50
-21
lines changed

8 files changed

+50
-21
lines changed

Source/Model/Card.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,24 @@ open class Card: BaseModel, Mappable {
122122
- returns: A promise with the transaction.
123123
*/
124124
open func createTransaction(commit: Bool, transactionRequest: TransactionRequest) -> Promise<Transaction> {
125+
return createTransaction(commit: commit, otp: nil, transactionRequest: transactionRequest)
126+
}
127+
128+
/**
129+
Creates a transaction.
130+
131+
- parameter commit: A boolean to indicate if it is to commit the transaction on the creation process.
132+
- parameter otp: The otp code to confirm the transaction.
133+
- parameter transactionRequest: The transaction request information.
134+
135+
- returns: A promise with the transaction.
136+
*/
137+
open func createTransaction(commit: Bool, otp: String?, transactionRequest: TransactionRequest) -> Promise<Transaction> {
125138
guard let id = self.id else {
126139
return Promise<Transaction>(error: UnexpectedResponseError(message: "Card id should not be nil."))
127140
}
128141

129-
let request = self.adapter.buildRequest(request: UserCardService.createTransaction(cardId: id, commit: commit, transactionRequest: Mapper().toJSON(transactionRequest)))
142+
let request = self.adapter.buildRequest(request: UserCardService.createTransaction(cardId: id, commit: commit, otp: otp, transactionRequest: Mapper().toJSON(transactionRequest)))
130143

131144
return self.adapter.buildResponse(request: request)
132145
}

Source/Model/Transaction/TransactionCardDepositRequest.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ open class TransactionCardDepositRequest: TransactionDepositRequest {
1111
Constructor.
1212

1313
- parameter denomination: The denomination of the transaction request.
14+
- parameter message: The message of the transaction request in case of a deposit.
1415
- parameter origin: The origin of the transaction request in case of a deposit.
1516
- parameter securityCode: The card's security code.
1617
*/
17-
public init(denomination: TransactionDenominationRequest, origin: String, securityCode: String) {
18-
super.init(denomination: denomination, origin: origin)
18+
public init(denomination: TransactionDenominationRequest, message: String?, origin: String, securityCode: String) {
19+
super.init(denomination: denomination, message: message, origin: origin)
1920

2021
self.securityCode = securityCode
2122
}

Source/Model/Transaction/TransactionDepositRequest.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ open class TransactionDepositRequest: TransactionRequest {
1111
Constructor.
1212

1313
- parameter denomination: The denomination of the transaction request.
14+
- parameter message: The message of the transaction request in case of a deposit.
1415
- parameter origin: The origin of the transaction request in case of a deposit.
1516
*/
16-
public init(denomination: TransactionDenominationRequest, origin: String) {
17-
super.init(denomination: denomination)
17+
public init(denomination: TransactionDenominationRequest, message: String?, origin: String) {
18+
super.init(denomination: denomination, message: message)
1819

1920
self.origin = origin
2021
}

Source/Model/Transaction/TransactionRequest.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@ open class TransactionRequest: Mappable {
77
/// The denomination of the transaction request.
88
public private(set) final var denomination: TransactionDenominationRequest?
99

10+
/// The transaction message.
11+
public private(set) final var message: String?
12+
1013
/**
1114
Constructor.
1215

1316
- parameter denomination: The denomination of the transaction request.
17+
- parameter message: The transaction message.
1418
*/
15-
public init(denomination: TransactionDenominationRequest) {
19+
public init(denomination: TransactionDenominationRequest, message: String?) {
1620
self.denomination = denomination
21+
self.message = message
1722
}
1823

1924
// MARK: Required by the ObjectMapper.
@@ -33,6 +38,7 @@ open class TransactionRequest: Mappable {
3338
*/
3439
open func mapping(map: Map) {
3540
self.denomination <- map["denomination"]
41+
self.message <- map["message"]
3642
}
3743

3844
}

Source/Model/Transaction/TransactionTransferRequest.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ open class TransactionTransferRequest: TransactionRequest {
1111
Constructor.
1212

1313
- parameter denomination: The denomination of the transaction request.
14+
- parameter message: The message of the transaction request.
1415
- parameter destination: The destination of the transaction request.
1516
*/
16-
public init(denomination: TransactionDenominationRequest, destination: String) {
17-
super.init(denomination: denomination)
17+
public init(denomination: TransactionDenominationRequest, message: String?, destination: String) {
18+
super.init(denomination: denomination, message: message)
1819

1920
self.destination = destination
2021
}

Source/Service/UserCardService.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,14 @@ open class UserCardService {
6363

6464
- returns: A request to create a transaction.
6565
*/
66-
static func createTransaction(cardId: String, commit: Bool, transactionRequest: Any) -> Request {
67-
return UpholdClient().post(url: String(format: "/v0/me/cards/%@/transactions", cardId)).query(query: ["commit": commit ? "true" : "false"]).send(data: transactionRequest)
66+
static func createTransaction(cardId: String, commit: Bool, otp: String?, transactionRequest: Any) -> Request {
67+
var request = UpholdClient().post(url: String(format: "/v0/me/cards/%@/transactions", cardId)).query(query: ["commit": commit ? "true" : "false"]).send(data: transactionRequest)
68+
69+
if let otp = otp {
70+
request = request.set(key: "OTP-Token", value: otp)
71+
}
72+
73+
return request
6874
}
6975

7076
/**

Tests/IntegrationTests/ModelTests/CardTest.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class CardTest: UpholdTestCase {
163163

164164
card.adapter = MockRestAdapter(body: json)
165165
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
166-
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, origin: "foobiz", securityCode: "1234")
166+
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, message: "foobar", origin: "foobiz", securityCode: "1234")
167167

168168
card.createTransaction(transactionRequest: transactionCardDepositRequest).then { (transaction: Transaction) -> Void in
169169
XCTAssertEqual(transaction.createdAt, "2014-08-27T00:01:11.616Z", "Failed: Wrong transaction createdAt.")
@@ -234,7 +234,7 @@ class CardTest: UpholdTestCase {
234234
let card: Card = Mapper().map(JSONString: "{}")!
235235
card.adapter = MockRestAdapter()
236236
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
237-
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, origin: "foobar", securityCode: "1234")
237+
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, message: nil, origin: "foobar", securityCode: "1234")
238238

239239
card.createTransaction(transactionRequest: transactionCardDepositRequest).catch(execute: { (error: Error) in
240240
guard let error = error as? UnexpectedResponseError else {
@@ -258,7 +258,7 @@ class CardTest: UpholdTestCase {
258258
let card: Card = Fixtures.loadCard()
259259
card.adapter = MockRestAdapter(body: Mapper().toJSONString(Fixtures.loadTransaction(fields: ["transactionId": "foobar"]))!)
260260
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
261-
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, origin: "foobar", securityCode: "1234")
261+
let transactionCardDepositRequest = TransactionCardDepositRequest(denomination: transactionDenominationRequest, message: "fuz", origin: "foobar", securityCode: "1234")
262262

263263
card.createTransaction(commit: true, transactionRequest: transactionCardDepositRequest).then { (transaction: Transaction) -> Void in
264264
XCTAssertEqual(transaction.id, "foobar", "Failed: Wrong transaction id.")
@@ -281,7 +281,7 @@ class CardTest: UpholdTestCase {
281281

282282
card.adapter = MockRestAdapter(body: json)
283283
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
284-
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, origin: "foobiz")
284+
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, message: nil, origin: "foobiz")
285285

286286
card.createTransaction(transactionRequest: transactionDepositRequest).then { (transaction: Transaction) -> Void in
287287
XCTAssertEqual(transaction.id, "foobar", "Failed: Wrong transaction id.")
@@ -301,7 +301,7 @@ class CardTest: UpholdTestCase {
301301
let card: Card = Mapper().map(JSONString: "{}")!
302302
card.adapter = MockRestAdapter()
303303
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
304-
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, origin: "foobar")
304+
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, message: nil, origin: "foobar")
305305

306306
card.createTransaction(transactionRequest: transactionDepositRequest).catch(execute: { (error: Error) in
307307
guard let error = error as? UnexpectedResponseError else {
@@ -325,7 +325,7 @@ class CardTest: UpholdTestCase {
325325
let card: Card = Fixtures.loadCard()
326326
card.adapter = MockRestAdapter(body: Mapper().toJSONString(Fixtures.loadTransaction(fields: ["transactionId": "foobar"]))!)
327327
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
328-
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, origin: "foobar")
328+
let transactionDepositRequest = TransactionDepositRequest(denomination: transactionDenominationRequest, message: nil, origin: "foobar")
329329

330330
card.createTransaction(commit: true, transactionRequest: transactionDepositRequest).then { (transaction: Transaction) -> Void in
331331
XCTAssertEqual(transaction.id, "foobar", "Failed: Wrong transaction id.")
@@ -347,11 +347,12 @@ class CardTest: UpholdTestCase {
347347
"}"
348348
card.adapter = MockRestAdapter(body: json)
349349
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
350-
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, destination: "foobiz")
350+
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, message: "foobar", destination: "foobiz")
351351

352352
card.createTransaction(transactionRequest: transactionRequest).then { (transaction: Transaction) -> Void in
353353
XCTAssertEqual(transaction.id, "foobar", "Failed: Wrong transaction id.")
354354
XCTAssertEqual(transactionRequest.destination, "foobiz", "Failed: Wrong transaction destination.")
355+
XCTAssertEqual(transactionRequest.message, "foobar", "Failed: Wrong transaction message.")
355356

356357
testExpectation.fulfill()
357358
}.catch(execute: { (_: Error) in
@@ -367,7 +368,7 @@ class CardTest: UpholdTestCase {
367368
let card: Card = Mapper().map(JSONString: "{}")!
368369
card.adapter = MockRestAdapter()
369370
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
370-
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, destination: "foobar")
371+
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, message: nil, destination: "foobar")
371372

372373
card.createTransaction(transactionRequest: transactionRequest).catch(execute: { (error: Error) in
373374
guard let error = error as? UnexpectedResponseError else {
@@ -391,7 +392,7 @@ class CardTest: UpholdTestCase {
391392
let card: Card = Fixtures.loadCard()
392393
card.adapter = MockRestAdapter(body: Mapper().toJSONString(Fixtures.loadTransaction(fields: ["transactionId": "foobar"]))!)
393394
let transactionDenominationRequest = TransactionDenominationRequest(amount: "foo", currency: "bar")
394-
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, destination: "foobar")
395+
let transactionRequest = TransactionTransferRequest(denomination: transactionDenominationRequest, message: "foobuz", destination: "foobar")
395396

396397
card.createTransaction(commit: true, transactionRequest: transactionRequest).then { (transaction: Transaction) -> Void in
397398
XCTAssertEqual(transaction.id, "foobar", "Failed: Wrong transaction id.")

Tests/IntegrationTests/ServiceTests/UserCardServiceTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class UserCardServiceTest: XCTestCase {
3939
}
4040

4141
func testCreateTransactionShouldReturnTheRequest() {
42-
let request = UserCardService.createTransaction(cardId: "bar", commit: false, transactionRequest: "foobar")
42+
let request = UserCardService.createTransaction(cardId: "bar", commit: false, otp: "foo", transactionRequest: "foobar")
4343

4444
XCTAssertEqual(request.url, String(format: "%@/v0/me/cards/bar/transactions", GlobalConfigurations.UPHOLD_API_URL), "Failed: Wrong URL.")
4545
XCTAssertEqual(request.query.count, 1, "Failed: Wrong number of query parameters.")
@@ -49,7 +49,7 @@ class UserCardServiceTest: XCTestCase {
4949
}
5050

5151
func testCreateTransactionWithCommitShouldReturnTheRequest() {
52-
let request = UserCardService.createTransaction(cardId: "bar", commit: true, transactionRequest: "foobar")
52+
let request = UserCardService.createTransaction(cardId: "bar", commit: true, otp: "foo", transactionRequest: "foobar")
5353

5454
XCTAssertEqual(request.url, String(format: "%@/v0/me/cards/bar/transactions", GlobalConfigurations.UPHOLD_API_URL), "Failed: Wrong URL.")
5555
XCTAssertEqual(request.query.count, 1, "Failed: Wrong number of query parameters.")

0 commit comments

Comments
 (0)