public void UpdatesAssignmentInRepository_RaisesIntegrationEvent() { var assignment = new Domain.AssignmentToPointOfSale(Id, Guid.Empty, DateTimeOffset.UtcNow, null, Guid.Empty); 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 <IAssignmentToPointOfSaleUpdated>(It.Is <IAssignmentToPointOfSaleUpdated>(e => ValidateEquality(e)))).Returns(Task.CompletedTask).Verifiable(); var meansVerifier = new Mock <IAuthenticationMeansVerifier>(MockBehavior.Strict); meansVerifier.Setup(v => v.AssertExists(OfMeans)).Returns(Task.CompletedTask).Verifiable(); var posVerifier = new Mock <IPointOfSaleVerifier>(MockBehavior.Strict); posVerifier.Setup(v => v.AssertExists(PointOfSaleId)).Returns(Task.CompletedTask).Verifiable(); var handler = new UpdateAssignmentToPointOfSaleHandler(repository.Object, busPublisher.Object, meansVerifier.Object, posVerifier.Object); var result = handler.HandleAsync(Cmd, new Mock <ICorrelationContext>().Object).GetAwaiter().GetResult(); Assert.IsTrue(result.Successful); ValidateEquality(assignment); repository.Verify(); busPublisher.Verify(); meansVerifier.Verify(); posVerifier.Verify(); }
public async Task <IIdentifierResult> HandleAsync(ICreateAssignmentToPointOfSale command, ICorrelationContext context) { await Task.WhenAll( _meansVerifier.AssertExists(command.MeansId), _posVerifier.AssertExists(command.PointOfSaleId) ); var assignment = new Domain.AssignmentToPointOfSale(command.Id, command.MeansId, command.ValidSince, command.ValidUntil, command.PointOfSaleId); await _repository.AddAsync(assignment); try { await _repository.SaveChanges(); } catch (EntityAlreadyExistsException) { throw new BaristaException("assignment_to_point_of_sale_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 AssignmentToPointOfSaleCreated(command.Id, command.MeansId, command.ValidSince, command.ValidUntil, command.PointOfSaleId)); return(new IdentifierResult(assignment.Id)); }