Skip to content

Commit

Permalink
Fix metered usage (#2890)
Browse files Browse the repository at this point in the history
  • Loading branch information
rlepinski authored Dec 6, 2023
1 parent ad20d59 commit 851efe9
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Airship/Airship.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@
60E7DDAE2ABC4D1600072FA0 /* EmbeddedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C1DB0E2A8B743C00A1D3DA /* EmbeddedView.swift */; };
60E7DDAF2ABC4D1D00072FA0 /* AirshipLayoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C1DB0D2A8B743B00A1D3DA /* AirshipLayoutView.swift */; };
60E7DDB02ABC4D2100072FA0 /* AirshipEmbeddedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C1DB0B2A8B743B00A1D3DA /* AirshipEmbeddedView.swift */; };
6E032A502B210E6000404630 /* RemoteConfigTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E032A4F2B210E6000404630 /* RemoteConfigTest.swift */; };
6E062D03271656DE001A74A1 /* Container.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E062D02271656DE001A74A1 /* Container.swift */; };
6E062D05271656F8001A74A1 /* LinearLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E062D04271656F8001A74A1 /* LinearLayout.swift */; };
6E062D0727165709001A74A1 /* Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E062D0627165709001A74A1 /* Label.swift */; };
Expand Down Expand Up @@ -2139,6 +2140,7 @@
60D3BCCF2A154D9400E07524 /* MessageCriteria.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCriteria.swift; sourceTree = "<group>"; };
62C67C80125440E0C4F9982D /* Pods-AirshipTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AirshipTests.release.xcconfig"; path = "../Pods/Target Support Files/Pods-AirshipTests/Pods-AirshipTests.release.xcconfig"; sourceTree = "<group>"; };
6D0D4500368AC9710E0F37B7 /* Pods-AirshipAccengageTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AirshipAccengageTests.release.xcconfig"; path = "../Pods/Target Support Files/Pods-AirshipAccengageTests/Pods-AirshipAccengageTests.release.xcconfig"; sourceTree = "<group>"; };
6E032A4F2B210E6000404630 /* RemoteConfigTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteConfigTest.swift; sourceTree = "<group>"; };
6E062D02271656DE001A74A1 /* Container.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Container.swift; sourceTree = "<group>"; };
6E062D04271656F8001A74A1 /* LinearLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinearLayout.swift; sourceTree = "<group>"; };
6E062D0627165709001A74A1 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -5320,6 +5322,7 @@
children = (
6E15B70026CDD1A40099C92D /* RemoteConfigDisableInfoTest.swift */,
6E15B70226CDE40E0099C92D /* RemoteConfigManagerTest.swift */,
6E032A4F2B210E6000404630 /* RemoteConfigTest.swift */,
);
name = RemoteConfig;
sourceTree = "<group>";
Expand Down Expand Up @@ -7388,6 +7391,7 @@
9987672A1FBE6B4200197AF4 /* UAInAppMessageBannerDisplayContentTest.m in Sources */,
6E60EF6629DF4BB5003F7A8D /* ApplicationMetricsTest.swift in Sources */,
6EC82DB52813122500642596 /* RateLimiterTest.swift in Sources */,
6E032A502B210E6000404630 /* RemoteConfigTest.swift in Sources */,
A63A567828F457FE004B8951 /* TestWorkRateLimiterActor.swift in Sources */,
6EC7E47D26A607210038CFDD /* TestTaskManager.swift in Sources */,
991A94691FCF2CEF00B57D24 /* UAInAppMessageMediaInfoTest.m in Sources */,
Expand Down
2 changes: 1 addition & 1 deletion Airship/AirshipCore/Source/RemoteConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct RemoteConfig: Codable, Equatable, Sendable {

enum CodingKeys: String, CodingKey {
case airshipConfig = "airship_config"
case meteredUsageConfig = "metered_usage_config"
case meteredUsageConfig = "metered_usage"
case fetchContactRemoteData = "fetch_contact_remote_data"
case contactConfig = "contact_config"
}
Expand Down
68 changes: 68 additions & 0 deletions Airship/AirshipCore/Tests/RemoteConfigTest.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/* Copyright Airship and Contributors */

import XCTest

@testable
import AirshipCore

final class RemoteConfigTest: XCTestCase {

private let encoder = JSONEncoder()
private let decoder = JSONDecoder()

func testParseEmpty() throws {
let json = "{}"

let emptyConfig = try self.decoder.decode(RemoteConfig.self, from: json.data(using: .utf8)!)
XCTAssertEqual(emptyConfig, RemoteConfig())
}

func testJson() throws {
let json = """
{
"metered_usage":{
"initial_delay_ms":100,
"interval_ms":200,
"enabled":true
},
"airship_config":{
"device_api_url":"device-api-url",
"analytics_url":"analytics-url",
"wallet_url":"wallet-url",
"remote_data_url":"remote-data-url",
"metered_usage_url":"metered-usage-url"
},
"contact_config":{
"max_cra_resolve_age_ms":300,
"foreground_resolve_interval_ms":400
},
"fetch_contact_remote_data":true
}
"""

let expected = RemoteConfig(
airshipConfig: .init(
remoteDataURL: "remote-data-url",
deviceAPIURL: "device-api-url",
analyticsURL: "analytics-url",
meteredUsageURL: "metered-usage-url"
),
meteredUsageConfig: .init(
isEnabled: true,
initialDelayMilliseconds: 100,
intervalMilliseconds: 200
),
fetchContactRemoteData: true,
contactConfig: .init(
foregroundIntervalMilliseconds: 400,
channelRegistrationMaxResolveAgeMilliseconds: 300
)
)

let config = try self.decoder.decode(RemoteConfig.self, from: json.data(using: .utf8)!)
XCTAssertEqual(config, expected)

let roundTrip = try self.decoder.decode(RemoteConfig.self, from: try self.encoder.encode(expected))
XCTAssertEqual(roundTrip, expected)
}
}

0 comments on commit 851efe9

Please sign in to comment.