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());
        }
示例#2
0
 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);
 }
示例#3
0
        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));
        }