From 210c05b84ba565011fed8a0461f7ca68cb977ad3 Mon Sep 17 00:00:00 2001 From: Timo Notheisen Date: Thu, 14 Nov 2024 14:15:10 +0100 Subject: [PATCH] test: uncomment PushServiceTests and remove SendNotification tests --- .../GlobalUsings.cs | 1 + .../PushNotifications/PushServiceTests.cs | 317 +++++++----------- 2 files changed, 123 insertions(+), 195 deletions(-) create mode 100644 Modules/Devices/test/Devices.Infrastructure.Tests/GlobalUsings.cs diff --git a/Modules/Devices/test/Devices.Infrastructure.Tests/GlobalUsings.cs b/Modules/Devices/test/Devices.Infrastructure.Tests/GlobalUsings.cs new file mode 100644 index 0000000000..fc872d6b3f --- /dev/null +++ b/Modules/Devices/test/Devices.Infrastructure.Tests/GlobalUsings.cs @@ -0,0 +1 @@ +global using static Backbone.Modules.Devices.Infrastructure.Tests.TestDataGenerator; diff --git a/Modules/Devices/test/Devices.Infrastructure.Tests/Tests/PushNotifications/PushServiceTests.cs b/Modules/Devices/test/Devices.Infrastructure.Tests/Tests/PushNotifications/PushServiceTests.cs index d290e3c84d..d44d4f1a0a 100644 --- a/Modules/Devices/test/Devices.Infrastructure.Tests/Tests/PushNotifications/PushServiceTests.cs +++ b/Modules/Devices/test/Devices.Infrastructure.Tests/Tests/PushNotifications/PushServiceTests.cs @@ -1,197 +1,124 @@ -// using Backbone.DevelopmentKit.Identity.ValueObjects; -// using Backbone.Modules.Devices.Application.Infrastructure.Persistence.Repository; -// using Backbone.Modules.Devices.Application.Infrastructure.PushNotifications; -// using Backbone.Modules.Devices.Domain.Aggregates.PushNotifications; -// using Backbone.Modules.Devices.Domain.Aggregates.PushNotifications.Handles; -// using Backbone.Modules.Devices.Infrastructure.PushNotifications; -// using Backbone.Modules.Devices.Infrastructure.PushNotifications.Connectors; -// using FakeItEasy; -// using Microsoft.Extensions.Logging; -// -// namespace Backbone.Modules.Devices.Infrastructure.Tests.Tests.PushNotifications; -// -// public class PushServiceTests : AbstractTestsBase -// { -// [Fact] -// public async Task Update_of_a_registration_that_does_not_exist_yet() -// { -// // Arrange -// var deviceId = CreateRandomDeviceId(); -// var identityAddress = CreateRandomIdentityAddress(); -// -// var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; -// -// var mockPnsRegistrationsRepository = A.Fake(); -// -// A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) -// .Returns(null).Once(); -// -// var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); -// -// // Act -// var devicePushIdentifier = await directPushService.UpdateRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development, CancellationToken.None); -// -// // Assert -// A.CallTo(() => mockPnsRegistrationsRepository -// .Add(A.That.Matches(p => p.DevicePushIdentifier == devicePushIdentifier), A._)) -// .MustHaveHappenedOnceExactly(); -// } -// -// [Fact] -// public async Task Update_existing_PnsRegistration_in_repository() -// { -// // Arrange -// var deviceId = CreateRandomDeviceId(); -// var identityAddress = CreateRandomIdentityAddress(); -// -// var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; -// -// var pnsRegistration = new PnsRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development); -// -// var mockPnsRegistrationsRepository = A.Fake(); -// -// A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) -// .Returns(pnsRegistration); -// -// var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); -// -// // Act -// var devicePushIdentifier = await directPushService.UpdateRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development, CancellationToken.None); -// -// // Assert -// A.CallTo(() => mockPnsRegistrationsRepository -// .Update(A.That.Matches(p => p.DevicePushIdentifier == devicePushIdentifier), A._)) -// .MustHaveHappenedOnceExactly(); -// } -// -// [Fact] -// public async Task Delete_existing_PnsRegistration() -// { -// // Arrange -// var deviceId = CreateRandomDeviceId(); -// var identityAddress = CreateRandomIdentityAddress(); -// -// var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; -// var pnsRegistration = new PnsRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development); -// -// var mockPnsRegistrationsRepository = A.Fake(); -// -// A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) -// .Returns(pnsRegistration); -// -// var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); -// -// // Act -// await directPushService.DeleteRegistration(deviceId, CancellationToken.None); -// -// // Assert -// A.CallTo(() => mockPnsRegistrationsRepository.Delete( -// A>.That.Matches(e => e.FirstOrDefault() == deviceId), CancellationToken.None)) -// .MustHaveHappenedOnceExactly(); -// } -// -// [Fact] -// public async Task Trying_to_delete_non_existing_PnsRegistration_does_nothing() -// { -// // Arrange -// var deviceId = CreateRandomDeviceId(); -// -// var mockPnsRegistrationsRepository = A.Fake(); -// -// A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) -// .Returns(null); -// -// var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); -// -// // Act -// await directPushService.DeleteRegistration(deviceId, CancellationToken.None); -// -// // Assert -// A.CallTo(() => mockPnsRegistrationsRepository.Delete( -// A>._, CancellationToken.None)) -// .MustNotHaveHappened(); -// } -// -// [Fact] -// public async Task SendFilteredNotification_does_not_call_connectors_for_filtered_devices() -// { -// // Arrange -// var filteredDeviceId = CreateRandomDeviceId(); -// var otherDeviceId = CreateRandomDeviceId(); -// var address = CreateRandomIdentityAddress(); -// -// var fakePnsRegistrationsRepository = A.Fake(); -// var mockConnector = A.Fake(); -// -// var registrationToFilter = CreatePnsRegistration(address, filteredDeviceId); -// var otherRegistration = CreatePnsRegistration(address, otherDeviceId); -// -// A.CallTo(() => fakePnsRegistrationsRepository.FindWithAddress(address, A._, A._))! -// .Returns?>(new List -// { -// registrationToFilter, -// otherRegistration -// }); -// -// var directPushService = CreateDirectPushService(fakePnsRegistrationsRepository, FakePnsConnectorFactory.Returning(mockConnector)); -// -// // Act -// await directPushService.SendFilteredNotification(address, new TestPushNotification(), [filteredDeviceId], CancellationToken.None); -// -// // Assert -// A.CallTo(() => mockConnector.Send( -// A>.That.Matches(r => r.Count() == 1 && r.First() == otherRegistration), -// A._)) -// .MustHaveHappenedOnceExactly(); -// } -// -// private static PnsRegistration CreatePnsRegistration(IdentityAddress address, DeviceId filteredDeviceId) -// { -// return new PnsRegistration(address, filteredDeviceId, PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value, "someAppId", PushEnvironment.Development); -// } -// -// private PushService CreateDirectPushService(IPnsRegistrationsRepository pnsRegistrationsRepository, PnsConnectorFactory? pnsConnectorFactory = null) -// { -// pnsConnectorFactory ??= A.Dummy(); -// var logger = A.Dummy>(); -// -// return new PushService(pnsRegistrationsRepository, pnsConnectorFactory, logger); -// } -// -// private class FakePnsConnectorFactory : PnsConnectorFactory -// { -// private readonly IPnsConnector _connector; -// -// private FakePnsConnectorFactory(IPnsConnector connector) -// { -// _connector = connector; -// } -// -// protected override IPnsConnector CreateForFirebaseCloudMessaging() -// { -// return _connector; -// } -// -// protected override IPnsConnector CreateForApplePushNotificationService() -// { -// return _connector; -// } -// -// protected override IPnsConnector CreateForDummy() -// { -// return _connector; -// } -// -// protected override IPnsConnector CreateForSse() -// { -// return _connector; -// } -// -// public static PnsConnectorFactory Returning(IPnsConnector connector) -// { -// return new FakePnsConnectorFactory(connector); -// } -// } -// } +using Backbone.DevelopmentKit.Identity.ValueObjects; +using Backbone.Modules.Devices.Application.Infrastructure.Persistence.Repository; +using Backbone.Modules.Devices.Domain.Aggregates.PushNotifications; +using Backbone.Modules.Devices.Domain.Aggregates.PushNotifications.Handles; +using Backbone.Modules.Devices.Infrastructure.PushNotifications; +using Backbone.Modules.Devices.Infrastructure.PushNotifications.Connectors; +using Backbone.Modules.Devices.Infrastructure.PushNotifications.NotificationTexts; +using FakeItEasy; +using Microsoft.Extensions.Logging; +namespace Backbone.Modules.Devices.Infrastructure.Tests.Tests.PushNotifications; +public class PushServiceTests : AbstractTestsBase +{ + [Fact] + public async Task Update_of_a_registration_that_does_not_exist_yet() + { + // Arrange + var deviceId = CreateRandomDeviceId(); + var identityAddress = CreateRandomIdentityAddress(); + + var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; + + var mockPnsRegistrationsRepository = A.Fake(); + + A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) + .Returns(null).Once(); + + var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); + + // Act + var devicePushIdentifier = await directPushService.UpdateRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development, CancellationToken.None); + + // Assert + A.CallTo(() => mockPnsRegistrationsRepository + .Add(A.That.Matches(p => p.DevicePushIdentifier == devicePushIdentifier), A._)) + .MustHaveHappenedOnceExactly(); + } + + [Fact] + public async Task Update_existing_PnsRegistration_in_repository() + { + // Arrange + var deviceId = CreateRandomDeviceId(); + var identityAddress = CreateRandomIdentityAddress(); + + var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; + + var pnsRegistration = new PnsRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development); + + var mockPnsRegistrationsRepository = A.Fake(); + + A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) + .Returns(pnsRegistration); + + var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); + + // Act + var devicePushIdentifier = await directPushService.UpdateRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development, CancellationToken.None); + + // Assert + A.CallTo(() => mockPnsRegistrationsRepository + .Update(A.That.Matches(p => p.DevicePushIdentifier == devicePushIdentifier), A._)) + .MustHaveHappenedOnceExactly(); + } + + [Fact] + public async Task Delete_existing_PnsRegistration() + { + // Arrange + var deviceId = CreateRandomDeviceId(); + var identityAddress = CreateRandomIdentityAddress(); + + var pnsHandle = PnsHandle.Parse(PushNotificationPlatform.Fcm, "someValue").Value; + var pnsRegistration = new PnsRegistration(identityAddress, deviceId, pnsHandle, "someAppId", PushEnvironment.Development); + + var mockPnsRegistrationsRepository = A.Fake(); + + A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) + .Returns(pnsRegistration); + + var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); + + // Act + await directPushService.DeleteRegistration(deviceId, CancellationToken.None); + + // Assert + A.CallTo(() => mockPnsRegistrationsRepository.Delete( + A>.That.Matches(e => e.FirstOrDefault() == deviceId), CancellationToken.None)) + .MustHaveHappenedOnceExactly(); + } + + [Fact] + public async Task Trying_to_delete_non_existing_PnsRegistration_does_nothing() + { + // Arrange + var deviceId = CreateRandomDeviceId(); + + var mockPnsRegistrationsRepository = A.Fake(); + + A.CallTo(() => mockPnsRegistrationsRepository.FindByDeviceId(deviceId, A._, A._)) + .Returns(null); + + var directPushService = CreateDirectPushService(mockPnsRegistrationsRepository); + + // Act + await directPushService.DeleteRegistration(deviceId, CancellationToken.None); + + // Assert + A.CallTo(() => mockPnsRegistrationsRepository.Delete( + A>._, CancellationToken.None)) + .MustNotHaveHappened(); + } + + private PushService CreateDirectPushService(IPnsRegistrationsRepository pnsRegistrationsRepository, PnsConnectorFactory? pnsConnectorFactory = null, + IIdentitiesRepository? identitiesRepository = null) + { + identitiesRepository ??= A.Dummy(); + pnsConnectorFactory ??= A.Dummy(); + var logger = A.Dummy>(); + + return new PushService(pnsRegistrationsRepository, pnsConnectorFactory, logger, new PushNotificationTextProvider(new PushNotificationResourceManager()), identitiesRepository); + } +}