mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00

Sync notification push type is now used for both Notification create and update. Renamed the event types to specifically mention the purpose of status for notification status updates.
115 lines
5.2 KiB
C#
115 lines
5.2 KiB
C#
#nullable enable
|
|
using System.Security.Claims;
|
|
using Bit.Core.Exceptions;
|
|
using Bit.Core.NotificationCenter.Authorization;
|
|
using Bit.Core.NotificationCenter.Commands;
|
|
using Bit.Core.NotificationCenter.Entities;
|
|
using Bit.Core.NotificationCenter.Repositories;
|
|
using Bit.Core.Services;
|
|
using Bit.Core.Test.NotificationCenter.AutoFixture;
|
|
using Bit.Test.Common.AutoFixture;
|
|
using Bit.Test.Common.AutoFixture.Attributes;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using NSubstitute;
|
|
using Xunit;
|
|
|
|
namespace Bit.Core.Test.NotificationCenter.Commands;
|
|
|
|
[SutProviderCustomize]
|
|
[NotificationCustomize]
|
|
[NotificationStatusCustomize]
|
|
public class CreateNotificationStatusCommandTest
|
|
{
|
|
private static void Setup(SutProvider<CreateNotificationStatusCommand> sutProvider,
|
|
Notification? notification, NotificationStatus notificationStatus,
|
|
bool authorizedNotification = false, bool authorizedCreate = false)
|
|
{
|
|
sutProvider.GetDependency<INotificationRepository>()
|
|
.GetByIdAsync(notificationStatus.NotificationId)
|
|
.Returns(notification);
|
|
sutProvider.GetDependency<INotificationStatusRepository>()
|
|
.CreateAsync(notificationStatus)
|
|
.Returns(notificationStatus);
|
|
sutProvider.GetDependency<IAuthorizationService>()
|
|
.AuthorizeAsync(Arg.Any<ClaimsPrincipal>(), notification ?? Arg.Any<Notification>(),
|
|
Arg.Is<IEnumerable<IAuthorizationRequirement>>(reqs =>
|
|
reqs.Contains(NotificationOperations.Read)))
|
|
.Returns(authorizedNotification ? AuthorizationResult.Success() : AuthorizationResult.Failed());
|
|
sutProvider.GetDependency<IAuthorizationService>()
|
|
.AuthorizeAsync(Arg.Any<ClaimsPrincipal>(), notificationStatus,
|
|
Arg.Is<IEnumerable<IAuthorizationRequirement>>(reqs =>
|
|
reqs.Contains(NotificationStatusOperations.Create)))
|
|
.Returns(authorizedCreate ? AuthorizationResult.Success() : AuthorizationResult.Failed());
|
|
}
|
|
|
|
[Theory]
|
|
[BitAutoData]
|
|
public async Task CreateAsync_NotificationNotFound_NotFoundException(
|
|
SutProvider<CreateNotificationStatusCommand> sutProvider,
|
|
NotificationStatus notificationStatus)
|
|
{
|
|
Setup(sutProvider, notification: null, notificationStatus, true, true);
|
|
|
|
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.CreateAsync(notificationStatus));
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationStatusAsync(Arg.Any<Notification>(), Arg.Any<NotificationStatus>());
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationAsync(Arg.Any<Notification>());
|
|
}
|
|
|
|
[Theory]
|
|
[BitAutoData]
|
|
public async Task CreateAsync_NotificationReadNotAuthorized_NotFoundException(
|
|
SutProvider<CreateNotificationStatusCommand> sutProvider,
|
|
Notification notification, NotificationStatus notificationStatus)
|
|
{
|
|
Setup(sutProvider, notification, notificationStatus, authorizedNotification: false, true);
|
|
|
|
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.CreateAsync(notificationStatus));
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationStatusAsync(Arg.Any<Notification>(), Arg.Any<NotificationStatus>());
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationAsync(Arg.Any<Notification>());
|
|
}
|
|
|
|
[Theory]
|
|
[BitAutoData]
|
|
public async Task CreateAsync_CreateNotAuthorized_NotFoundException(
|
|
SutProvider<CreateNotificationStatusCommand> sutProvider,
|
|
Notification notification, NotificationStatus notificationStatus)
|
|
{
|
|
Setup(sutProvider, notification, notificationStatus, true, authorizedCreate: false);
|
|
|
|
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.CreateAsync(notificationStatus));
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationStatusAsync(Arg.Any<Notification>(), Arg.Any<NotificationStatus>());
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationAsync(Arg.Any<Notification>());
|
|
}
|
|
|
|
[Theory]
|
|
[BitAutoData]
|
|
public async Task CreateAsync_NotificationFoundAuthorized_NotificationStatusCreated(
|
|
SutProvider<CreateNotificationStatusCommand> sutProvider,
|
|
Notification notification, NotificationStatus notificationStatus)
|
|
{
|
|
Setup(sutProvider, notification, notificationStatus, true, true);
|
|
|
|
var newNotificationStatus = await sutProvider.Sut.CreateAsync(notificationStatus);
|
|
|
|
Assert.Equal(notificationStatus, newNotificationStatus);
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(1)
|
|
.PushSyncNotificationStatusAsync(notification, notificationStatus);
|
|
await sutProvider.GetDependency<IPushNotificationService>()
|
|
.Received(0)
|
|
.PushSyncNotificationAsync(Arg.Any<Notification>());
|
|
}
|
|
}
|