public async void ConstructionOnAvailableSpotStarted() { var size = "XXL"; var buildingMetaId = "Test_ConstructionOnAvailableSpotStarted"; var buildingSpotMetaId = "Test_ConstructionOnAvailableSpotStarted"; var playerId = "Test_ConstructionOnAvailableSpotStarted"; // Create test builidng meta if it doesn't exist. var buildingMeta = await new BuildingMeta(buildingMetaId).LoadAsync(); if (buildingMeta == null) { buildingMeta = new BuildingMeta(buildingMetaId); buildingMeta.Size = size; await buildingMeta.InsertAsync(); } // Create test builidng spot meta if it doesn't exist. var buildingSpotMeta = await new BuildingSpotMeta(buildingSpotMetaId).LoadAsync(); if (buildingSpotMeta == null) { buildingSpotMeta = new BuildingSpotMeta(buildingSpotMetaId); buildingSpotMeta.Size = size; await buildingSpotMeta.InsertAsync(); } // Create test player and building spot. var buildingSpot = new BuildingSpot(buildingSpotMetaId); var player = await Helpers.CreateTestPlayer(playerId, buildingSpot : buildingSpot); // Auth player. var sessionToken = Helpers.GetSessionToken(playerId); // Mock data. var data = JToken.Parse($@"{{ 'PlayerId':'{playerId}', 'SessionToken':'{sessionToken}', 'BuildingSpotId':'{buildingSpot.Id}', 'BuildingMetaId':'{buildingMetaId}', }}"); // Execute controller. var controller = new StartBuildingConstructionController(); var responseToken = await controller.HandleHttpRequestAsync(data); // Assert controller response status is OK. Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]); // Make sure building construction is started. player = await player.LoadAsync(); Assert.False(player.GetBuildingSpotById(buildingSpot.Id).Building.IsConstructed); }
public async void FinishedConstructionIsConstructed() { var buildingMetaId = "Test_FinishedConstructionIsConstructed"; var buildingConstructionTime = TimeSpan.FromMilliseconds(500); var playerId = "Test_FinishedConstructionIsConstructed"; // Create test builidng meta if it doesn't exist. var buildingMeta = await new BuildingMeta(buildingMetaId).LoadAsync(); if (buildingMeta == null) { buildingMeta = new BuildingMeta(buildingMetaId); buildingMeta.ConstructionTime = buildingConstructionTime; await buildingMeta.InsertAsync(); } // Create test player and building. var building = new Building(buildingMetaId); building.IsConstructed = false; building.ConstructionTask = new TimeTask(buildingMeta.ConstructionTime); var player = await Helpers.CreateTestPlayer(playerId, building : building); // Wait for building to construct. Thread.Sleep(buildingConstructionTime); // Auth player. var sessionToken = Helpers.GetSessionToken(playerId); // Mock data. var data = JToken.Parse($@"{{ 'PlayerId':'{playerId}', 'SessionToken':'{sessionToken}', 'BuildingId':'{building.Id}' }}"); // Execute controller. var controller = new FinishBuildingConstructionController(); var responseToken = await controller.HandleHttpRequestAsync(data); // Assert controller response status is OK. Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]); // Make sure building is constructed. player = await player.LoadAsync(); Assert.True(player.GetBuildingById(building.Id).IsConstructed); }
public async void UnavailableContractNotSelected() { var requiredBuildingMetaId = "Test_UnavailableContractNotSelected_Required"; var buildingMetaId = "Test_UnavailableContractNotSelected"; var contractMetaId = "Test_UnavailableContractNotSelected"; var playerId = "Test_UnavailableContractNotSelected"; // Create required test building meta if it doesn't exist. var requiredBuildingMeta = await new BuildingMeta(requiredBuildingMetaId).LoadAsync(); if (requiredBuildingMeta == null) { requiredBuildingMeta = new BuildingMeta(requiredBuildingMetaId); await requiredBuildingMeta.InsertAsync(); } // Create 'wrong' test building meta if it doesn't exist. var buildingMeta = await new BuildingMeta(buildingMetaId).LoadAsync(); if (buildingMeta == null) { buildingMeta = new BuildingMeta(buildingMetaId); buildingMeta.AvailableContractMetaIds = new List <string> { contractMetaId }; await buildingMeta.InsertAsync(); } // Create test contract meta if it doesn't exist. var contractMeta = await new ContractMeta(contractMetaId).LoadAsync(); if (contractMeta == null) { contractMeta = new ContractMeta(contractMetaId); contractMeta.Requirement = new Requirement() { BuildingMetaIds = new List <string> { requiredBuildingMetaId } }; await contractMeta.InsertAsync(); } // Create test player with 'wrong' building. var building = new Building(buildingMetaId); building.IsConstructed = true; var player = await Helpers.CreateTestPlayer(playerId, building : building); // Auth player. var sessionToken = Helpers.GetSessionToken(playerId); // Mock data. var data = JToken.Parse($@"{{ 'PlayerId':'{playerId}', 'SessionToken':'{sessionToken}', 'BuildingId':'{building.Id}', 'ContractMetaId':'{contractMetaId}' }}"); // Execute controller. var controller = new StartProductionController(); var responseToken = await controller.HandleHttpRequestAsync(data); // Assert controller response status is RequirementNotFulfilled. Assert.Equal(responseToken["Status"], JStatus.RequirementNotFulfilled.JToken["Status"]); // Make sure contract is not selected. player = await player.LoadAsync(); Assert.Null(player.GetBuildingById(building.Id).ProductionTask); }
public async void RewardForNotCompletedContractNotCollected() { var contractMetaId = "Test_RewardForNotCompletedContractNotCollected"; var contractReward = new Reward() { Resources = new List <int> { 0, 0, 111 } }; var contractProductionTime = TimeSpan.FromMinutes(10); var buildingMetaId = "Test_RewardForNotCompletedContractNotCollected"; var playerId = "Test_RewardForNotCompletedContractNotCollected"; // Create test contract meta if it doesn't exist. var contractMeta = await new ContractMeta(contractMetaId).LoadAsync(); if (contractMeta == null) { contractMeta = new ContractMeta(contractMetaId); contractMeta.Rewards.Add(contractReward); contractMeta.ProductionTime = contractProductionTime; await contractMeta.InsertAsync(); } // Create test building meta if it doesn't exist. var buildingMeta = await new BuildingMeta(buildingMetaId).LoadAsync(); if (buildingMeta == null) { buildingMeta = new BuildingMeta(buildingMetaId); buildingMeta.StorageLimit = 1000; await buildingMeta.InsertAsync(); } // Create test player and building. var building = new Building(buildingMetaId); building.IsConstructed = true; building.ProductionTask = new ProductionTask(contractMeta); var player = await Helpers.CreateTestPlayer(playerId, building : building); // Auth player. var sessionToken = Helpers.GetSessionToken(playerId); // Mock data. var data = JToken.Parse($@"{{ 'PlayerId':'{playerId}', 'SessionToken':'{sessionToken}', 'BuildingId':'{building.Id}' }}"); // Execute controller. var controller = new CheckProductionController(); var responseToken = await controller.HandleHttpRequestAsync(data); // Assert controller response status is ContractNotReady. Assert.Equal(responseToken["Status"], JStatus.NotReady.JToken["Status"]); // Make sure reward is not collected. var collectController = new CollectProductionRewardsController(); responseToken = await collectController.HandleHttpRequestAsync(data); player = await player.LoadAsync(); Assert.True(player.Resources.Count == 0); }
public async void CitizenAbilityModifiedProduction() { var testId = "Test_CitizenAbilityModifiedProduction"; var contractReward = new Reward() { Resources = new List <int> { 0, 0, 111 } }; var contractProductionTime = TimeSpan.FromSeconds(10); // Create test contract meta if it doesn't exist. var contractMeta = await new ContractMeta(testId).LoadAsync(); if (contractMeta == null) { contractMeta = new ContractMeta(testId); contractMeta.Rewards.Add(contractReward); contractMeta.ProductionTime = contractProductionTime; await contractMeta.InsertAsync(); } // Create test building meta if it doesn't exist. var buildingMeta = await new BuildingMeta(testId).LoadAsync(); if (buildingMeta == null) { buildingMeta = new BuildingMeta(testId); buildingMeta.StorageLimit = 1000; await buildingMeta.InsertAsync(); } // Create test citizen ability meta if it doesn't exist. var abilityMeta = await new CitizenAbilityMeta(testId).LoadAsync(); if (abilityMeta == null) { abilityMeta = new CitizenAbilityMeta(testId); abilityMeta.ReduceTaskDuration = new List <TimeSpan> { TimeSpan.FromSeconds(9) }; await abilityMeta.InsertAsync(); } // Create test player, building and citizen. var building = new Building(testId); building.IsConstructed = true; building.ProductionTask = new ProductionTask(contractMeta); var player = await Helpers.CreateTestPlayer(testId, building : building); var citizen = new Citizen(); citizen.Abilities.Add(new CitizenAbility(testId)); player.Citizens.Add(citizen); building.AssignedCitizenIds.Add(citizen.Id); await player.ReplaceAsync(); // Wait for contract to complete (contractProductionTime - ReduceTaskDuration + .5f). Thread.Sleep(TimeSpan.FromSeconds(1.5f)); // Auth player. var sessionToken = Helpers.GetSessionToken(testId); // Mock data. var data = JToken.Parse($@"{{ 'PlayerId':'{testId}', 'SessionToken':'{sessionToken}', 'BuildingId':'{building.Id}' }}"); // Execute controller. var controller = new CheckProductionController(); var responseToken = await controller.HandleHttpRequestAsync(data); // Assert controller response status is OK. Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]); // Test reward collection. var collectController = new CollectProductionRewardsController(); var collectResponseToken = await collectController.HandleHttpRequestAsync(data); Assert.Equal(collectResponseToken["Status"], JStatus.Ok.JToken["Status"]); // Make sure reward is added. player = await player.LoadAsync(); Assert.True(player.Resources[2] > 0); }