public void TestCanStartGame() { const string roomCode = "AAAA"; const string word = "Thing"; var room = new Room(); room.AddPerson("person-1", "jacob"); room.AddPerson("person-2", "anita"); room.AddPerson("person-3", "robin"); var dynamoTable = new Mock <IDynamoTable>(); dynamoTable.Setup(foo => foo.GetRoom(roomCode)).Returns(room); var roomStore = RoomStore.Create(dynamoTable.Object); roomStore.StartGame(roomCode, word, new HashSet <string> { "person-1" }, "person-2"); var expectedRoom = new Room(); expectedRoom.AddPerson("person-1", "jacob"); expectedRoom.SetCharacter("person-1", "chameleon"); expectedRoom.AddPerson("person-2", "anita"); expectedRoom.SetCharacter("person-2", word); expectedRoom.AddPerson("person-3", "robin"); expectedRoom.SetCharacter("person-3", word); dynamoTable.Verify(x => x.SaveRoom(It.Is <Room>(y => y.IsTheSameAs(expectedRoom))), Times.Once); }
public void TestGetNonExistentRoom() { var roomStore = RoomStore.Create(new DynamoTable(true)); var roomFromDb = roomStore.GetRoom("not-a-room"); Assert.That(roomFromDb, Is.Null); }
public void TestCanSaveRoom() { var roomStore = RoomStore.Create(new DynamoTable(true)); var room = roomStore.CreateRoom(); var personAdded = roomStore.CreatePersonInRoom(room.RoomCode, "Jacob"); var roomFromDb = roomStore.GetRoom(room.RoomCode); Assert.That(roomFromDb.PersonIds.Count, Is.EqualTo(1)); Assert.That(roomFromDb.PersonIds.First(), Is.EqualTo(personAdded)); }
public void CanPlayGame() { var chameleonGame = ChameleonGame.Create(RoomStore.Create(new InMemoryDynamoTable())); // Creating and joining the room var personAndRoom = chameleonGame.CreateRoom("Anita"); var roomCode = personAndRoom.RoomCode; var anita = personAndRoom.PersonId; var jacob = chameleonGame.JoinRoom(roomCode, "Jacob").PersonId; var paul = chameleonGame.JoinRoom(roomCode, "Paul").PersonId; // Getting the status var status = chameleonGame.GetRoomStatus(roomCode, anita); Assert.That(status.Name, Is.EqualTo("Anita")); Assert.That(status.PeopleCount, Is.EqualTo(3)); Assert.That(status.State, Is.EqualTo(RoomState.PreGame.ToString())); Assert.That(status.Character, Is.Null); Assert.That(status.FirstPersonName, Is.Null); // Starting a game chameleonGame.StartGame(roomCode, jacob); var inGameStatus = chameleonGame.GetRoomStatus(roomCode, paul); Assert.That(inGameStatus.State, Is.EqualTo(RoomState.InGame.ToString())); Assert.That(inGameStatus.Character, Is.Not.Null); Assert.That(inGameStatus.FirstPersonName, Is.AnyOf("Anita", "Jacob", "Paul")); // Leaving a room chameleonGame.LeaveRoom(roomCode, paul); var afterLeavingStatus = chameleonGame.GetRoomStatus(roomCode, anita); Assert.That(afterLeavingStatus.PeopleCount, Is.EqualTo(2)); // A new player joining a room with an existing game var anna = chameleonGame.JoinRoom(roomCode, "Anna").PersonId; var newPlayerStatus = chameleonGame.GetRoomStatus(roomCode, anna); Assert.That(newPlayerStatus.State, Is.EqualTo(RoomState.PreGame.ToString())); Assert.That(newPlayerStatus.Character, Is.Null); Assert.That(newPlayerStatus.FirstPersonName, Is.Null); }
public void TestCanCreateRoom() { var existingRoom = new Room { RoomCode = "ABCD" }; var dynamoTable = new Mock <IDynamoTable>(); dynamoTable.Setup(foo => foo.GetRoom(existingRoom.RoomCode)).Returns(existingRoom); var randomRoomCode = new Mock <IRandomRoomCode>(); randomRoomCode.Setup(x => x.Generate()) .Returns("WXYZ"); var roomStore = RoomStore.Create(dynamoTable.Object, randomRoomCode.Object); roomStore.CreateRoom(); dynamoTable.Verify(x => x.SaveRoom(It.Is <Room>(y => y.RoomCode == "WXYZ")), Times.Once); }
public void TestCreateRoomDoesNotCauseInfiniteLoop() { var existingRoom = new Room { RoomCode = "ABCD" }; var dynamoTable = new Mock <IDynamoTable>(); dynamoTable.Setup(foo => foo.GetRoom(existingRoom.RoomCode)).Returns(existingRoom); var randomRoomCode = new Mock <IRandomRoomCode>(); randomRoomCode.Setup(x => x.Generate()) .Returns(existingRoom.RoomCode); var roomStore = RoomStore.Create(dynamoTable.Object, randomRoomCode.Object); Assert.Throws <CouldNotFindAvailableRoomCodeException>(() => roomStore.CreateRoom()); dynamoTable.Verify( x => x.SaveRoom(It.IsAny <Room>()), Times.Never); }
public void TestCanRemovePersonFromRoom() { const string roomCode = "AAAA"; var room = new Room(); room.AddPerson("person-1", "jacob"); room.AddPerson("person-2", "anita"); room.AddPerson("person-3", "robin"); var dynamoTable = new Mock <IDynamoTable>(); dynamoTable.Setup(foo => foo.GetRoom(roomCode)).Returns(room); var roomStore = RoomStore.Create(dynamoTable.Object); roomStore.RemovePersonFromRoom(roomCode, "person-1"); var expectedRoom = new Room(); expectedRoom.AddPerson("person-2", "anita"); expectedRoom.AddPerson("person-3", "robin"); dynamoTable.Verify(x => x.SaveRoom(It.Is <Room>(y => y.IsTheSameAs(expectedRoom))), Times.Once); }
private ChameleonGame(IRoomStore roomStore) { _roomStore = roomStore ?? RoomStore.Create(); }