You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.3 KiB
146 lines
5.3 KiB
import 'dart:async'; |
|
|
|
import 'package:nextcloud/nextcloud.dart'; |
|
import 'package:nextcloud/notifications.dart'; |
|
import 'package:test/test.dart'; |
|
|
|
import 'helper.dart'; |
|
|
|
void main() { |
|
group('notifications', () { |
|
late DockerContainer container; |
|
late NextcloudClient client; |
|
setUp(() async { |
|
container = await getDockerContainer(); |
|
client = await getTestClient( |
|
container, |
|
username: 'admin', |
|
); |
|
}); |
|
tearDown(() => container.destroy()); |
|
|
|
Future<void> sendTestNotification() async { |
|
await client.notifications.api.generateNotification( |
|
userId: 'admin', |
|
shortMessage: '123', |
|
longMessage: '456', |
|
); |
|
} |
|
|
|
group('API', () { |
|
test('Send admin notification', () async { |
|
await sendTestNotification(); |
|
}); |
|
}); |
|
|
|
group('Endpoint', () { |
|
test('List notifications', () async { |
|
await sendTestNotification(); |
|
|
|
final startTime = DateTime.now().toUtc(); |
|
final response = (await client.notifications.endpoint.listNotifications()).body; |
|
expect(response.ocs.data, hasLength(2)); |
|
expect(response.ocs.data[0].notificationId, 2); |
|
expect(response.ocs.data[0].app, 'admin_notifications'); |
|
expect(response.ocs.data[0].user, 'admin'); |
|
expect( |
|
DateTime.parse(response.ocs.data[0].datetime).millisecondsSinceEpoch, |
|
closeTo(startTime.millisecondsSinceEpoch, 10E3), |
|
); |
|
expect(response.ocs.data[0].objectType, 'admin_notifications'); |
|
expect(response.ocs.data[0].objectId, isNotNull); |
|
expect(response.ocs.data[0].subject, '123'); |
|
expect(response.ocs.data[0].message, '456'); |
|
expect(response.ocs.data[0].link, ''); |
|
expect(response.ocs.data[0].subjectRich, ''); |
|
expect(response.ocs.data[0].subjectRichParameters, isEmpty); |
|
expect(response.ocs.data[0].messageRich, ''); |
|
expect(response.ocs.data[0].messageRichParameters, isEmpty); |
|
expect(response.ocs.data[0].icon, isNotEmpty); |
|
expect(response.ocs.data[0].actions, hasLength(0)); |
|
}); |
|
|
|
test('Get notification', () async { |
|
await sendTestNotification(); |
|
|
|
final startTime = DateTime.now().toUtc(); |
|
final response = await client.notifications.endpoint.getNotification(id: 2); |
|
expect(response.statusCode, 200); |
|
expect(() => response.headers, isA<void>()); |
|
|
|
expect(response.body.ocs.data.notificationId, 2); |
|
expect(response.body.ocs.data.app, 'admin_notifications'); |
|
expect(response.body.ocs.data.user, 'admin'); |
|
expect( |
|
DateTime.parse(response.body.ocs.data.datetime).millisecondsSinceEpoch, |
|
closeTo(startTime.millisecondsSinceEpoch, 10E3), |
|
); |
|
expect(response.body.ocs.data.objectType, 'admin_notifications'); |
|
expect(response.body.ocs.data.objectId, isNotNull); |
|
expect(response.body.ocs.data.subject, '123'); |
|
expect(response.body.ocs.data.message, '456'); |
|
expect(response.body.ocs.data.link, ''); |
|
expect(response.body.ocs.data.subjectRich, ''); |
|
expect(response.body.ocs.data.subjectRichParameters, isEmpty); |
|
expect(response.body.ocs.data.messageRich, ''); |
|
expect(response.body.ocs.data.messageRichParameters, isEmpty); |
|
expect(response.body.ocs.data.icon, isNotEmpty); |
|
expect(response.body.ocs.data.actions, hasLength(0)); |
|
}); |
|
|
|
test('Delete notification', () async { |
|
await sendTestNotification(); |
|
await client.notifications.endpoint.deleteNotification(id: 2); |
|
|
|
final response = (await client.notifications.endpoint.listNotifications()).body; |
|
expect(response.ocs.data, hasLength(1)); |
|
}); |
|
|
|
test('Delete all notifications', () async { |
|
await sendTestNotification(); |
|
await sendTestNotification(); |
|
await client.notifications.endpoint.deleteAllNotifications(); |
|
|
|
final response = (await client.notifications.endpoint.listNotifications()).body; |
|
expect(response.ocs.data, hasLength(0)); |
|
}); |
|
}); |
|
|
|
group('Push', () { |
|
late DockerContainer container; |
|
late NextcloudClient client; |
|
setUp(() async { |
|
container = await getDockerContainer(); |
|
client = await getTestClient( |
|
container, |
|
username: 'admin', |
|
); |
|
}); |
|
tearDown(() => container.destroy()); |
|
|
|
// The key size has to be 2048, other sizes are not accepted by Nextcloud (at the moment at least) |
|
// ignore: avoid_redundant_argument_values |
|
RSAKeypair generateKeypair() => RSAKeypair.fromRandom(keySize: 2048); |
|
|
|
test('Register and remove push device', () async { |
|
const pushToken = '789'; |
|
final keypair = generateKeypair(); |
|
|
|
final subscription = (await client.notifications.push.registerDevice( |
|
pushTokenHash: generatePushTokenHash(pushToken), |
|
devicePublicKey: keypair.publicKey.toFormattedPEM(), |
|
proxyServer: 'https://example.com/', |
|
)) |
|
.body |
|
.ocs |
|
.data; |
|
expect(subscription.publicKey, hasLength(451)); |
|
RSAPublicKey.fromPEM(subscription.publicKey); |
|
expect(subscription.deviceIdentifier, isNotEmpty); |
|
expect(subscription.signature, isNotEmpty); |
|
|
|
await client.notifications.push.removeDevice(); |
|
}); |
|
}); |
|
}); |
|
}
|
|
|