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); }
public void GetNextGamerId_GivenEmptyAgniKai_ShouldReturnOne() { //Arrange var agniKai = new AgniKai { Ticket = string.Empty }; //Act && Assert Assert.AreEqual(1, agniKai.GetNextGamerId()); }
public void CanAccommodate_Test() { //Arrange var agniKai = new AgniKai { Ticket = string.Empty }; //Act && Assert Assert.IsTrue(agniKai.CanAccommodateGamer()); }
public void GetGamerByIndicator_GivenNoGamer_ExpectException() { //Arrange var agniKai = new AgniKai { Ticket = "Ticket" }; //Act && Assert Assert.Throws <InvalidOperationException>(() => agniKai.GetGamerByIndicator(Field.O)); }
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); }
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()); }
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); }
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); }
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); }
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()); }
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); }
public Task AddAgniKaiAsync(AgniKai agniKai) { _agniKais.Add(agniKai); _ongoingGameStates.Add(agniKai.Ticket, new State()); return(Task.CompletedTask); }