コード例 #1
0
        public async Task RecordMove_GivenTicketAndMove_ExpectMoveBeRecorded()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = "12345"
            };
            var         mockVault     = Substitute.For <IVault>();
            var         mockKeyGen    = Substitute.For <IKeyGenerator>();
            var         database      = new DatabaseRepository(mockVault, mockKeyGen);
            var         move          = (2, 3);
            var         expectedState = new State();
            const Field indicator     = Field.X;

            expectedState.Fields[2][3] = indicator;

            //Act
            await database.AddAgniKaiAsync(agniKai);

            await database.RecordMoveAsync(agniKai.Ticket, move, indicator);

            var state = await database.GetStateAsync(agniKai.Ticket);

            //Assert
            state.ShouldBeEquivalentTo(expectedState);
        }
コード例 #2
0
        public void GetNextGamerId_GivenEmptyAgniKai_ShouldReturnOne()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = string.Empty
            };

            //Act && Assert
            Assert.AreEqual(1, agniKai.GetNextGamerId());
        }
コード例 #3
0
        public void CanAccommodate_Test()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = string.Empty
            };

            //Act && Assert
            Assert.IsTrue(agniKai.CanAccommodateGamer());
        }
コード例 #4
0
        public void GetGamerByIndicator_GivenNoGamer_ExpectException()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = "Ticket"
            };

            //Act && Assert
            Assert.Throws <InvalidOperationException>(() => agniKai.GetGamerByIndicator(Field.O));
        }
コード例 #5
0
        public async Task SendMoveAI_GivenParameters_ExpectSomething()
        {
            //Arrange
            var state = new State(new[] {
                "...|.x.|...", "...|...|...", "...|...|...",
                "...|...|...", "...|...|...", "...|...|...",
                "...|...|...", "...|...|...", "...|...|..."
            });
            var agniKai = new AgniKai
            {
                Ticket = "Ticket"
            };

            agniKai.AddGamer(new Player
            {
                AgniKaiTicket = "Ticket",
                Name          = "Player-1",
                Indicator     = Field.X
            });
            agniKai.AddGamer(new AI
            {
                AgniKaiTicket = "Ticket",
                Name          = "Gamer-1",
                Indicator     = Field.O
            });
            var mockDatabase = Substitute.For <IDatabaseRepository>();

            mockDatabase.RecordMoveAsync(Arg.Any <string>(), Arg.Any <(int, int)>(), Arg.Any <Field>()).Returns(Task.CompletedTask);
            mockDatabase.GetStateAsync(Arg.Any <string>()).Returns(Task.FromResult(state));
            mockDatabase.GetAgniKaiByTicketAsync(Arg.Any <string>()).Returns(Task.FromResult(agniKai));
            var clients = Substitute.For <IHubCallerConnectionContext <object> >();
            var uiMock  = Substitute.For <IMockClient>();

            uiMock.When(x => x.broadcastState(Arg.Any <State>())).Do(x => { });
            clients.Group(Arg.Any <string>()).Returns(uiMock);
            var hub = new GameHub(mockDatabase)
            {
                Clients = clients
            };

            //Act
            await hub.SendMoveAI("Ticket", 0, 4, 'x');

            //Assert
            await mockDatabase.Received(1).RecordMoveAsync("Ticket", (0, 4), Field.X);

            await mockDatabase.Received(1).RecordMoveAsync("Ticket", Arg.Any <(int, int)>(), Field.O);

            await mockDatabase.Received(2).GetStateAsync("Ticket");

            await mockDatabase.Received(1).GetAgniKaiByTicketAsync("Ticket");

            uiMock.Received(1).broadcastState(state);
        }
コード例 #6
0
        public void GetNextGamerId_GivenAgniKaiWithOneGamer_ShouldReturnTwo()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = string.Empty
            };

            //Act
            agniKai.AddGamer(new AI {
                AgniKaiTicket = string.Empty, Name = "gamer_1"
            });

            //Assert
            Assert.AreEqual(2, agniKai.GetNextGamerId());
        }
コード例 #7
0
        public void GetGamerByIndicator_GivenGamerExists_ExpectGamer()
        {
            //Arrange
            var gamer = new AI {
                Indicator = Field.O
            };
            var agniKai = new AgniKai {
                Ticket = "Ticket"
            };

            //Act
            agniKai.AddGamer(gamer);

            //Assert
            agniKai.GetGamerByIndicator(Field.O).ShouldBeEquivalentTo(gamer);
        }
コード例 #8
0
        public void AddGamer_GivenGamer_ShouldAddGamer()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = string.Empty
            };
            var gamer = new AI {
                AgniKaiTicket = string.Empty, Name = "gamer_1"
            };

            //Act
            agniKai.AddGamer(gamer);
            var result = agniKai.GetGamerByName("gamer_1");

            //Assert
            result.ShouldBeEquivalentTo(gamer);
        }
コード例 #9
0
        public void AddGamer_GivenPreviousGamerWithIndicatorX_ShouldAddGamerWithIndicatorO()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = string.Empty
            };
            var gamer = new Player {
                AgniKaiTicket = string.Empty, Name = "gamer_2"
            };

            //Act
            agniKai.AddGamer(new Player {
                AgniKaiTicket = string.Empty, Name = "gamer_1", Indicator = Field.X
            });
            agniKai.AddGamer(gamer);

            //Assert
            Assert.AreEqual(gamer.Indicator, Field.O);
        }
コード例 #10
0
        public async Task AddAgniKaiAsync_GivenAgniKai_ExpectAgniKaiBeAdded()
        {
            //Arrange
            var agniKai = new AgniKai {
                Ticket = "12345"
            };
            var mockVault  = Substitute.For <IVault>();
            var mockKeyGen = Substitute.For <IKeyGenerator>();
            var database   = new DatabaseRepository(mockVault, mockKeyGen);

            //Act
            await database.AddAgniKaiAsync(agniKai);

            var result = await database.GetAgniKaiByTicketAsync("12345");

            var state = await database.GetStateAsync(agniKai.Ticket);

            //Assert
            result.ShouldBeEquivalentTo(agniKai);
            state.ShouldBeEquivalentTo(new State());
        }
コード例 #11
0
        public async Task CreateGamerWithNameAsync_GivenTicketAndName_ExpectGamerCreated()
        {
            //Arrange
            var agnikai = new AgniKai {
                Ticket = "Ticket"
            };
            var mockDatabase = Substitute.For <IDatabaseRepository>();

            mockDatabase.GetAgniKaiByTicketAsync(Arg.Any <string>()).Returns(Task.FromResult(agnikai));
            var gamerRepo = new GamerRepository(mockDatabase);

            //Act
            await gamerRepo.CreateGamerWithNameAsync("Ticket", "Gamer-1");

            var gamer = agnikai.GetGamerByName("Gamer-1");

            //Assert
            await mockDatabase.Received(1).GetAgniKaiByTicketAsync("Ticket");

            Assert.IsInstanceOf <AI>(gamer);
        }
コード例 #12
0
 public Task AddAgniKaiAsync(AgniKai agniKai)
 {
     _agniKais.Add(agniKai);
     _ongoingGameStates.Add(agniKai.Ticket, new State());
     return(Task.CompletedTask);
 }