Skip to content
This repository has been archived by the owner on Dec 7, 2022. It is now read-only.

V2 updates #38

Merged
merged 8 commits into from
Aug 31, 2021
Merged
17 changes: 13 additions & 4 deletions FiskalySDK.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
/* Begin PBXBuildFile section */
1FA3FA8E2491671A00348FDE /* FiskalyRequestClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA3FA8D2491671A00348FDE /* FiskalyRequestClient.swift */; };
6AAD637224606FEF00D2E36A /* FiskalyClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAD637124606FEF00D2E36A /* FiskalyClientTests.swift */; };
6AAD63742460700B00D2E36A /* FiskalyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAD63732460700B00D2E36A /* FiskalyAPITests.swift */; };
6AAD63742460700B00D2E36A /* FiskalyAPITestsV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAD63732460700B00D2E36A /* FiskalyAPITestsV1.swift */; };
6AD8BBF024486B18000D47BD /* JsonRpcRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD8BBEF24486B18000D47BD /* JsonRpcRequest.swift */; };
6AD8BBF924488C73000D47BD /* JsonRpcResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD8BBF824488C73000D47BD /* JsonRpcResponse.swift */; };
6AD8BBFB24488C82000D47BD /* JsonRpcError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD8BBFA24488C82000D47BD /* JsonRpcError.swift */; };
Expand All @@ -34,6 +34,9 @@
D9BFF5C4244629610032D061 /* FiskalySDKTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9BFF5C3244629610032D061 /* FiskalySDKTests.swift */; };
D9BFF5C6244629610032D061 /* FiskalySDK.h in Headers */ = {isa = PBXBuildFile; fileRef = D9BFF5B8244629610032D061 /* FiskalySDK.h */; settings = {ATTRIBUTES = (Public, ); }; };
D9F90FEF24478702002057D3 /* FiskalyHttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F90FEE24478702002057D3 /* FiskalyHttpClient.swift */; };
E98898022695B28E00508F08 /* FiskalyAPITestsV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = E98898012695B28E00508F08 /* FiskalyAPITestsV2.swift */; };
E98898042695C58D00508F08 /* FiskalyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E98898032695C58D00508F08 /* FiskalyAPITests.swift */; };
E99EA8502678968A00B04017 /* com.fiskaly.client-ios-all-v1.2.200.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E99EA84F2678968A00B04017 /* com.fiskaly.client-ios-all-v1.2.200.xcframework */; };
E94CE9AD26C2D84800451C4E /* com.fiskaly.client-ios-all-v2.0.0 in Frameworks */ = {isa = PBXBuildFile; productRef = E94CE9AC26C2D84800451C4E /* com.fiskaly.client-ios-all-v2.0.0 */; };
/* End PBXBuildFile section */

Expand All @@ -50,7 +53,7 @@
/* Begin PBXFileReference section */
1FA3FA8D2491671A00348FDE /* FiskalyRequestClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyRequestClient.swift; sourceTree = "<group>"; };
6AAD637124606FEF00D2E36A /* FiskalyClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyClientTests.swift; sourceTree = "<group>"; };
6AAD63732460700B00D2E36A /* FiskalyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyAPITests.swift; sourceTree = "<group>"; };
6AAD63732460700B00D2E36A /* FiskalyAPITestsV1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyAPITestsV1.swift; sourceTree = "<group>"; };
6AD8BBEF24486B18000D47BD /* JsonRpcRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonRpcRequest.swift; sourceTree = "<group>"; };
6AD8BBF824488C73000D47BD /* JsonRpcResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonRpcResponse.swift; sourceTree = "<group>"; };
6AD8BBFA24488C82000D47BD /* JsonRpcError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonRpcError.swift; sourceTree = "<group>"; };
Expand All @@ -68,6 +71,8 @@
D9F90FF424478A8C002057D3 /* readme.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = readme.md; sourceTree = "<group>"; };
E94CE9A926C2B00400451C4E /* FiskalyClient */ = {isa = PBXFileReference; lastKnownFileType = folder; path = FiskalyClient; sourceTree = "<group>"; };
E951483C268233DC0026A559 /* build_xcframework.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = build_xcframework.sh; sourceTree = "<group>"; };
E98898012695B28E00508F08 /* FiskalyAPITestsV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyAPITestsV2.swift; sourceTree = "<group>"; };
E98898032695C58D00508F08 /* FiskalyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiskalyAPITests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -160,7 +165,9 @@
D9BFF5C3244629610032D061 /* FiskalySDKTests.swift */,
D9BFF5C5244629610032D061 /* Info.plist */,
6AAD637124606FEF00D2E36A /* FiskalyClientTests.swift */,
6AAD63732460700B00D2E36A /* FiskalyAPITests.swift */,
6AAD63732460700B00D2E36A /* FiskalyAPITestsV1.swift */,
E98898012695B28E00508F08 /* FiskalyAPITestsV2.swift */,
E98898032695C58D00508F08 /* FiskalyAPITests.swift */,
);
path = FiskalySDKTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -325,8 +332,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6AAD63742460700B00D2E36A /* FiskalyAPITests.swift in Sources */,
6AAD63742460700B00D2E36A /* FiskalyAPITestsV1.swift in Sources */,
6AAD637224606FEF00D2E36A /* FiskalyClientTests.swift in Sources */,
E98898022695B28E00508F08 /* FiskalyAPITestsV2.swift in Sources */,
E98898042695C58D00508F08 /* FiskalyAPITests.swift in Sources */,
D9BFF5C4244629610032D061 /* FiskalySDKTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
19 changes: 11 additions & 8 deletions FiskalySDK/Classes/FiskalyHttpClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Foundation

public class FiskalyHttpClient {

private var context: String
private var context: String = ""
private let client: RequestClient

/*
Expand All @@ -16,16 +16,14 @@ public class FiskalyHttpClient {
password: String? = "",
organizationId: String? = "",
environment: String? = "",
client: RequestClient = FiskalyRequestClient()) throws {
client: RequestClient = FiskalyRequestClient(),
miceUrl: String? = nil
) throws {
self.client = client

// this needs to be done because xcode cries that self.context is used before be initialized

self.context = ""

// version is hardcorded because using versionNumber from header file strips patch number

let contextRequestParams: [String: Any] = [
var contextRequestParams: [String: Any] = [
"api_key": apiKey as Any,
"api_secret": apiSecret as Any,
"base_url": baseUrl,
Expand All @@ -35,6 +33,11 @@ public class FiskalyHttpClient {
"environment": environment as Any,
"sdk_version": "iOS SDK 1.2.100"
]

//this should only be set for v2
if let miceUrl = miceUrl {
contextRequestParams["mice_url"] = miceUrl
}

let request = JsonRpcRequest(method: "create-context", params: contextRequestParams)
let response = try performJsonRpcRequest(request: request, ResultCreateContext.self)
Expand Down Expand Up @@ -196,7 +199,7 @@ public class FiskalyHttpClient {
throw FiskalyError.sdkError(message: "Client response not decodable into class. \(error), data = \(jsonData)")
}

print(response.error?.data?.response.body ?? "NO ERROR")
print(response.error?.data?.response.body ?? response.error?.message ?? "NO ERROR")
return response

}
Expand Down
190 changes: 62 additions & 128 deletions FiskalySDKTests/FiskalyAPITests.swift
Original file line number Diff line number Diff line change
@@ -1,138 +1,72 @@
//
// FiskalyAPITests.swift
// FiskalySDKTests
//
// Created by Angela Brett on 07.07.21.
// Copyright © 2021 fiskaly. All rights reserved.
//

import Foundation

import XCTest
@testable import FiskalySDK

//Superclass that sets up the client to have verbose logging and outputs the logging from the client into the console so you have more detail if a test fails.
class FiskalyAPITests: XCTestCase {

func testKassensichvRequest() throws {
let client = try FiskalyHttpClient(
apiKey: ProcessInfo.processInfo.environment["API_KEY"]!,
apiSecret: ProcessInfo.processInfo.environment["API_SECRET"]!,
baseUrl: "https://kassensichv.io/api/v1/"
)
let response = try client.request(
method: "GET",
path: "/tss")
XCTAssertEqual(response.status, 200)
var client:FiskalyHttpClient?
private var logPath:String?

func setUpLogging(methodName:String) {
//set up debug logging within the client library so we can show more detail in the test log

//methodName is the full name of the currently running test, Objective-C style, e.g. -[FiskalyAPITestsV2 testTransactionRequest], so we trim it down to just e.g. testTransactionRequest
let testName = methodName.replacingOccurrences(of: "-[\(String(describing: Self.self)) ", with: "").replacingOccurrences(of: "]", with: "")

let path = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("fiskaly-tests-\(testName)").appendingPathExtension("log").path
logPath = path

do {
//remove the previous log for this test so we can just show the results for this run
if FileManager.default.fileExists(atPath: path) {
try FileManager.default.removeItem(atPath: path)
}

//set up client logging for this test
let _ = try client?.config(
debugLevel: 3,
debugFile: logPath,
clientTimeout: 1500,
smaersTimeout: 1500,
httpProxy: "")
print("Client log is at \(logPath ?? "")")
} catch {
print("Could not set up client logging: \(error)")
//we can still continue with the test in this case
}
}

func testManagementRequest() throws {
let client = try FiskalyHttpClient(
apiKey: "",
apiSecret: "",
baseUrl: "https://dashboard.fiskaly.com/api/v0/",
email: ProcessInfo.processInfo.environment["EMAIL"]!,
password: ProcessInfo.processInfo.environment["PASSWORD"]!
)
let response = try client.request(
method: "GET",
path: "/organizations")
XCTAssertEqual(response.status, 200)
func showClientLog() {
//now show all the logging from the client during this test
if let logPath = logPath {
if let logContents = try? String(contentsOfFile: logPath) {
print("Log contents: \(logContents)")
}
}
}

func testTransactionRequest() throws {
let client = try FiskalyHttpClient(
apiKey: ProcessInfo.processInfo.environment["API_KEY"]!,
apiSecret: ProcessInfo.processInfo.environment["API_SECRET"]!,
baseUrl: "https://kassensichv.io/api/v1/"
)

// create TSS

let tssUUID = UUID().uuidString

let tssBody = [
"description": "iOS Test TSS",
"state": "INITIALIZED"
]
let tssBodyData = try? JSONSerialization.data(withJSONObject: tssBody)
let tssBodyEncoded = tssBodyData?.base64EncodedString()

let responseCreateTSS = try client.request(
method: "PUT",
path: "tss/\(tssUUID)",
body: tssBodyEncoded!)
XCTAssertEqual(responseCreateTSS.status, 200)

// create Client

let clientUUID = UUID().uuidString

let clientBody = [
"serial_number": "iOS Test Client Serial"
]
let clientBodyData = try? JSONSerialization.data(withJSONObject: clientBody)
let clientBodyEncoded = clientBodyData?.base64EncodedString()

let responseCreateClient = try client.request(
method: "PUT",
path: "tss/\(tssUUID)/client/\(clientUUID)",
body: clientBodyEncoded!)
XCTAssertEqual(responseCreateClient.status, 200)

// create Transaction

let transactionUUID = UUID().uuidString

let transactionBody = [
"state": "ACTIVE",
"client_id": clientUUID
]
let transactionBodyData = try? JSONSerialization.data(withJSONObject: transactionBody)
let transactionBodyEncoded = transactionBodyData?.base64EncodedString()

let responseCreateTransaction = try client.request(
method: "PUT",
path: "tss/\(tssUUID)/tx/\(transactionUUID)",
body: transactionBodyEncoded!)
XCTAssertEqual(responseCreateTransaction.status, 200)

// finish Transaction

let transactionFinishBody: [String: Any] = [
"state": "FINISHED",
"client_id": clientUUID,
"schema": [
"standard_v1": [
"receipt": [
"receipt_type": "RECEIPT",
"amounts_per_vat_rate": [
["vat_rate": "19", "amount": "14.28"]
],
"amounts_per_payment_type": [
["payment_type": "NON_CASH", "amount": "14.28"]
]
]
]
]
]
let transactionFinishBodyData = try? JSONSerialization.data(withJSONObject: transactionFinishBody)
let transactionFinishBodyEncoded = transactionFinishBodyData?.base64EncodedString()

let responseFinishTransaction = try client.request(
method: "PUT",
path: "tss/\(tssUUID)/tx/\(transactionUUID)",
query: ["last_revision": "1"],
body: transactionFinishBodyEncoded!)
XCTAssertEqual(responseFinishTransaction.status, 200)
}

func testQueryArray() throws {
let client = try FiskalyHttpClient(
apiKey: ProcessInfo.processInfo.environment["API_KEY"]!,
apiSecret: ProcessInfo.processInfo.environment["API_SECRET"]!,
baseUrl: "https://kassensichv.io/api/v1/"
)

let query: [String: Any] = [
"states": ["INITIALIZED", "DISABLED"]
]


func clientRequest(method: String, path: String, query: [String : Any]? = nil, body: Any? = nil, headers:[String:String]? = nil) throws -> FiskalySDK.HttpResponse {
guard let client = self.client else {
throw FiskalyError.sdkError(message: "Client could not be initialised")
}

let bodyData = try JSONSerialization.data(withJSONObject: body ?? Dictionary<String, Any>())
let bodyString = bodyData.base64EncodedString()
let response = try client.request(
method: "GET",
path: "/tss",
query: query)
method: method,
path: path,
query: query,
headers: headers,
body: bodyString)
XCTAssertEqual(response.status, 200)

return response
}

}
Loading