// // ResponseTests.swift // PSCB-OOS-iOSTests // // Created by Antonov Ilia on 23.10.2020. // import Foundation import XCTest @testable import PSCBOnline final class ResponseTests: XCTestCase { private let mockResponse: String = { return """ { "status":"STATUS_SUCCESS", "requestId":"PROD-141024-103898B", "payment":{ "orderId":"1111103", "showOrderId":"1111103", "paymentId":"8067739", "account":"shpa", "amount":1350.89, "state":"sent", "marketPlace":47607, "paymentMethod":"ac-shpa", "stateDate":"2014-10-24T10:38:40.501+04:00" }, "PaReq":"eJydk01TgzAQhu/+CgbPkpBihU6IU60fVWmr4jjjxcnAjkXLRwN12n/", "order":"22040229", "TermUrl":"https://oos.pscb.ru/merchantApi/confirmShpa", "URL":"https://acs.multicarta.ru/PaReqVISA.jsp", "MD":"NTJmZTFjMWEtNjQ0Mi00ODQ2LTlkMjMtZDU0MzdkYzA0N2Fk" } """ }() private let anotherMockResponse: String = { """ {"status":"STATUS_SUCCESS","requestId":"DEMO-201102-1652-2BE12","payment":{"orderId":"XC-33353","showOrderId":"XC-33353","paymentId":"229359620","account":null,"amount":155.35,"state":"end","marketPlace":12345,"paymentMethod":"ac-shpa","stateDate":"2020-11-02T16:52:16.563+03:00"},"description":"Payment processed successfully"} """ }() private let dateFormatter: DateFormatter = { let fmtString = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" let formatter = DateFormatter() formatter.dateFormat = fmtString return formatter }() func testDecodeResponse() { // given: let responseData = mockResponse.data(using: .utf8)! let decoder = JSONDecoders.iso8601DateAwareDecoder() // expect: XCTAssertNoThrow(try decoder.decode(Response.self, from: responseData)) // when: let response = try! decoder.decode(Response.self, from: responseData) // then: XCTAssertEqual(response.requestId, "PROD-141024-103898B") XCTAssertEqual(response.status, .success) // when: let payment = response.payment! // then: XCTAssertEqual(payment.state, .sent) XCTAssertEqual(payment.amount, Decimal(1350.89)) XCTAssertEqual(payment.marketPlace, 47607) XCTAssertEqual(payment.orderId, "1111103") XCTAssertEqual(payment.showOrderId, "1111103") XCTAssertEqual(payment.stateDate, dateFormatter.date(from: "2014-10-24T10:38:40.501+04:00")) XCTAssertEqual(payment.paymentId, "8067739") // when: let acquiringData = response.acquiringData // then: XCTAssertEqual(acquiringData?.order, "22040229") } func testDecodeResponse_another() { // given: let responseData = anotherMockResponse.data(using: .utf8)! let decoder = JSONDecoders.iso8601DateAwareDecoder() // expect: XCTAssertNoThrow(try decoder.decode(Response.self, from: responseData)) // when: let response = try! decoder.decode(Response.self, from: responseData) // then: XCTAssertEqual(response.requestId, "DEMO-201102-1652-2BE12") XCTAssertEqual(response.status, .success) XCTAssertEqual(response.description, "Payment processed successfully") // when: let payment = response.payment! // then: XCTAssertEqual(payment.state, .end) XCTAssertEqual(payment.amount, Decimal(155.35)) XCTAssertEqual(payment.marketPlace, 12345) XCTAssertEqual(payment.orderId, "XC-33353") XCTAssertEqual(payment.showOrderId, "XC-33353") XCTAssertEqual(payment.stateDate, dateFormatter.date(from: "2020-11-02T16:52:16.563+03:00")) XCTAssertEqual(payment.paymentId, "229359620") } }