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