public async Task Handle_Success() { // Arrange var request = new EditAvatar(DiverFactory.JohnDoeDiverId, validAvatarFile); // Act var useCaseResult = await interactor.Handle(request, CancellationToken.None); // Assert useCaseResult.IsSuccessful.Should().BeTrue(); A.CallTo(() => avatarStore.StoreAvatarAsync( DiverFactory.JohnDoeFirstName, A <string> ._, A <string> ._, A <Stream> ._)).MustHaveHappenedOnceExactly(); }
public async Task <UseCaseResult> Handle([NotNull] EditAvatar request, CancellationToken cancellationToken) { if (request == null) { throw new ArgumentNullException(nameof(request)); } logger.LogInformation("Changing avatar for user [{id}]", request.UserId, request.Avatar.Filename, request.Avatar.ContentType); var diver = await diverRepository.FindByIdAsync(request.UserId); if (diver == null) { logger.LogError("Diver with Id [{id}] not found!", request.UserId); return(UseCaseResult.NotFound()); } if (!await currentUser.GetIsDiverOrAdmin(request.UserId)) { logger.LogError("Current user [{currentUser}] not allowed to change avatar of user [{user}]", currentUser.Username, diver.Realname); return(UseCaseResult.AccessDenied()); } var newAvatarId = await avatarStore.StoreAvatarAsync( diver.Firstname, diver.AvatarId, GetAvatarFileExt(request), request.Avatar.Content); diver.ChangeAvatar(newAvatarId); await diverRepository.UpdateAsync(diver); logger.LogInformation("Avatar of user [{userId}] change by user [{currentUser}]", diver.Realname, currentUser.Username); return(UseCaseResult.Success()); }