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()); }
private bool ValidateEquality(Domain.SpendingLimit spendingLimit) { Assert.AreEqual(Cmd.Id, spendingLimit.Id); Assert.AreEqual(Cmd.Interval, spendingLimit.Interval); Assert.AreEqual(Cmd.Value, spendingLimit.Value); return(true); }
public async Task <IIdentifierResult> HandleAsync(ICreateSpendingLimit command, ICorrelationContext context) { var assignmentToUser = await GetAssignmentToUser(_repository, command.ParentUserAssignmentId); var spendingLimit = new Domain.SpendingLimit(command.Id, command.Interval, command.Value); assignmentToUser.SpendingLimits.Add(spendingLimit); await _repository.UpdateAsync(assignmentToUser); try { await _repository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("spending_limit_already_exists", $"A spending limit with the ID '{command.Id}' already exists."); } await _busPublisher.Publish(new SpendingLimitCreated(spendingLimit.Id, assignmentToUser.Id, spendingLimit.Interval, spendingLimit.Value)); return(new IdentifierResult(spendingLimit.Id)); }