Example #1
0
        public async Task RunningNumber_GetNext_ShouldIncreaseProjection()
        {
            using (var connection = this._testInfrastructure.OpenDatabaseConnection())
            {
                // Arrange
                var runningNumberRepository        = new RunningNumberRepository();
                var runningNumberCounterRepository = new RunningNumberCounterRepository();

                var commandDispatcher    = this._testInfrastructure.DiContainer.GetInstance <IMediator>();
                var nextNumberCommand    = new CreateRunningNumberCommand(RunningNumberCounterArea.Achievement);
                var achievementCounterId =
                    RunningNumberCounterCommandHandler.AreaToIdentityMapping[RunningNumberCounterArea.Achievement];
                var runningNumberBefore =
                    await runningNumberCounterRepository.GetByIdAsync(connection, achievementCounterId);

                // Act
                var attachResult = await commandDispatcher.Send(nextNumberCommand);

                var newNumber = await runningNumberRepository.GetByIdAsync(connection, attachResult.RunningNumberId);

                var runningNumberAfter =
                    await runningNumberCounterRepository.GetByIdAsync(connection, achievementCounterId);

                // Assert
                Assert.That(newNumber, Is.Not.Null);
                Assert.That(newNumber.RunningNumberCounterId, Is.EqualTo(achievementCounterId));
                Assert.That(runningNumberAfter.CurrentNumber, Is.GreaterThan(runningNumberBefore.CurrentNumber));
            }
        }
Example #2
0
        public async Task <CreateRunningNumberResponse> Handle(CreateRunningNumberCommand request,
                                                               CancellationToken cancellationToken)
        {
            var runningNumberCounterId = AreaToIdentityMapping[request.CounterArea];
            var aggregate    = this.AggregateRepository.GetById <RunningNumberCounterAggregateRoot>(runningNumberCounterId);
            var nextNumberId = this.GuidGenerator.GenerateGuid();

            aggregate.AddNextNumber(nextNumberId);
            await this.AggregateRepository.SaveAsync(aggregate);

            return(new CreateRunningNumberResponse(nextNumberId));
        }
        public async Task RunningNumber_GetNext_IncreasesCounter()
        {
            // Arrange
            var aggregateRepository = this._testInfrastructure.DiContainer.GetInstance <IAggregateRepository>();
            var commandDispatcher   = this._testInfrastructure.DiContainer.GetInstance <IMediator>();
            var nextNumberCommand   = new CreateRunningNumberCommand(RunningNumberCounterArea.Achievement);

            var attachResult = await commandDispatcher.Send(nextNumberCommand);

            var runningNumberCounter =
                aggregateRepository.GetById <RunningNumberCounterAggregateRoot>(
                    RunningNumberCounterCommandHandler.AreaToIdentityMapping[RunningNumberCounterArea.Achievement]);
            var nextNumber =
                runningNumberCounter.Numbers.Single(x => x.RunningNumberId == attachResult.RunningNumberId);

            Assert.That(nextNumber, Is.Not.Null);
        }