mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
8.8 KiB
Swift
195 lines
8.8 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import Combine
|
|
import SessionSnodeKit
|
|
import SessionUtilitiesKit
|
|
|
|
import Quick
|
|
import Nimble
|
|
|
|
@testable import SessionMessagingKit
|
|
|
|
class BatchRequestInfoSpec: QuickSpec {
|
|
override class func spec() {
|
|
// MARK: Configuration
|
|
|
|
@TestState var request: OpenGroupAPI.BatchRequest!
|
|
|
|
// MARK: - a BatchRequest.Child
|
|
|
|
describe("a BatchRequest.Child") {
|
|
// MARK: -- when encoding
|
|
context("when encoding") {
|
|
// MARK: ---- successfully encodes a string body
|
|
it("successfully encodes a string body") {
|
|
request = OpenGroupAPI.BatchRequest(
|
|
requests: [
|
|
OpenGroupAPI.PreparedSendData<NoResponse>(
|
|
request: Request<String, OpenGroupAPI.Endpoint>(
|
|
method: .get,
|
|
server: "testServer",
|
|
endpoint: .batch,
|
|
queryParameters: [:],
|
|
headers: [:],
|
|
body: "testBody"
|
|
),
|
|
urlRequest: URLRequest(url: URL(string: "https://www.oxen.io")!),
|
|
publicKey: "",
|
|
responseType: NoResponse.self,
|
|
timeout: 0
|
|
)
|
|
]
|
|
)
|
|
|
|
let requestData: Data? = try? JSONEncoder().encode(request)
|
|
let requestJson: [[String: Any]]? = requestData
|
|
.map { try? JSONSerialization.jsonObject(with: $0) as? [[String: Any]] }
|
|
expect(requestJson?.first?["path"] as? String).to(equal("/batch"))
|
|
expect(requestJson?.first?["method"] as? String).to(equal("GET"))
|
|
expect(requestJson?.first?["b64"] as? String).to(equal("testBody"))
|
|
}
|
|
|
|
// MARK: ---- successfully encodes a byte body
|
|
it("successfully encodes a byte body") {
|
|
request = OpenGroupAPI.BatchRequest(
|
|
requests: [
|
|
OpenGroupAPI.PreparedSendData<NoResponse>(
|
|
request: Request<[UInt8], OpenGroupAPI.Endpoint>(
|
|
method: .get,
|
|
server: "testServer",
|
|
endpoint: .batch,
|
|
queryParameters: [:],
|
|
headers: [:],
|
|
body: [1, 2, 3]
|
|
),
|
|
urlRequest: URLRequest(url: URL(string: "https://www.oxen.io")!),
|
|
publicKey: "",
|
|
responseType: NoResponse.self,
|
|
timeout: 0
|
|
)
|
|
]
|
|
)
|
|
|
|
let requestData: Data? = try? JSONEncoder().encode(request)
|
|
let requestJson: [[String: Any]]? = requestData
|
|
.map { try? JSONSerialization.jsonObject(with: $0) as? [[String: Any]] }
|
|
expect(requestJson?.first?["path"] as? String).to(equal("/batch"))
|
|
expect(requestJson?.first?["method"] as? String).to(equal("GET"))
|
|
expect(requestJson?.first?["bytes"] as? [Int]).to(equal([1, 2, 3]))
|
|
}
|
|
|
|
// MARK: ---- successfully encodes a JSON body
|
|
it("successfully encodes a JSON body") {
|
|
request = OpenGroupAPI.BatchRequest(
|
|
requests: [
|
|
OpenGroupAPI.PreparedSendData<NoResponse>(
|
|
request: Request<TestType, OpenGroupAPI.Endpoint>(
|
|
method: .get,
|
|
server: "testServer",
|
|
endpoint: .batch,
|
|
queryParameters: [:],
|
|
headers: [:],
|
|
body: TestType(stringValue: "testValue")
|
|
),
|
|
urlRequest: URLRequest(url: URL(string: "https://www.oxen.io")!),
|
|
publicKey: "",
|
|
responseType: NoResponse.self,
|
|
timeout: 0
|
|
)
|
|
]
|
|
)
|
|
|
|
let requestData: Data? = try? JSONEncoder().encode(request)
|
|
let requestJson: [[String: Any]]? = requestData
|
|
.map { try? JSONSerialization.jsonObject(with: $0) as? [[String: Any]] }
|
|
expect(requestJson?.first?["path"] as? String).to(equal("/batch"))
|
|
expect(requestJson?.first?["method"] as? String).to(equal("GET"))
|
|
expect(requestJson?.first?["json"] as? [String: String]).to(equal(["stringValue": "testValue"]))
|
|
}
|
|
|
|
// MARK: ---- strips authentication headers
|
|
it("strips authentication headers") {
|
|
let httpRequest: Request<NoBody, OpenGroupAPI.Endpoint> = Request<NoBody, OpenGroupAPI.Endpoint>(
|
|
method: .get,
|
|
server: "testServer",
|
|
endpoint: .batch,
|
|
queryParameters: [:],
|
|
headers: [
|
|
"TestHeader": "Test",
|
|
HTTPHeader.sogsPubKey: "A",
|
|
HTTPHeader.sogsTimestamp: "B",
|
|
HTTPHeader.sogsNonce: "C",
|
|
HTTPHeader.sogsSignature: "D"
|
|
],
|
|
body: nil
|
|
)
|
|
request = OpenGroupAPI.BatchRequest(
|
|
requests: [
|
|
OpenGroupAPI.PreparedSendData<NoResponse>(
|
|
request: httpRequest,
|
|
urlRequest: try! httpRequest.generateUrlRequest(),
|
|
publicKey: "",
|
|
responseType: NoResponse.self,
|
|
timeout: 0
|
|
)
|
|
]
|
|
)
|
|
|
|
let requestData: Data = try! JSONEncoder().encode(request)
|
|
let requestString: String? = String(data: requestData, encoding: .utf8)
|
|
|
|
expect(requestString)
|
|
.toNot(contain([
|
|
HTTPHeader.sogsPubKey,
|
|
HTTPHeader.sogsTimestamp,
|
|
HTTPHeader.sogsNonce,
|
|
HTTPHeader.sogsSignature
|
|
]))
|
|
}
|
|
}
|
|
|
|
// MARK: -- does not strip non authentication headers
|
|
it("does not strip non authentication headers") {
|
|
let httpRequest: Request<NoBody, OpenGroupAPI.Endpoint> = Request<NoBody, OpenGroupAPI.Endpoint>(
|
|
method: .get,
|
|
server: "testServer",
|
|
endpoint: .batch,
|
|
queryParameters: [:],
|
|
headers: [
|
|
"TestHeader": "Test",
|
|
HTTPHeader.sogsPubKey: "A",
|
|
HTTPHeader.sogsTimestamp: "B",
|
|
HTTPHeader.sogsNonce: "C",
|
|
HTTPHeader.sogsSignature: "D"
|
|
],
|
|
body: nil
|
|
)
|
|
request = OpenGroupAPI.BatchRequest(
|
|
requests: [
|
|
OpenGroupAPI.PreparedSendData<NoResponse>(
|
|
request: httpRequest,
|
|
urlRequest: try! httpRequest.generateUrlRequest(),
|
|
publicKey: "",
|
|
responseType: NoResponse.self,
|
|
timeout: 0
|
|
)
|
|
]
|
|
)
|
|
|
|
let requestData: Data = try! JSONEncoder().encode(request)
|
|
let requestString: String? = String(data: requestData, encoding: .utf8)
|
|
|
|
expect(requestString)
|
|
.to(contain("\"TestHeader\":\"Test\""))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Test Types
|
|
|
|
fileprivate struct TestType: Codable, Equatable {
|
|
let stringValue: String
|
|
}
|