Skip to content

Commit a7ab377

Browse files
Add Swift tests and immutable signal map
1 parent 9f25a01 commit a7ab377

File tree

7 files changed

+67
-13
lines changed

7 files changed

+67
-13
lines changed

FirebaseRemoteConfig/Sources/Private/RCNConfigSettings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
#pragma mark - Custom Signals
8888

8989
/// A dictionary to hold custom signals that are set by the developer.
90-
@property(nonatomic, readwrite, strong) NSMutableDictionary<NSString *, NSString *> *customSignals;
90+
@property(nonatomic, readwrite, strong) NSDictionary<NSString *, NSString *> *customSignals;
9191

9292
#pragma mark Throttling properties
9393

FirebaseRemoteConfig/Sources/RCNConfigSettings.m

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ - (instancetype)initWithDatabaseManager:(RCNConfigDBManager *)manager
109109
[_userDefaultsManager resetUserDefaults];
110110
}
111111

112-
_customSignals = [_userDefaultsManager customSignals];
113112
_isFetchInProgress = NO;
114113
_lastFetchedTemplateVersion = [_userDefaultsManager lastFetchedTemplateVersion];
115114
_lastActiveTemplateVersion = [_userDefaultsManager lastActiveTemplateVersion];
@@ -446,9 +445,10 @@ - (NSString *)nextRequestWithUserProperties:(NSDictionary *)userProperties {
446445
}
447446
}
448447

449-
if (_customSignals.count > 0) {
448+
NSDictionary<NSString *, NSString *> *customSignals = [self customSignals];
449+
if (customSignals.count > 0) {
450450
NSError *error;
451-
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:_customSignals
451+
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:customSignals
452452
options:0
453453
error:&error];
454454
if (!error) {
@@ -460,7 +460,7 @@ - (NSString *)nextRequestWithUserProperties:(NSDictionary *)userProperties {
460460
encoding:NSUTF8StringEncoding]]];
461461
// Log the custom signals during fetch.
462462
FIRLogDebug(kFIRLoggerRemoteConfig, @"I-RCN000078", @"Fetching with custom signals: %@",
463-
_customSignals);
463+
customSignals);
464464
}
465465
}
466466
ret = [ret stringByAppendingString:@"}"];
@@ -536,8 +536,11 @@ - (void)setLastSetDefaultsTimeInterval:(NSTimeInterval)lastSetDefaultsTimestamp
536536
completionHandler:nil];
537537
}
538538

539-
- (void)setCustomSignals:(NSMutableDictionary<NSString *, NSString *> *)customSignals {
540-
_customSignals = customSignals;
539+
- (NSDictionary<NSString *, NSString *> *)customSignals {
540+
return [_userDefaultsManager customSignals];
541+
}
542+
543+
- (void)setCustomSignals:(NSDictionary<NSString *, NSString *> *)customSignals {
541544
[_userDefaultsManager setCustomSignals:customSignals];
542545
}
543546

FirebaseRemoteConfig/Sources/RCNUserDefaultsManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ NS_ASSUME_NONNULL_BEGIN
4848
/// Last active template version.
4949
@property(nonatomic, assign) NSString *lastActiveTemplateVersion;
5050
/// A dictionary to hold the latest custom signals set by the developer.
51-
@property(nonatomic, readwrite, strong) NSMutableDictionary<NSString *, NSString *> *customSignals;
51+
@property(nonatomic, readwrite, strong) NSDictionary<NSString *, NSString *> *customSignals;
5252

5353
/// Designated initializer.
5454
- (instancetype)initWithAppName:(NSString *)appName

FirebaseRemoteConfig/Sources/RCNUserDefaultsManager.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,16 +142,16 @@ - (void)setLastActiveTemplateVersion:(NSString *)templateVersion {
142142
}
143143
}
144144

145-
- (NSMutableDictionary<NSString *, NSString *> *)customSignals {
145+
- (NSDictionary<NSString *, NSString *> *)customSignals {
146146
NSDictionary *userDefaults = [self instanceUserDefaults];
147147
if ([userDefaults objectForKey:kRCNUserDefaultsKeyCustomSignals]) {
148148
return [userDefaults objectForKey:kRCNUserDefaultsKeyCustomSignals];
149149
}
150150

151-
return [[NSMutableDictionary<NSString *, NSString *> alloc] init];
151+
return [[NSDictionary<NSString *, NSString *> alloc] init];
152152
}
153153

154-
- (void)setCustomSignals:(NSMutableDictionary<NSString *, NSString *> *)customSignals {
154+
- (void)setCustomSignals:(NSDictionary<NSString *, NSString *> *)customSignals {
155155
if (customSignals) {
156156
[self setInstanceUserDefaultsValue:customSignals forKey:kRCNUserDefaultsKeyCustomSignals];
157157
}

FirebaseRemoteConfig/Tests/Swift/SwiftAPI/APITestBase.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class APITestBase: XCTestCase {
5757
let settings = RemoteConfigSettings()
5858
settings.minimumFetchInterval = 0
5959
config.configSettings = settings
60+
config.settings.customSignals = [:]
6061

6162
let jsonData = try JSONSerialization.data(
6263
withJSONObject: Constants.jsonValue

FirebaseRemoteConfig/Tests/Swift/SwiftAPI/AsyncAwaitTests.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,54 @@ class AsyncAwaitTests: APITestBase {
129129
XCTAssertTrue(config.configValue(forKey: Constants.jedi).dataValue.isEmpty,
130130
"Remote config should have been deleted.")
131131
}
132+
133+
func testSetCustomSignals() async throws {
134+
let testSignals: [String: CustomSignalValue?] = [
135+
"signal_1": .integer(5),
136+
"signal_2": .string("basic"),
137+
"signal_3": .double(3.14159),
138+
]
139+
140+
let expectedSignals: [String: String] = [
141+
"signal_1": "5",
142+
"signal_2": "basic",
143+
"signal_3": "3.14159",
144+
]
145+
146+
_ = try await config.setCustomSignals(testSignals)
147+
XCTAssertEqual(config.settings.customSignals, expectedSignals)
148+
}
149+
150+
func testSetCustomSignalsMultipleTimes() async throws {
151+
let testSignals: [String: CustomSignalValue?] = [
152+
"signal_1": 6,
153+
"signal_2": "basic",
154+
"signal_3": 3.14,
155+
]
156+
157+
let expectedSignals: [String: String] = [
158+
"signal_1": "6",
159+
"signal_2": "basic",
160+
"signal_3": "3.14",
161+
]
162+
163+
_ = try await config.setCustomSignals(testSignals)
164+
XCTAssertEqual(config.settings.customSignals, expectedSignals)
165+
166+
let testSignals2: [String: CustomSignalValue?] = [
167+
"signal_4": .integer(100),
168+
"signal_3": nil,
169+
"signal_5": .double(3.1234),
170+
]
171+
172+
let expectedSignals2: [String: String] = [
173+
"signal_1": "6",
174+
"signal_2": "basic",
175+
"signal_4": "100",
176+
"signal_5": "3.1234",
177+
]
178+
179+
_ = try await config.setCustomSignals(testSignals2)
180+
XCTAssertEqual(config.settings.customSignals, expectedSignals2)
181+
}
132182
}

FirebaseRemoteConfig/Tests/Unit/RCNRemoteConfigTest.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,7 +1851,7 @@ - (void)testSetCustomSignals {
18511851
[_configInstances[i] setCustomSignals:testSignals
18521852
withCompletion:^(NSError *_Nullable error) {
18531853
XCTAssertNil(error);
1854-
NSMutableDictionary<NSString *, NSString *> *retrievedSignals =
1854+
NSDictionary<NSString *, NSString *> *retrievedSignals =
18551855
self->_configInstances[i].settings.customSignals;
18561856
XCTAssertEqualObjects(retrievedSignals, testSignals);
18571857
[expectations[i] fulfill];
@@ -1895,7 +1895,7 @@ - (void)testSetCustomSignalsMultipleTimes {
18951895
setCustomSignals:testSignals2
18961896
withCompletion:^(NSError *_Nullable error) {
18971897
XCTAssertNil(error);
1898-
NSMutableDictionary<NSString *, NSString *> *retrievedSignals =
1898+
NSDictionary<NSString *, NSString *> *retrievedSignals =
18991899
self->_configInstances[i].settings.customSignals;
19001900
XCTAssertEqualObjects(retrievedSignals, expectedSignals);
19011901
[expectations[i] fulfill];

0 commit comments

Comments
 (0)