public void UpdatesSpendingLimitInRepository_RaisesIntegrationEvent() { var assignment = new Domain.AssignmentToUser(ParentUserAssignmentId, ParentUserAssignmentMeansId, DateTimeOffset.UtcNow, null, Guid.Empty, false); var spendingLimit = new Domain.SpendingLimit(Id, TimeSpan.FromMinutes(2), 111); assignment.SpendingLimits.Add(spendingLimit); var repository = new Mock <IAssignmentsRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(ParentUserAssignmentId)).Returns(Task.FromResult <Domain.Assignment>(assignment)).Verifiable(); repository.Setup(r => r.UpdateAsync(assignment)).Returns(Task.CompletedTask).Verifiable(); repository.Setup(r => r.SaveChanges()).Returns(Task.CompletedTask).Verifiable(); var busPublisher = new Mock <IBusPublisher>(MockBehavior.Strict); busPublisher.Setup(p => p.Publish <ISpendingLimitDeleted>(It.Is <ISpendingLimitDeleted>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var handler = new DeleteSpendingLimitHandler(repository.Object, busPublisher.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); repository.Verify(); busPublisher.Verify(); Assert.IsFalse(assignment.SpendingLimits.Any()); }
public void UpdatesAssignmentInRepository_RaisesIntegrationEvent() { var assignment = new Domain.AssignmentToUser(Id, MeansId, DateTimeOffset.UtcNow, null, Guid.Empty, false); var repository = new Mock <IAssignmentsRepository>(MockBehavior.Strict); repository.Setup(r => r.GetAsync(Id)).Returns(Task.FromResult <Domain.Assignment>(assignment)).Verifiable(); repository.Setup(r => r.UpdateAsync(assignment)).Returns(Task.CompletedTask).Verifiable(); repository.Setup(r => r.SaveChanges()).Returns(Task.CompletedTask).Verifiable(); var busPublisher = new Mock <IBusPublisher>(MockBehavior.Strict); busPublisher.Setup(p => p.Publish <IAssignmentToUserUpdated>(It.Is <IAssignmentToUserUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var meansVerifier = new Mock <IAuthenticationMeansVerifier>(MockBehavior.Strict); meansVerifier.Setup(v => v.AssertExists(MeansId)).Returns(Task.CompletedTask).Verifiable(); var userVerifier = new Mock <IUserVerifier>(MockBehavior.Strict); userVerifier.Setup(v => v.AssertExists(UserId)).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdateAssignmentToUserHandler(repository.Object, busPublisher.Object, meansVerifier.Object, userVerifier.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); ValidateEquality(assignment); repository.Verify(); busPublisher.Verify(); meansVerifier.Verify(); userVerifier.Verify(); }
protected override Domain.Assignment InstantiateDomain(BrowseSpendingLimits query, out ICollection <Domain.SpendingLimit> innerCollection) { var assignment = new Domain.AssignmentToUser(TestIds.A, Guid.Empty, TestDateTimes.Year2001, null, TestIds.B, false); innerCollection = assignment.SpendingLimits; return(assignment); }
public async Task <IIdentifierResult> HandleAsync(ICreateAssignmentToUser command, ICorrelationContext context) { await Task.WhenAll( _meansVerifier.AssertExists(command.MeansId), _userVerifier.AssertExists(command.UserId) ); var assignment = new Domain.AssignmentToUser(command.Id, command.MeansId, command.ValidSince, command.ValidUntil, command.UserId, command.IsShared); await _repository.AddAsync(assignment); try { await _repository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("assignment_to_user_already_exists", $"An assignment with the ID '{command.Id}' already exists."); } try { await _exclVerifier.VerifyAssignmentExclusivity(command.MeansId); } catch (BaristaException) { await _repository.DeleteAsync(assignment); await _repository.SaveChanges(); throw; } await _busPublisher.Publish(new AssignmentToUserCreated(assignment.Id, assignment.MeansId, assignment.ValidSince, assignment.ValidUntil, assignment.UserId, assignment.IsShared)); return(new IdentifierResult(command.Id)); }