Пример #1
0
        public void ShouldThrowExceptionAndLogErrorWhenSubModuleFailsInGetMissingResourcesToBuild()
        {
            MemoryLogger          logger;
            ResourceCheckerModule module;
            IBuildingModule       buildingModule;

            IStackModule    stackModule;
            IMaterialModule materialModule;


            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            stackModule    = new MockedStackModule(true);
            materialModule = new MockedMaterialModule(false);
            logger         = new MemoryLogger();
            module         = new ResourceCheckerModule(logger, buildingModule, stackModule, null, materialModule);
            Assert.ThrowsException <PIOInternalErrorException>(() => module.GetMissingResourcesToBuild(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));



            stackModule    = new MockedStackModule(false);
            materialModule = new MockedMaterialModule(true);
            logger         = new MemoryLogger();
            module         = new ResourceCheckerModule(logger, buildingModule, stackModule, null, materialModule);
            Assert.ThrowsException <PIOInternalErrorException>(() => module.GetMissingResourcesToBuild(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
Пример #2
0
        public void ShouldReturnEmptyArrayWhenBuildingHasEnoughResourcesToBuild()
        {
            ResourceCheckerModule module;
            IBuildingModule       buildingModule;

            IStackModule    stackModule;
            IMaterialModule materialModule;

            ResourceTypeIDs[] missingResources;

            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false,
                                                new Stack()
            {
                StackID = 0, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Plank, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 1, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Wood, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 2, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Stone, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 3, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 10
            }
                                                );
            materialModule = new MockedMaterialModule(false,
                                                      new Material()
            {
                MaterialID = 0, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Wood, Quantity = 5
            },
                                                      new Material()
            {
                MaterialID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Stone, Quantity = 10
            },
                                                      new Material()
            {
                MaterialID = 3, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 6
            }
                                                      );
            module = new ResourceCheckerModule(NullLogger.Instance, buildingModule, stackModule, null, materialModule);

            missingResources = module.GetMissingResourcesToBuild(1);
            Assert.IsNotNull(missingResources);
            Assert.AreEqual(0, missingResources.Length);
        }
Пример #3
0
        public void ShouldNotBuildWhenBuildingDoesntExistsAtPos()
        {
            MemoryLogger    logger;
            BuilderModule   module;
            IWorkerModule   workerModule;
            ITaskModule     taskModule;
            IBuildingModule buildingModule;

            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;



            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1, X = 10, Y = 10
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            logger = new MemoryLogger();
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIONotFoundException>(() => module.BeginBuild(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Пример #4
0
        public void ShouldBuild()
        {
            BuilderModule         module;
            IWorkerModule         workerModule;
            ITaskModule           taskModule;
            MockedSchedulerModule schedulerModule;
            IBuildingModule       buildingModule;
            IBuildingTypeModule   buildingTypeModule;
            IStackModule          stackModule;
            IMaterialModule       materialModule;
            Task result;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, BuildingTypeID = BuildingTypeIDs.Sawmill, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module          = new BuilderModule(NullLogger.Instance, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);
            schedulerModule = new MockedSchedulerModule(false, module);

            result = module.BeginBuild(1);

            Assert.IsNotNull(result);
            Assert.AreEqual(TaskTypeIDs.Build, result.TaskTypeID);
            Assert.AreEqual(1, result.WorkerID);
            Assert.AreEqual(1, schedulerModule.Count);
        }
Пример #5
0
        public void ShouldReturnTrueWhenBuildingHasEnoughResourcesToBuild()
        {
            ResourceCheckerModule module;
            IBuildingModule       buildingModule;

            IStackModule    stackModule;
            IMaterialModule materialModule;


            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false,
                                                new Stack()
            {
                StackID = 0, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Plank, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 1, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Wood, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 2, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Stone, Quantity = 10
            },
                                                new Stack()
            {
                StackID = 3, BuildingID = 1, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 10
            }
                                                );
            materialModule = new MockedMaterialModule(false,
                                                      new Material()
            {
                MaterialID = 0, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Wood, Quantity = 5
            },
                                                      new Material()
            {
                MaterialID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Stone, Quantity = 10
            },
                                                      new Material()
            {
                MaterialID = 3, BuildingTypeID = BuildingTypeIDs.Sawmill, ResourceTypeID = ResourceTypeIDs.Coal, Quantity = 6
            }
                                                      );
            module = new ResourceCheckerModule(NullLogger.Instance, buildingModule, stackModule, null, materialModule);

            Assert.IsTrue(module.HasEnoughResourcesToBuild(1));
        }
Пример #6
0
        public void ShouldNotCreateBuildingWhenPositionIsOccupied()
        {
            MemoryLogger        logger;
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1, X = 10, Y = 10
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, X = 10, Y = 10
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            logger      = new MemoryLogger();
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Пример #7
0
        public void ShouldEndBuildTasks()
        {
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;


            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, BuildingTypeID = BuildingTypeIDs.Sawmill, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill, BuildSteps = 5
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(NullLogger.Instance, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            module.EndBuild(1);
            Assert.AreEqual(4, buildingModule.GetBuilding(2).RemainingBuildSteps);
        }
Пример #8
0
        public void ShouldThrowExceptionAndLogErrorWhenBuildingDoesntExistsInBuildingHasEnoughResourcesToBuild()
        {
            MemoryLogger          logger;
            ResourceCheckerModule module;
            IBuildingModule       buildingModule;

            IStackModule    stackModule;
            IMaterialModule materialModule;


            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            stackModule    = new MockedStackModule(false);
            materialModule = new MockedMaterialModule(false);

            logger = new MemoryLogger();
            module = new ResourceCheckerModule(logger, buildingModule, stackModule, null, materialModule);
            Assert.ThrowsException <PIONotFoundException>(() => module.HasEnoughResourcesToBuild(2));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Пример #9
0
        public void ShouldNotEndCreateBuildingTaskWhenSubModuleFails()
        {
            MemoryLogger        logger;
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;



            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule         = new MockedTaskModule(false);
            buildingModule     = new MockedBuildingModule(false);
            buildingTypeModule = new MockedBuildingTypeModule(true, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));



            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule         = new MockedTaskModule(false);
            buildingModule     = new MockedBuildingModule(true);
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }