This change should have no user impact. We use "timestamp", all lowercase, in most of the codebase. This makes it consistent.
92 lines
3.9 KiB
Swift
92 lines
3.9 KiB
Swift
//
|
|
// Copyright (c) 2022 Open Whisper Systems. All rights reserved.
|
|
//
|
|
|
|
import XCTest
|
|
import SignalServiceKit
|
|
|
|
class OWSRequestFactoryTest: SSKBaseTestSwift {
|
|
private func getUdAccessKey() throws -> SMKUDAccessKey {
|
|
let profileKey = Data(count: Int(kAES256_KeyByteLength))
|
|
let result = try? SMKUDAccessKey(profileKey: profileKey)
|
|
return try XCTUnwrap(result)
|
|
}
|
|
|
|
private func queryItemsAsDictionary(url: URL) throws -> [String: String] {
|
|
let urlComponents = try XCTUnwrap(URLComponents(url: url, resolvingAgainstBaseURL: false), "URL components")
|
|
let queryItems = urlComponents.queryItems ?? []
|
|
var result = [String: String]()
|
|
for queryItem in queryItems {
|
|
XCTAssertNil(result[queryItem.name], "Duplicate query item \(queryItem.name)")
|
|
result[queryItem.name] = queryItem.value
|
|
}
|
|
return result
|
|
}
|
|
|
|
func testSubmitMessageRequest() throws {
|
|
let udAccessKey = try getUdAccessKey()
|
|
|
|
let recipientUuid = UUID()
|
|
|
|
let request = OWSRequestFactory.submitMessageRequest(
|
|
with: SignalServiceAddress(uuid: recipientUuid),
|
|
messages: [],
|
|
timestamp: 1234,
|
|
udAccessKey: udAccessKey,
|
|
isOnline: true,
|
|
isUrgent: false
|
|
)
|
|
|
|
let url = try XCTUnwrap(request.url, "request.url")
|
|
XCTAssertEqual(request.httpMethod, "PUT")
|
|
XCTAssertEqual(url.path, "v1/messages/\(recipientUuid.uuidString)")
|
|
XCTAssertEqual(Set(request.parameters.keys), Set(["messages", "timestamp", "online", "urgent"]))
|
|
XCTAssertEqual(request.parameters["messages"] as? NSArray, [])
|
|
XCTAssertEqual(request.parameters["timestamp"] as? UInt, 1234)
|
|
XCTAssertEqual(request.parameters["online"] as? Bool, true)
|
|
XCTAssertEqual(request.parameters["urgent"] as? Bool, false)
|
|
XCTAssertEqual(request.allHTTPHeaderFields?["Unidentified-Access-Key"], udAccessKey.keyData.base64EncodedString())
|
|
}
|
|
|
|
func testSubmitMultiRecipientMessageRequest() throws {
|
|
let ciphertext = try XCTUnwrap("hello".data(using: .utf8))
|
|
let udAccessKey = try getUdAccessKey()
|
|
|
|
let request = OWSRequestFactory.submitMultiRecipientMessageRequest(
|
|
ciphertext: ciphertext,
|
|
compositeUDAccessKey: udAccessKey,
|
|
timestamp: 1234,
|
|
isOnline: true,
|
|
isUrgent: false
|
|
)
|
|
|
|
let url = try XCTUnwrap(request.url, "request.url")
|
|
XCTAssertEqual(request.httpMethod, "PUT")
|
|
XCTAssertEqual(url.path, "v1/messages/multi_recipient")
|
|
XCTAssertEqual(try queryItemsAsDictionary(url: url), ["ts": "1234", "online": "true", "urgent": "false"])
|
|
XCTAssertEqual(request.allHTTPHeaderFields?["Content-Type"], "application/vnd.signal-messenger.mrm")
|
|
XCTAssertEqual(request.allHTTPHeaderFields?["Unidentified-Access-Key"], udAccessKey.keyData.base64EncodedString())
|
|
XCTAssertEqual(request.httpBody, ciphertext)
|
|
}
|
|
|
|
func testBoostCreatePaymentIntentWithAmount() {
|
|
let request = OWSRequestFactory.boostCreatePaymentIntent(withAmount: 123, inCurrencyCode: "CHF", level: 456)
|
|
|
|
XCTAssertEqual(request.url?.path, "v1/subscription/boost/create")
|
|
XCTAssertEqual(request.httpMethod, "POST")
|
|
XCTAssertEqual(Set(request.parameters.keys), Set(["currency", "amount", "level"]))
|
|
XCTAssertEqual(request.parameters["currency"] as? String, "chf")
|
|
XCTAssertEqual(request.parameters["amount"] as? UInt, 123)
|
|
XCTAssertEqual(request.parameters["level"] as? UInt64, 456)
|
|
XCTAssertFalse(request.shouldHaveAuthorizationHeaders)
|
|
}
|
|
|
|
func testGiftBadgePricesRequest() throws {
|
|
let request = OWSRequestFactory.giftBadgePricesRequest()
|
|
|
|
XCTAssertEqual(request.url?.path, "v1/subscription/boost/amounts/gift")
|
|
XCTAssertEqual(request.httpMethod, "GET")
|
|
XCTAssertTrue(request.parameters.isEmpty)
|
|
}
|
|
}
|