@@ -61,14 +61,22 @@ - (void)setUp {
61
61
initWithData: [@" value3" dataUsingEncoding: NSUTF8StringEncoding]
62
62
source: FIRRemoteConfigSourceRemote]
63
63
},
64
- RCNFetchResponseKeyPersonalizationMetadata :
65
- @{@" key1" : @{kPersonalizationId : @" id1" }, @" key2" : @{kPersonalizationId : @" id2" }}
64
+ RCNFetchResponseKeyPersonalizationMetadata : @{
65
+ @" key1" : @{
66
+ kPersonalizationId : @" p13n1" ,
67
+ kArmIndex : @0 ,
68
+ kChoiceId : @" id1" ,
69
+ kGroup : @" BASELINE"
70
+ },
71
+ @" key2" :
72
+ @{kPersonalizationId : @" p13n2" , kArmIndex : @1 , kChoiceId : @" id2" , kGroup : @" P13N" }
73
+ }
66
74
};
67
75
68
76
_fakeLogs = [[NSMutableArray alloc ] init ];
69
77
_analyticsMock = OCMProtocolMock (@protocol (FIRAnalyticsInterop));
70
78
OCMStub ([_analyticsMock logEventWithOrigin: kAnalyticsOriginPersonalization
71
- name: kAnalyticsPullEvent
79
+ name: [OCMArg isKindOfClass: [ NSString class ]]
72
80
parameters: [OCMArg isKindOfClass: [NSDictionary class ]]])
73
81
.andDo (^(NSInvocation *invocation) {
74
82
__unsafe_unretained NSDictionary *bundle;
@@ -108,7 +116,10 @@ - (void)testNonPersonalizationKey {
108
116
109
117
OCMVerify (never (),
110
118
[_analyticsMock logEventWithOrigin: kAnalyticsOriginPersonalization
111
- name: kAnalyticsPullEvent
119
+ name: [OCMArg checkWithBlock: ^BOOL (NSString *value) {
120
+ return [value isEqualToString: kExternalEvent ] ||
121
+ [value isEqualToString: kInternalEvent ];
122
+ }]
112
123
parameters: [OCMArg isKindOfClass: [NSDictionary class ]]]);
113
124
XCTAssertEqual ([_fakeLogs count ], 0 );
114
125
}
@@ -118,51 +129,106 @@ - (void)testSinglePersonalizationKey {
118
129
119
130
[_personalization logArmActive: @" key1" config: _configContainer];
120
131
121
- OCMVerify (times (1 ),
132
+ OCMVerify (times (2 ),
122
133
[_analyticsMock logEventWithOrigin: kAnalyticsOriginPersonalization
123
- name: kAnalyticsPullEvent
134
+ name: [OCMArg checkWithBlock: ^BOOL (NSString *value) {
135
+ return [value isEqualToString: kExternalEvent ] ||
136
+ [value isEqualToString: kInternalEvent ];
137
+ }]
124
138
parameters: [OCMArg isKindOfClass: [NSDictionary class ]]]);
125
- XCTAssertEqual ([_fakeLogs count ], 1 );
139
+ XCTAssertEqual ([_fakeLogs count ], 2 );
140
+
141
+ NSDictionary *logParams = @{
142
+ kExternalRcParameterParam : @" key1" ,
143
+ kExternalArmValueParam : @" value1" ,
144
+ kExternalPersonalizationIdParam : @" p13n1" ,
145
+ kExternalArmIndexParam : @0 ,
146
+ kExternalGroupParam : @" BASELINE"
147
+ };
148
+ XCTAssertEqualObjects (_fakeLogs[0 ], logParams);
126
149
127
- NSDictionary *params = @{kArmKey : @" id1" , kArmValue : @" value1 " };
128
- XCTAssertEqualObjects (_fakeLogs[0 ], params );
150
+ NSDictionary *internalLogParams = @{kInternalChoiceIdParam : @" id1" };
151
+ XCTAssertEqualObjects (_fakeLogs[1 ], internalLogParams );
129
152
}
130
153
131
154
- (void )testMultiplePersonalizationKeys {
132
155
[_fakeLogs removeAllObjects ];
133
156
134
157
[_personalization logArmActive: @" key1" config: _configContainer];
135
158
[_personalization logArmActive: @" key2" config: _configContainer];
159
+ [_personalization logArmActive: @" key1" config: _configContainer];
136
160
137
- OCMVerify (times (2 ),
161
+ OCMVerify (times (4 ),
138
162
[_analyticsMock logEventWithOrigin: kAnalyticsOriginPersonalization
139
- name: kAnalyticsPullEvent
163
+ name: [OCMArg checkWithBlock: ^BOOL (NSString *value) {
164
+ return [value isEqualToString: kExternalEvent ] ||
165
+ [value isEqualToString: kInternalEvent ];
166
+ }]
140
167
parameters: [OCMArg isKindOfClass: [NSDictionary class ]]]);
141
- XCTAssertEqual ([_fakeLogs count ], 2 );
168
+ XCTAssertEqual ([_fakeLogs count ], 4 );
169
+
170
+ NSDictionary *logParams1 = @{
171
+ kExternalRcParameterParam : @" key1" ,
172
+ kExternalArmValueParam : @" value1" ,
173
+ kExternalPersonalizationIdParam : @" p13n1" ,
174
+ kExternalArmIndexParam : @0 ,
175
+ kExternalGroupParam : @" BASELINE"
176
+ };
177
+ XCTAssertEqualObjects (_fakeLogs[0 ], logParams1);
178
+
179
+ NSDictionary *internalLogParams1 = @{kInternalChoiceIdParam : @" id1" };
180
+ XCTAssertEqualObjects (_fakeLogs[1 ], internalLogParams1);
142
181
143
- NSDictionary *params1 = @{kArmKey : @" id1" , kArmValue : @" value1" };
144
- XCTAssertEqualObjects (_fakeLogs[0 ], params1);
182
+ NSDictionary *logParams2 = @{
183
+ kExternalRcParameterParam : @" key2" ,
184
+ kExternalArmValueParam : @" value2" ,
185
+ kExternalPersonalizationIdParam : @" p13n2" ,
186
+ kExternalArmIndexParam : @1 ,
187
+ kExternalGroupParam : @" P13N"
188
+ };
189
+ XCTAssertEqualObjects (_fakeLogs[2 ], logParams2);
145
190
146
- NSDictionary *params2 = @{kArmKey : @" id2" , kArmValue : @" value2 " };
147
- XCTAssertEqualObjects (_fakeLogs[1 ], params2 );
191
+ NSDictionary *internalLogParams2 = @{kInternalChoiceIdParam : @" id2" };
192
+ XCTAssertEqualObjects (_fakeLogs[3 ], internalLogParams2 );
148
193
}
149
194
150
195
- (void )testRemoteConfigIntegration {
151
196
[_fakeLogs removeAllObjects ];
152
197
153
198
FIRRemoteConfigFetchAndActivateCompletion fetchAndActivateCompletion =
154
199
^void (FIRRemoteConfigFetchAndActivateStatus status, NSError *error) {
155
- OCMVerify (times (2 ), [self ->_analyticsMock
200
+ OCMVerify (times (4 ), [self ->_analyticsMock
156
201
logEventWithOrigin: kAnalyticsOriginPersonalization
157
- name: kAnalyticsPullEvent
202
+ name: [OCMArg checkWithBlock: ^BOOL (NSString *value) {
203
+ return [value isEqualToString: kExternalEvent ] ||
204
+ [value isEqualToString: kInternalEvent ];
205
+ }]
158
206
parameters: [OCMArg isKindOfClass: [NSDictionary class ]]]);
159
- XCTAssertEqual ([self ->_fakeLogs count ], 2 );
160
-
161
- NSDictionary *params1 = @{kArmKey : @" id1" , kArmValue : @" value1" };
162
- XCTAssertEqualObjects (self->_fakeLogs [0 ], params1);
163
-
164
- NSDictionary *params2 = @{kArmKey : @" id2" , kArmValue : @" value2" };
165
- XCTAssertEqualObjects (self->_fakeLogs [1 ], params2);
207
+ XCTAssertEqual ([self ->_fakeLogs count ], 4 );
208
+
209
+ NSDictionary *logParams1 = @{
210
+ kExternalRcParameterParam : @" key1" ,
211
+ kExternalArmValueParam : @" value1" ,
212
+ kExternalPersonalizationIdParam : @" p13n1" ,
213
+ kExternalArmIndexParam : @0 ,
214
+ kExternalGroupParam : @" BASELINE"
215
+ };
216
+ XCTAssertEqualObjects (self->_fakeLogs [0 ], logParams1);
217
+
218
+ NSDictionary *internalLogParams1 = @{kInternalChoiceIdParam : @" id1" };
219
+ XCTAssertEqualObjects (self->_fakeLogs [1 ], internalLogParams1);
220
+
221
+ NSDictionary *logParams2 = @{
222
+ kExternalRcParameterParam : @" key1" ,
223
+ kExternalArmValueParam : @" value1" ,
224
+ kExternalPersonalizationIdParam : @" p13n1" ,
225
+ kExternalArmIndexParam : @0 ,
226
+ kExternalGroupParam : @" BASELINE"
227
+ };
228
+ XCTAssertEqualObjects (self->_fakeLogs [2 ], logParams2);
229
+
230
+ NSDictionary *internalLogParams2 = @{kInternalChoiceIdParam : @" id2" };
231
+ XCTAssertEqualObjects (self->_fakeLogs [3 ], internalLogParams2);
166
232
};
167
233
168
234
[_configInstance fetchAndActivateWithCompletionHandler: fetchAndActivateCompletion];
@@ -190,8 +256,17 @@ + (id)mockResponseHandler {
190
256
NSDictionary *response = @{
191
257
RCNFetchResponseKeyState : RCNFetchResponseKeyStateUpdate,
192
258
RCNFetchResponseKeyEntries : @{@" key1" : @" value1" , @" key2" : @" value2" , @" key3" : @" value3" },
193
- RCNFetchResponseKeyPersonalizationMetadata :
194
- @{@" key1" : @{kPersonalizationId : @" id1" }, @" key2" : @{kPersonalizationId : @" id2" }}
259
+ RCNFetchResponseKeyPersonalizationMetadata : @{
260
+ @" key1" : @{
261
+ kPersonalizationId : @" p13n1" ,
262
+ kArmIndex : @0 ,
263
+ kChoiceId : @" id1" ,
264
+ kGroup : @" BASELINE"
265
+ },
266
+ @" key2" :
267
+ @{kPersonalizationId : @" p13n2" , kArmIndex : @1 , kChoiceId : @" id2" , kGroup : @" P13N" }
268
+ }
269
+
195
270
};
196
271
return [OCMArg invokeBlockWithArgs: [NSJSONSerialization dataWithJSONObject: response
197
272
options: 0
0 commit comments