glean-core/ios/GleanTests/Metrics/ObjectMetricTests.swift (92 lines of code) (raw):

/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @testable import Glean import XCTest struct BalloonsObjectItem: Codable, Equatable { var colour: String? var diameter: Int? } typealias BalloonsObject = [BalloonsObjectItem] class ObjectMetricTypeTests: XCTestCase { override func setUp() { resetGleanDiscardingInitialPings(testCase: self, tag: "ObjectMetricTypeTests") } override func tearDown() { tearDownStubs() } func testObjectSavesToStorage() { let metric = ObjectMetricType<BalloonsObject>(CommonMetricData( category: "test", name: "balloon", sendInPings: ["store1"], lifetime: .ping, disabled: false )) XCTAssertNil(metric.testGetValue()) var balloons: BalloonsObject = [] balloons.append(BalloonsObjectItem(colour: "red", diameter: 5)) balloons.append(BalloonsObjectItem(colour: "green")) metric.set(balloons) let snapshot = metric.testGetValue()! XCTAssertEqual(2, snapshot.count) let expectedJson = """ [ { "colour": "red", "diameter": 5 }, { "colour": "green" } ] """ let jsonDecoder = JSONDecoder() let expected = try! jsonDecoder.decode(BalloonsObject.self, from: Data(expectedJson.utf8)) XCTAssertEqual(expected, snapshot) } func testObjectMustNotRecordIfDisabled() { let metric = ObjectMetricType<BalloonsObject>(CommonMetricData( category: "test", name: "balloon", sendInPings: ["store1"], lifetime: .ping, disabled: true )) var balloons: BalloonsObject = [] balloons.append(BalloonsObjectItem(colour: "yellow", diameter: 10)) metric.set(balloons) XCTAssertNil(metric.testGetValue()) } func testObjectGetValueReturnsNilIfNothingIsStored() { let metric = ObjectMetricType<BalloonsObject>(CommonMetricData( category: "test", name: "balloon", sendInPings: ["store1"], lifetime: .ping, disabled: true )) XCTAssertNil(metric.testGetValue()) } func testObjectSavesToSecondaryPings() { let metric = ObjectMetricType<BalloonsObject>(CommonMetricData( category: "test", name: "balloon", sendInPings: ["store1", "store2"], lifetime: .ping, disabled: false ) ) XCTAssertNil(metric.testGetValue()) var balloons: BalloonsObject = [] balloons.append(BalloonsObjectItem(colour: "red", diameter: 5)) balloons.append(BalloonsObjectItem(colour: "green")) metric.set(balloons) let expectedJson = """ [ { "colour": "red", "diameter": 5 }, { "colour": "green" } ] """ let jsonDecoder = JSONDecoder() let expected = try! jsonDecoder.decode(BalloonsObject.self, from: Data(expectedJson.utf8)) var snapshot = metric.testGetValue("store1")! XCTAssertEqual(2, snapshot.count) XCTAssertEqual(expected, snapshot) snapshot = metric.testGetValue("store2")! XCTAssertEqual(2, snapshot.count) XCTAssertEqual(expected, snapshot) } }