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
 | |
| }
 |