diff --git a/app/Services/PlanetService.php b/app/Services/PlanetService.php index be6f38c..641e4b2 100644 --- a/app/Services/PlanetService.php +++ b/app/Services/PlanetService.php @@ -353,7 +353,17 @@ public function getPlanetImageType(): string */ public function getPlanetFieldMax(): int { - return $this->planet->field_max; + $extra_fields = 0; + if ($this->planet->terraformer != 0) { + // For every level, it increases by 5 + $extra_fields += $this->planet->terraformer * 5; + + // For every 2 levels, it adds another bonus field + $two_level_bonus_count = (int)(floor($this->planet->terraformer / 2)); + $extra_fields += $two_level_bonus_count; + + } + return $extra_fields + $this->planet->field_max; } /** diff --git a/tests/Unit/PlanetServiceTest.php b/tests/Unit/PlanetServiceTest.php index c8a1210..1e2dcc4 100644 --- a/tests/Unit/PlanetServiceTest.php +++ b/tests/Unit/PlanetServiceTest.php @@ -115,13 +115,53 @@ public function testGetPlanetFieldMax(): void ]); $this->assertEquals(90, $this->planetService->getPlanetFieldMax()); - $this->createAndSetPlanetModel([ 'field_max' => 14, ]); $this->assertEquals(14, $this->planetService->getPlanetFieldMax()); } + /** + * Test that the field max function with terraformer returns expected values + */ + public function testGetPlanetFieldMaxWithTerraformer(): void + { + // Test none divisible by 2-- should only add 5. + $this->createAndSetPlanetModel([ + 'field_max' => 90, + 'terraformer' => 1, + ]); + + $this->assertEquals(95, $this->planetService->getPlanetFieldMax()); + + // Test a divisible of 2, should add 5, and +1 bonus. + $this->createAndSetPlanetModel([ + 'field_max' => 150, + 'terraformer' => 2, + ]); + + $this->assertEquals(161, $this->planetService->getPlanetFieldMax()); + + // Larger divisible + $this->createAndSetPlanetModel([ + 'field_max' => 100, + 'terraformer' => 20, + ]); + + // each level + 5 max fields - 100 base, plus 20*5 = 200 + // every 2 levels + 1 max field- 20/2 = 10, so 200 + 10 = 210 + $this->assertEquals(210, $this->planetService->getPlanetFieldMax()); + + + // Ensure if it's not built it doesn't alter the max fields. + $this->createAndSetPlanetModel([ + 'field_max' => 100, + 'terraformer' => 0, + ]); + + $this->assertEquals(100, $this->planetService->getPlanetFieldMax()); + } + /** * Tests building count returns valid buildings, and specified levels. */