#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.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] public class CreateNotificationCommandTest { private static void Setup(SutProvider sutProvider, Notification notification, bool authorized = false) { sutProvider.GetDependency() .CreateAsync(notification) .Returns(notification); sutProvider.GetDependency() .AuthorizeAsync(Arg.Any(), notification, Arg.Is>(reqs => reqs.Contains(NotificationOperations.Create))) .Returns(authorized ? AuthorizationResult.Success() : AuthorizationResult.Failed()); } [Theory] [BitAutoData] public async Task CreateAsync_AuthorizationFailed_NotFoundException( SutProvider sutProvider, Notification notification) { Setup(sutProvider, notification, authorized: false); await Assert.ThrowsAsync(() => sutProvider.Sut.CreateAsync(notification)); } [Theory] [BitAutoData] public async Task CreateAsync_Authorized_NotificationCreated( SutProvider sutProvider, Notification notification) { Setup(sutProvider, notification, true); var newNotification = await sutProvider.Sut.CreateAsync(notification); Assert.Equal(notification, newNotification); Assert.Equal(DateTime.UtcNow, notification.CreationDate, TimeSpan.FromMinutes(1)); Assert.Equal(notification.CreationDate, notification.RevisionDate); } }