コード例 #1
0
        public void Character_cannot_be_spawned_if_it_has_a_location()
        {
            // Arrange
            var characterId = Guid.NewGuid();
            var characterLocationRepository       = new Mock <ICharacterLocationRepository>();
            var singleLocationPerCharacterChecker = new SingleLocationPerCharacterChecker(characterLocationRepository.Object);

            var existingCharacterLocation = CharacterLocation.Create(
                characterId,
                0,
                0,
                singleLocationPerCharacterChecker
                );

            characterLocationRepository
            .Setup(r => r.GetByCharacterIdAsync(
                       It.Is <Guid>(id => id == characterId),
                       It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(existingCharacterLocation));

            // Assert
            AssertBrokenRule <CharacterCanOnlyHaveOneLocation>(() =>
            {
                // Act
                CharacterLocation.Create(
                    characterId,
                    0,
                    0,
                    singleLocationPerCharacterChecker);
            });
        }
コード例 #2
0
        public void Character_can_be_spawned_if_it_has_no_location()
        {
            // Arrange
            var characterId = Guid.NewGuid();
            var characterLocationRepository = new Mock <ICharacterLocationRepository>();

            characterLocationRepository
            .Setup(r => r.GetByCharacterIdAsync(
                       It.Is <Guid>(id => id == characterId),
                       It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult <CharacterLocation>(null));

            var singleLocationPerCharacterChecker = new SingleLocationPerCharacterChecker(characterLocationRepository.Object);

            // Act
            var character = CharacterLocation.Create(
                characterId,
                0,
                0,
                singleLocationPerCharacterChecker
                );

            // Assert
            AssertPublishedDomainEvent <CharacterMovedEvent>(character);
        }
コード例 #3
0
        public async Task <CharacterLocationDto> Handle(SpawnCharacterCommand request, CancellationToken cancellationToken)
        {
            var random            = new Random(SystemClock.Now.Millisecond);
            var characterLocation = CharacterLocation.Create(request.CharacterId, random.Next(-2, 2), random.Next(-2, 2), _singleLocationPerCharacterChecker);

            await _characterLocationRepository.AddAsync(characterLocation, cancellationToken);

            await _unitOfWork.CommitAsync(cancellationToken);

            return(CharacterLocationDto.FromCharacterLocation(characterLocation));
        }
コード例 #4
0
        public async Task <CharacterLocationDto> Handle(MoveCharacterCommand request, CancellationToken cancellationToken)
        {
            var characterLocation = await _characterLocationRepository.GetByCharacterIdAsync(request.CharacterId, cancellationToken);

            if (characterLocation != null)
            {
                characterLocation.ChangeLocation(request.X, request.Y);
            }
            else
            {
                characterLocation = CharacterLocation.Create(request.CharacterId,
                                                             request.X, request.Y, _singleLocationPerCharacterChecker);
                await _characterLocationRepository.AddAsync(characterLocation, cancellationToken);
            }

            await _unitOfWork.CommitAsync(cancellationToken);

            return(CharacterLocationDto.FromCharacterLocation(characterLocation));
        }