@@ -88,9 +88,7 @@ class SettingsTests {
8888
8989 // no settings available, should not be called
9090 analytics.add(mockPlugin)
91- verify (exactly = 0 ){
92- mockPlugin.update(any(), any())
93- }
91+
9492
9593 // load settings
9694 mockHTTPClient()
@@ -104,7 +102,7 @@ class SettingsTests {
104102 // load settings again
105103 mockHTTPClient()
106104 analytics.checkSettings()
107- verify (exactly = 1 ) {
105+ verify (exactly = 2 ) {
108106 mockPlugin.update(any(), Plugin .UpdateType .Refresh )
109107 }
110108 }
@@ -232,95 +230,102 @@ class SettingsTests {
232230
233231 @Test
234232 fun `fetchSettings returns null when Settings string is invalid` () {
233+ val emptySettings = analytics.fetchSettings(" emptySettingsObject" , " cdn-settings.segment.com/v1" )
235234 // Null on invalid JSON
236235 mockHTTPClient(" " )
237236 var settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
238- assertNull( settings)
237+ assertEquals(emptySettings, settings)
239238
240239 // Null on invalid JSON
241240 mockHTTPClient(" hello" )
242241 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
243- assertNull( settings)
242+ assertEquals(emptySettings, settings)
244243
245244 // Null on invalid JSON
246245 mockHTTPClient(" #! /bin/sh" )
247246 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
248- assertNull( settings)
247+ assertEquals(emptySettings, settings)
249248
250249 // Null on invalid JSON
251250 mockHTTPClient(" <!DOCTYPE html>" )
252251 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
253- assertNull( settings)
252+ assertEquals(emptySettings, settings)
254253
255254 // Null on invalid JSON
256255 mockHTTPClient(" true" )
257256 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
258- assertNull( settings)
257+ assertEquals(emptySettings, settings)
259258
260259 // Null on invalid JSON
261260 mockHTTPClient(" []" )
262261 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
263- assertNull( settings)
262+ assertEquals(emptySettings, settings)
264263
265264 // Null on invalid JSON
266265 mockHTTPClient(" }{" )
267266 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
268- assertNull( settings)
267+ assertEquals(emptySettings, settings)
269268
270269 // Null on invalid JSON
271270 mockHTTPClient(" {{{{}}}}" )
272271 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
273- assertNull( settings)
272+ assertEquals(emptySettings, settings)
274273
275274 // Null on invalid JSON
276275 mockHTTPClient(" {null:\" bar\" }" )
277276 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
278- assertNull( settings)
277+ assertEquals(emptySettings, settings)
279278 }
280279
281280 @Test
282281 fun `fetchSettings returns null when parameters are invalid` () {
282+ val emptySettings = analytics.fetchSettings(" emptySettingsObject" , " cdn-settings.segment.com/v1" )
283283 mockHTTPClient(" {\" integrations\" :{}, \" plan\" :{}, \" edgeFunction\" : {}, \" middlewareSettings\" : {}}" )
284284
285285 // empty host
286286 var settings = analytics.fetchSettings(" foo" , " " )
287- assertNull( settings)
287+ assertEquals(emptySettings, settings)
288288
289289 // not a host name
290290 settings = analytics.fetchSettings(" foo" , " http://blah" )
291- assertNull( settings)
291+ assertEquals(emptySettings, settings)
292292
293293 // emoji
294294 settings = analytics.fetchSettings(" foo" , " 😃" )
295- assertNull( settings)
295+ assertEquals(emptySettings, settings)
296296 }
297297
298298 @Test
299299 fun `fetchSettings returns null when Settings string is null for known properties` () {
300300 // Null if integrations is null
301301 mockHTTPClient(" {\" integrations\" :null}" )
302302 var settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
303- assertNull(settings)
304-
305- // Null if plan is null
306- mockHTTPClient(" {\" plan\" :null}" )
307- settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
308- assertNull(settings)
309-
310- // Null if edgeFunction is null
311- mockHTTPClient(" {\" edgeFunction\" :null}" )
312- settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
313- assertNull(settings)
314-
315- // Null if middlewareSettings is null
316- mockHTTPClient(" {\" middlewareSettings\" :null}" )
317- settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
318- assertNull(settings)
303+ assertTrue(settings?.integrations?.isEmpty() ? : true , " Integrations should be empty" )
304+ assertTrue(settings?.plan?.isEmpty() ? : true , " Plan should be empty" )
305+ assertTrue(settings?.edgeFunction?.isEmpty() ? : true , " EdgeFunction should be empty" )
306+ assertTrue(settings?.middlewareSettings?.isEmpty() ? : true , " MiddlewareSettings should be empty" )
307+ assertTrue(settings?.metrics?.isEmpty() ? : true , " Metrics should be empty" )
308+ assertTrue(settings?.consentSettings?.isEmpty() ? : true , " ConsentSettings should be empty" )
309+
310+ // // Null if plan is null
311+ // mockHTTPClient("{\"plan\":null}")
312+ // settings = analytics.fetchSettings("foo", "cdn-settings.segment.com/v1")
313+ // assertNull(settings)
314+ //
315+ // // Null if edgeFunction is null
316+ // mockHTTPClient("{\"edgeFunction\":null}")
317+ // settings = analytics.fetchSettings("foo", "cdn-settings.segment.com/v1")
318+ // assertNull(settings)
319+ //
320+ // // Null if middlewareSettings is null
321+ // mockHTTPClient("{\"middlewareSettings\":null}")
322+ // settings = analytics.fetchSettings("foo", "cdn-settings.segment.com/v1")
323+ // assertNull(settings)
319324 }
320325
321326 @Test
322327 fun `known Settings property types must match json type` () {
323-
328+ val emptySettings = analytics.fetchSettings( " emptySettingsObject " , " cdn-settings.segment.com/v1 " )
324329 // integrations must be a JSON object
325330 mockHTTPClient(" {\" integrations\" :{}}" )
326331 var settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
@@ -329,21 +334,21 @@ class SettingsTests {
329334 // Null if integrations is a number
330335 mockHTTPClient(" {\" integrations\" :123}" )
331336 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
332- assertNull( settings)
337+ assertEquals(emptySettings, settings)
333338
334339 // Null if integrations is a string
335340 mockHTTPClient(" {\" integrations\" :\" foo\" }" )
336341 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
337- assertNull( settings)
342+ assertEquals(emptySettings, settings)
338343
339344 // Null if integrations is an array
340345 mockHTTPClient(" {\" integrations\" :[\" foo\" ]}" )
341346 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
342- assertNull( settings)
347+ assertEquals(emptySettings, settings)
343348
344349 // Null if integrations is an emoji (UTF-8 string)
345350 mockHTTPClient(" {\" integrations\" : 😃}" )
346351 settings = analytics.fetchSettings(" foo" , " cdn-settings.segment.com/v1" )
347- assertNull( settings)
352+ assertEquals(emptySettings, settings)
348353 }
349354}
0 commit comments