public void When_proposed_movement_is_valid_pub_accepted_movement_and_store_it() { Mock <IRestClient> mockRestClient = new Mock <IRestClient>(); Mock <IRepository> mockRepository = new Mock <IRepository>(); string subscriptionId = Guid.NewGuid().ToString(); string gameId = Guid.NewGuid().ToString(); string firstPlayerId = Guid.NewGuid().ToString(); string secondPlayerId = Guid.NewGuid().ToString(); List <AcceptedMovement> previousMovements = new List <AcceptedMovement> { new AcceptedMovement { GameId = gameId, PlayerId = firstPlayerId, Position = new Position { X = 0, Y = 0 } }, new AcceptedMovement { GameId = gameId, PlayerId = secondPlayerId, Position = new Position { X = 2, Y = 2 } }, }; mockRestClient.Setup(m => m.Subscribe(ProposedMovement.Topic)).Returns(subscriptionId); mockRestClient .Setup(m => m.NextFact <ProposedMovement>(ProposedMovement.Topic, subscriptionId, 30)) .Returns(new ProposedMovement { GameId = gameId, PlayerId = firstPlayerId, Position = new Position { X = 0, Y = 1 } }); mockRestClient .Setup(m => m.PostFact(AcceptedMovement.Topic, It.IsAny <AcceptedMovement>())) .Callback((string topic, Fact fact) => { Assert.IsInstanceOfType(fact, typeof(AcceptedMovement)); AcceptedMovement mov = (AcceptedMovement)fact; Assert.AreEqual(0, mov.Position.X); Assert.AreEqual(1, mov.Position.Y); Assert.AreEqual(gameId, mov.GameId); Assert.AreEqual(firstPlayerId, mov.PlayerId); }); mockRepository.Setup(m => m.GetGame(gameId)).Returns(previousMovements); mockRepository.Setup(m => m.Save(It.IsAny <AcceptedMovement>())).Callback((AcceptedMovement mov) => { Assert.AreEqual(0, mov.Position.X); Assert.AreEqual(1, mov.Position.Y); Assert.AreEqual(gameId, mov.GameId); Assert.AreEqual(firstPlayerId, mov.PlayerId); }); Referee referee = new Referee(mockRestClient.Object, mockRepository.Object); referee.ProcessMovement(); }
public void Save(AcceptedMovement movement) { var moves = _repository.Get <List <AcceptedMovement> >(movement.GameId); if (moves == null) { moves = new List <AcceptedMovement> { movement } } ; else { moves.Add(movement); } _repository.Set(movement.GameId, moves); }
public void ProcessMovement() { ProposedMovement fact = GetMovement(); Movement movement = Convert(fact); IList <Movement> previousMovements = _acceptedMovementRepository.GetGame(fact.GameId) .Select(Convert) .ToList(); Board board = new Board(previousMovements); if (board.IsValid(movement)) { AcceptedMovement acceptedMovement = Accept(fact); _restClient.PostFact(AcceptedMovement.Topic, acceptedMovement); _acceptedMovementRepository.Save(acceptedMovement); } else { InvalidMovement invalidMovement = Reject(fact); _restClient.PostFact(InvalidMovement.Topic, invalidMovement); } }
public void Save(AcceptedMovement movement) { _movements.Add(movement); }