Exemple #1
0
        private GameContext GetTestContext(string testDb)
        {
            //Prep a context and controller
            GameContext gameContext = new GameContext(InMemoryContextFactory.GetContextOptions(testDb));

            //Add the civilization seed data
            gameContext.Civs.Add(new Civ {
                Id             = 1,
                Name           = "test",
                AstStone       = 4,
                AstEarlyBronze = 7,
                AstLateBronze  = 10,
                AstEarlyIron   = 13,
                AstLateIron    = 16
            });

            //Add a sample activeCiv
            gameContext.ActiveCivs.Add(new ActiveCiv {
                Id           = 1,
                CivId        = 1,
                GameName     = "controller unit test",
                CurrentPhase = (int)ActiveCiv.Phases.TaxToSupport
            });

            gameContext.SaveChanges();

            return(gameContext);
        }
        public void CanCheckForGameEnd(int astPosition, bool expectedResult, int expectedPhase)
        {
            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions("game_end");
            GameContext context = new GameContext(options);

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv
            {
                CurrentPhase = (int)ActiveCiv.Phases.MoveAST,
                Civ          = new Civ {
                    AstLateIron = 16
                },
                AstPosition = astPosition,
            })
                                  .Entity;

            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            bool actualResult = testLoop.CheckForGameEnd();

            //Assert
            Assert.Equal(expectedResult, actualResult);
            Assert.Equal(expectedPhase, testLoop.ActiveCiv.CurrentPhase);
        }
        public void CanResolveCalculateSpendLimit(int treasury, Commodity[] commodities, int expectedSpendLimit)
        {
            int expectedPhase = (int)ActiveCiv.Phases.BuyAdvances;

            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions("calculate_spend_limit");
            GameContext context = new GameContext(options);

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv {
                OwnedAdvancements = new Collection <OwnedAdvancement> {
                }
            })
                                  .Entity;

            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            testLoop.ResolveCalculateSpendLimit(treasury, commodities);

            //Assert
            Assert.Equal(expectedSpendLimit, testLoop.ActiveCiv.SpendLimit);
            Assert.Equal(expectedPhase, testLoop.ActiveCiv.CurrentPhase);
        }
        public void CanResolveMoveAst(int astPosition, int cities, int expectedResult)
        {
            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions("move_ast");
            GameContext context = new GameContext(options);

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv {
                Civ = new Civ {
                    AstStone = 5, AstEarlyBronze = 8, AstLateBronze = 11, AstEarlyIron = 14, AstLateIron = 16
                },
                Cities            = cities,
                AstPosition       = astPosition,
                OwnedAdvancements = new Collection <OwnedAdvancement> {
                }
            })
                                  .Entity;

            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            int actualResult = testLoop.ResolveMoveAst();

            //Assert
            Assert.Equal(expectedResult, actualResult);
        }
        public void CanCheckPlayerCanAffordAdvancements(string dbString, int spendLimit, int[] advancements, bool expectedResult)
        {
            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions(dbString);
            GameContext context = new GameContext(options);

            //Add advancements
            foreach (int advancementId in advancements)
            {
                context.Advancements.Add(new Advancement {
                    Id = advancementId, BaseCost = 50
                });
            }

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv {
                SpendLimit = spendLimit, OwnedAdvancements = new Collection <OwnedAdvancement> {
                }
            })
                                  .Entity;

            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            bool actualResult = testLoop.CheckPlayerCanAffordAdvancements(advancements);

            //Assert
            Assert.Equal(expectedResult, actualResult);
        }
        public void CanResolveTaxToSupport()
        {
            int expectedCities = 4;
            int expectedPhase  = (int)ActiveCiv.Phases.CalculateSpendLimit;

            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions("Tax_to_support");
            GameContext context = new GameContext(options);

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv {
                OwnedAdvancements = new Collection <OwnedAdvancement> {
                }
            })
                                  .Entity;

            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            testLoop.ResolveTaxToSupport(expectedCities);

            //Assert
            Assert.Equal(expectedCities, testLoop.ActiveCiv.Cities);
            Assert.Equal(expectedPhase, testLoop.ActiveCiv.CurrentPhase);
        }
        private GameContext GetTestContext(string testDb)
        {
            //Prep a context and controller
            GameContext gameContext = new GameContext(InMemoryContextFactory.GetContextOptions(testDb));

            foreach (Advancement advancement in Iteration1Seeder.GetSeedAdvancements())
            {
                gameContext.Advancements.Add(advancement);
            }
            gameContext.SaveChanges();

            return(gameContext);
        }
        private GameContext GetTestContext(string testDb)
        {
            //Prep a context and controller
            GameContext gameContext = new GameContext(InMemoryContextFactory.GetContextOptions(testDb));

            //Add the civilization seed data
            foreach (Civ civ in Iteration1Seeder.GetSeedCivilizations())
            {
                gameContext.Civs.Add(civ);
            }

            //Add a sample activeCiv
            gameContext.ActiveCivs.Add(new ActiveCiv {
                Id = 1, CivId = 4, GameName = "controller unit test"
            });

            gameContext.SaveChanges();

            return(gameContext);
        }
        public void CanResolveBuyAdvances(string dbString, int[] newAdvances, int[] existingAdvances, bool expectedAffordability)
        {
            int expectedPhase = (int)ActiveCiv.Phases.MoveAST;

            //Build the list of expected advancements after purchase
            List <int> expectedAdvancements = new List <int>(existingAdvances);

            if (expectedAffordability)
            {
                foreach (int newAdvance in newAdvances)
                {
                    expectedAdvancements.Add(newAdvance);
                }
            }

            //Prep the context
            DbContextOptions <GameContext> options = InMemoryContextFactory.GetContextOptions(dbString);
            GameContext context = new GameContext(options);

            //Add advancements
            foreach (int advancementId in newAdvances)
            {
                context.Advancements.Add(new Advancement {
                    Id = advancementId, BaseCost = 50
                });
            }
            foreach (int advancementId in existingAdvances)
            {
                context.Advancements.Add(new Advancement {
                    Id = advancementId, BaseCost = 50
                });
            }

            //Create an active civ
            ActiveCiv activeCiv = context.ActiveCivs
                                  .Add(new ActiveCiv {
                SpendLimit = 100, OwnedAdvancements = new Collection <OwnedAdvancement> {
                }
            })
                                  .Entity;

            //Add the existing advancements to the active civ and build the list of expected advancements after buying the new ones
            foreach (int existingAdvance in existingAdvances)
            {
                activeCiv.OwnedAdvancements.Add(new OwnedAdvancement {
                    AdvancementId = existingAdvance
                });
            }
            context.SaveChanges();

            //Make the game loop
            GameLoop testLoop = new GameLoop(context, activeCiv.Id);

            //Act
            bool result = testLoop.ResolveBuyAdvances(newAdvances);

            //Assert

            //Assert that the advances were bought (or not) as expected
            Assert.Equal(expectedAffordability, result);

            //Assert correct phase
            Assert.Equal(expectedPhase, testLoop.ActiveCiv.CurrentPhase);
            //Assert expected number of owned advancements
            Assert.Equal(expectedAdvancements.Count, testLoop.ActiveCiv.OwnedAdvancements.Count);

            /* Assert that all of the expected owned advancements are present
             * (and with the previous assertion, only those advancements)
             */
            foreach (int expectedAdvancementId in expectedAdvancements)
            {
                Assert.Equal(
                    expectedAdvancementId,
                    testLoop.ActiveCiv.OwnedAdvancements.Single(a => a.AdvancementId == expectedAdvancementId).AdvancementId
                    );
            }
        }