func testParseRules()

in FBSDKCoreKit/FBSDKCoreKitTests/Internal/AppEvents/SKAdNetwork/SKAdNetworkConversionConfigurationTests.swift [69:208]


  func testParseRules() throws {
    let rules = [
      [
        "conversion_value": 2,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
          ],
        ],
      ],
      [
        "conversion_value": 4,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "currency": "USD",
                "amount": 100,
              ],
            ],
          ],
        ],
      ],
      [
        "conversion_value": 3,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "currency": "USD",
                "amount": 100,
              ],
              [
                "currency": "JPY",
                "amount": 100,
              ],
            ],
          ],
        ],
      ],
    ]

    let conversionBitRules = try XCTUnwrap(SKAdNetworkConversionConfiguration.parseRules(rules))
    var expectedRules = [SKAdNetworkRule]()

    expectedRules.append(try XCTUnwrap(
      SKAdNetworkRule(json: [
        "conversion_value": 4,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "currency": "USD",
                "amount": 100,
              ],
            ],
          ],
        ],
      ])
    ))

    expectedRules.append(try XCTUnwrap(
      SKAdNetworkRule(json: [
        "conversion_value": 3,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "currency": "USD",
                "amount": 100,
              ],
              [
                "currency": "JPY",
                "amount": 100,
              ],
            ],
          ],
        ],
      ])
    ))

    expectedRules.append(try XCTUnwrap(
      SKAdNetworkRule(json: [
        "conversion_value": 2,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
          ],
        ],
      ])
    ))

    for (expectedRule, parsedRule) in zip(expectedRules, conversionBitRules) {
      XCTAssertEqual(expectedRule.conversionValue, parsedRule.conversionValue)
      XCTAssertEqual(expectedRule.events.count, parsedRule.events.count)

      for (expectedEvent, parsedEvent) in zip(expectedRule.events, parsedRule.events) {
        XCTAssertEqual(expectedEvent.eventName, parsedEvent.eventName)

        XCTAssertEqual(expectedEvent.values, parsedEvent.values) // nil or equal
      }
    }

    XCTAssertNil(SKAdNetworkConversionConfiguration.parseRules(nil))

    let invalidData = [
      [
        "conversion_value": 2,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "amount": 100,
              ],
            ],
          ],
        ],
      ],
      [
        "conversion_value": 3,
        "events": [
          [
            "event_name": "fb_mobile_purchase",
            "values": [
              [
                "currency": "USD",
                "amount": 100,
              ],
            ],
          ],
        ],
      ],
    ]
    XCTAssertEqual(1, SKAdNetworkConversionConfiguration.parseRules(invalidData)?.count)
  }