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); }); }
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); }
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)); }
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)); }