Skip to content

Commit

Permalink
added support for pagination params for listPushChannels
Browse files Browse the repository at this point in the history
  • Loading branch information
mohitpubnub committed Mar 27, 2024
1 parent 2a5f47e commit 9b2fbe8
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
8 changes: 6 additions & 2 deletions pubnub/lib/src/dx/_endpoints/push.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,11 @@ class ListPushChannelsParams extends Parameters {
PushGateway pushGateway;
Environment? environment;
String? topic;
String? start;
int? count;

ListPushChannelsParams(this.keyset, this.deviceId, this.pushGateway,
{this.topic, this.environment});
{this.topic, this.environment, this.start, this.count});

@override
Request toRequest() {
Expand All @@ -74,7 +76,9 @@ class ListPushChannelsParams extends Parameters {
var queryParameters = {
if (keyset.authKey != null) 'auth': '${keyset.authKey}',
'uuid': '${keyset.uuid}',
'type': pushGateway.value()
'type': pushGateway.value(),
if (start != null && start!.isNotEmpty) 'start': start!,
if (count != null) 'count': '$count'
};
if (pushGateway == PushGateway.apns2) {
queryParameters['environment'] =
Expand Down
6 changes: 5 additions & 1 deletion pubnub/lib/src/dx/push/push.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,16 @@ mixin PushNotificationDx on Core {
/// If [gateway] is [PushGateway.apns2] then [topic] is mandatory to provide.
/// [topic] is bundle id of the mobile application.
/// [environment] denoting the environment of the mobile application for [PushGateway.apns2], it can be either:
/// [start] Starting channel for pagination. Use the last channel from the previous page request.
/// [count] Number of channels to return for pagination. Max of 1000 tokens at a time. Defaults to 500.
/// * [Environment.development] (which is the default value).
/// * [Environment.production].
Future<ListPushChannelsResult> listPushChannels(
String deviceId, PushGateway gateway,
{String? topic,
Environment? environment,
String? start,
int? count,
Keyset? keyset,
String? using}) async {
keyset ??= keysets[using];
Expand All @@ -33,7 +37,7 @@ mixin PushNotificationDx on Core {
if (gateway == PushGateway.apns2) Ensure(topic).isNotNull('topic');

var params = ListPushChannelsParams(keyset, deviceId, gateway,
topic: topic, environment: environment);
topic: topic, environment: environment, start: start, count: count);
return defaultFlow<ListPushChannelsParams, ListPushChannelsResult>(
keyset: keyset,
core: this,
Expand Down
27 changes: 27 additions & 0 deletions pubnub/test/unit/dx/push_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,33 @@ void main() {
#environment: null
}));
});

test('listPushChannels delegate supported arguments', () async {
fakePubnub.returnWhen(
#listPushChannels,
Future.value(
ListPushChannelsResult.fromJson(['ch1', 'ch2', 'ch3'])));

await fakePubnub.listPushChannels('A332C23D', PushGateway.mpns,
start: 'ch2', count: 10);

var invocation = fakePubnub.invocations[0];

expect(invocation.isMethod, equals(true));
expect(invocation.memberName, equals(#listPushChannels));
expect(invocation.positionalArguments,
equals(['A332C23D', PushGateway.mpns]));
expect(
invocation.namedArguments,
equals({
#keyset: null,
#using: null,
#topic: null,
#environment: null,
#start: 'ch2',
#count: 10
}));
});
});
});
}

0 comments on commit 9b2fbe8

Please sign in to comment.