Exemple #1
0
        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));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
 private ChameleonGame(IRoomStore roomStore)
 {
     _roomStore = roomStore ?? RoomStore.Create();
 }