Skip to content
Snippets Groups Projects
JSONHelpersTests.swift 4.73 KiB
import CustomDump
import XCTest
@testable import XXClient

final class JSONHelpersTests: XCTestCase {
  func testConvertingNumberToStringByKey() {
    assertConvertingJsonNumberToString(
      input: #"{"number":1234567890,"text":"hello"}"#,
      key: "number",
      expected: #"{"number":"1234567890","text":"hello"}"#
    )

    assertConvertingJsonNumberToString(
      input: #"{"text":"hello","number":1234567890}"#,
      key: "number",
      expected: #"{"text":"hello","number":"1234567890"}"#
    )

    assertConvertingJsonNumberToString(
      input: #"{  "number"  :  1234567890  ,  "text"  :  "hello"  }"#,
      key: "number",
      expected: #"{  "number"  :  "1234567890"  ,  "text"  :  "hello"  }"#
    )

    assertConvertingJsonNumberToString(
      input: #"{  "text"  :  "hello"  ,  "number"  :  1234567890  }"#,
      key: "number",
      expected: #"{  "text"  :  "hello"  ,  "number"  :  "1234567890"  }"#
    )

    assertConvertingJsonNumberToString(
      input: """
      {
        "number": 1234567890,
        "text": "hello"
      }
      """,
      key: "number",
      expected: """
      {
        "number": "1234567890",
        "text": "hello"
      }
      """
    )

    assertConvertingJsonNumberToString(
      input: """
      {
        "text": "hello",
        "number": 1234567890
      }
      """,
      key: "number",
      expected: """
      {
        "text": "hello",
        "number": "1234567890"
      }
      """
    )
  }

  func testConvertingNumberToStringByLength() {
    assertConvertingJsonNumberToString(
      input: """
      {
        "text": "hello",
        "number1": 123456789,
        "number2": 1234567890,
        "number3": 123456789,
        "number4": 1234567890
      }
      """,
      minNumberLength: 10,
      expected: """
      {
        "text": "hello",
        "number1": 123456789,
        "number2": "1234567890",
        "number3": 123456789,
        "number4": "1234567890"
      }
      """
    )

    assertConvertingJsonNumberToString(
      input: #"{"text":"hello","number1":123456789,"number2":1234567890,"number3":123456789,"number4":1234567890}"#,
      minNumberLength: 10,
      expected: #"{"text":"hello","number1":123456789,"number2":"1234567890","number3":123456789,"number4":"1234567890"}"#
    )
  }

  func testConvertingStringToNumber() {
    assertConvertingJsonStringToNumber(
      input: #"{"number":"1234567890","text":"hello"}"#,
      key: "number",
      expected: #"{"number":1234567890,"text":"hello"}"#
    )

    assertConvertingJsonStringToNumber(
      input: #"{"text":"hello","number":"1234567890"}"#,
      key: "number",
      expected: #"{"text":"hello","number":1234567890}"#
    )

    assertConvertingJsonStringToNumber(
      input: #"{  "number"  :  "1234567890"  ,  "text"  :  "hello"  }"#,
      key: "number",
      expected: #"{  "number"  :  1234567890  ,  "text"  :  "hello"  }"#
    )

    assertConvertingJsonStringToNumber(
      input: #"{  "text"  :  "hello"  ,  "number"  :  "1234567890"  }"#,
      key: "number",
      expected: #"{  "text"  :  "hello"  ,  "number"  :  1234567890  }"#
    )

    assertConvertingJsonStringToNumber(
      input: """
      {
        "number": "1234567890",
        "text": "hello"
      }
      """,
      key: "number",
      expected: """
      {
        "number": 1234567890,
        "text": "hello"
      }
      """
    )

    assertConvertingJsonStringToNumber(
      input: """
      {
        "text": "hello",
        "number": "1234567890"
      }
      """,
      key: "number",
      expected: """
      {
        "text": "hello",
        "number": 1234567890
      }
      """
    )
  }
}

private func assertConvertingJsonNumberToString(
  input: String,
  key: String,
  expected: String,
  file: StaticString = #file,
  line: UInt = #line
) {
  XCTAssertNoDifference(
    String(
      data: convertJsonNumberToString(
        in: input.data(using: .utf8)!,
        at: key
      ),
      encoding: .utf8
    )!,
    expected,
    file: file,
    line: line
  )
}

private func assertConvertingJsonNumberToString(
  input: String,
  minNumberLength: Int,
  expected: String,
  file: StaticString = #file,
  line: UInt = #line
) {
  XCTAssertNoDifference(
    String(
      data: convertJsonNumberToString(
        in: input.data(using: .utf8)!,
        minNumberLength: minNumberLength
      ),
      encoding: .utf8
    )!,
    expected,
    file: file,
    line: line
  )
}

private func assertConvertingJsonStringToNumber(
  input: String,
  key: String,
  expected: String,
  file: StaticString = #file,
  line: UInt = #line
) {
  XCTAssertNoDifference(
    String(
      data: convertJsonStringToNumber(
        in: input.data(using: .utf8)!,
        at: key
      ),
      encoding: .utf8
    )!,
    expected,
    file: file,
    line: line
  )
}