Signal-iOS/SignalServiceKit/tests/Network/API/AccountDataReportTest.swift
2023-04-03 12:17:28 -05:00

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