@@ -34,7 +34,7 @@ void main() {
3434 expect (channel.params, {
3535 'config' : {
3636 'broadcast' : {'ack' : false , 'self' : false },
37- 'presence' : {'key' : '' },
37+ 'presence' : {'key' : '' , 'enabled' : false },
3838 'private' : false ,
3939 }
4040 });
@@ -54,7 +54,7 @@ void main() {
5454 expect (joinPush.payload, {
5555 'config' : {
5656 'broadcast' : {'ack' : false , 'self' : false },
57- 'presence' : {'key' : '' },
57+ 'presence' : {'key' : '' , 'enabled' : false },
5858 'private' : true ,
5959 },
6060 });
@@ -386,4 +386,92 @@ void main() {
386386 expect (leaveCalled, isTrue);
387387 });
388388 });
389+
390+ group ('presence enabled' , () {
391+ setUp (() {
392+ socket = RealtimeClient ('' , timeout: const Duration (milliseconds: 1234 ));
393+ });
394+
395+ test ('should enable presence when config.presence.enabled is true even without bindings' , () {
396+ channel = RealtimeChannel (
397+ 'topic' ,
398+ socket,
399+ params: const RealtimeChannelConfig (enabled: true ),
400+ );
401+
402+ channel.subscribe ();
403+
404+ final joinPayload = channel.joinPush.payload;
405+ expect (joinPayload['config' ]['presence' ]['enabled' ], isTrue);
406+ });
407+
408+ test ('should enable presence when presence listeners exist' , () {
409+ channel = RealtimeChannel (
410+ 'topic' ,
411+ socket,
412+ params: const RealtimeChannelConfig (),
413+ );
414+
415+ channel.onPresenceSync ((payload) {});
416+ channel.subscribe ();
417+
418+ final joinPayload = channel.joinPush.payload;
419+ expect (joinPayload['config' ]['presence' ]['enabled' ], isTrue);
420+ });
421+
422+ test ('should enable presence when both bindings exist and config.presence.enabled is true' , () {
423+ channel = RealtimeChannel (
424+ 'topic' ,
425+ socket,
426+ params: const RealtimeChannelConfig (enabled: true ),
427+ );
428+
429+ channel.onPresenceSync ((payload) {});
430+ channel.subscribe ();
431+
432+ final joinPayload = channel.joinPush.payload;
433+ expect (joinPayload['config' ]['presence' ]['enabled' ], isTrue);
434+ });
435+
436+ test ('should not enable presence when neither bindings exist nor config.presence.enabled is true' , () {
437+ channel = RealtimeChannel (
438+ 'topic' ,
439+ socket,
440+ params: const RealtimeChannelConfig (),
441+ );
442+
443+ channel.subscribe ();
444+
445+ final joinPayload = channel.joinPush.payload;
446+ expect (joinPayload['config' ]['presence' ]['enabled' ], isFalse);
447+ });
448+
449+ test ('should enable presence when join listener exists' , () {
450+ channel = RealtimeChannel (
451+ 'topic' ,
452+ socket,
453+ params: const RealtimeChannelConfig (),
454+ );
455+
456+ channel.onPresenceJoin ((payload) {});
457+ channel.subscribe ();
458+
459+ final joinPayload = channel.joinPush.payload;
460+ expect (joinPayload['config' ]['presence' ]['enabled' ], isTrue);
461+ });
462+
463+ test ('should enable presence when leave listener exists' , () {
464+ channel = RealtimeChannel (
465+ 'topic' ,
466+ socket,
467+ params: const RealtimeChannelConfig (),
468+ );
469+
470+ channel.onPresenceLeave ((payload) {});
471+ channel.subscribe ();
472+
473+ final joinPayload = channel.joinPush.payload;
474+ expect (joinPayload['config' ]['presence' ]['enabled' ], isTrue);
475+ });
476+ });
389477}
0 commit comments