61 lines
1.9 KiB
Swift
61 lines
1.9 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import XCTest
|
|
import SignalServiceKit
|
|
|
|
final class AccountDataReportTest: XCTestCase {
|
|
func testWithValidData() throws {
|
|
let rawData = "{\"foo\":\"bar\", \"text\": \"baz\"}".data(using: .ascii)!
|
|
let report = try XCTUnwrap(AccountDataReport(rawData: rawData))
|
|
|
|
let parsedJson = try {
|
|
let jsonValue = try JSONSerialization.jsonObject(with: report.formattedJsonData)
|
|
return jsonValue as! [String: String]
|
|
}()
|
|
XCTAssertEqual(parsedJson, ["foo": "bar", "text": "baz"])
|
|
XCTAssertEqual(report.textData, "baz".data(using: .ascii)!)
|
|
}
|
|
|
|
func testWithValidDataButNoText() throws {
|
|
let rawData = "{\"foo\": \"bar\"}".data(using: .ascii)!
|
|
let report = try XCTUnwrap(AccountDataReport(rawData: rawData))
|
|
|
|
XCTAssertEqual(report.formattedJsonData, "{\n \"foo\" : \"bar\"\n}".data(using: .ascii)!)
|
|
XCTAssertNil(report.textData)
|
|
}
|
|
|
|
func testWithValidDataButNonstringText() throws {
|
|
let jsonStrings: [String] = [
|
|
"{}",
|
|
"{\"missing\": \"text field\"}",
|
|
"{\"text\": null}",
|
|
"{\"text\": 123}",
|
|
"{\"TEXT\": \"should be ignored\"}"
|
|
]
|
|
|
|
for jsonString in jsonStrings {
|
|
let rawData = jsonString.data(using: .ascii)!
|
|
let report = try XCTUnwrap(AccountDataReport(rawData: rawData))
|
|
|
|
XCTAssertNil(report.textData)
|
|
}
|
|
}
|
|
|
|
func testWithInvalidData() {
|
|
let rawDatas: [Data] = [
|
|
Data(),
|
|
Data([1, 2, 3]),
|
|
"\"not an object\"".data(using: .ascii)!,
|
|
"[\"not an object\"]".data(using: .ascii)!,
|
|
"{ \"foo\":".data(using: .ascii)!
|
|
]
|
|
|
|
for rawData in rawDatas {
|
|
XCTAssertThrowsError(try AccountDataReport(rawData: rawData))
|
|
}
|
|
}
|
|
}
|