From d89d53ce9c5f1c53b445caf9175277cd2ff3159c Mon Sep 17 00:00:00 2001 From: Colin DeCarlo Date: Sat, 16 Jun 2018 10:54:35 -0400 Subject: [PATCH] Backfill tests for the Flip helper (feels like a helper anyways) --- tests/SomeClass.php | 25 +++++++++++ tests/SomeFeature.php | 80 +++++++++++++++++++++++++++++++++ tests/SomeOtherFeature.php | 28 ++++++++++++ tests/Unit/FeatureTest.php | 92 +------------------------------------- tests/Unit/FlipTest.php | 40 +++++++++++++++++ 5 files changed, 174 insertions(+), 91 deletions(-) create mode 100644 tests/SomeClass.php create mode 100644 tests/SomeFeature.php create mode 100644 tests/SomeOtherFeature.php create mode 100644 tests/Unit/FlipTest.php diff --git a/tests/SomeClass.php b/tests/SomeClass.php new file mode 100644 index 0000000..410b5e0 --- /dev/null +++ b/tests/SomeClass.php @@ -0,0 +1,25 @@ +flip()->someOtherToggle(); + } +} diff --git a/tests/SomeFeature.php b/tests/SomeFeature.php new file mode 100644 index 0000000..f6b621e --- /dev/null +++ b/tests/SomeFeature.php @@ -0,0 +1,80 @@ + ['on' => 'whenSomeToggleIsOn', 'off' => 'whenSomeToggleIsOff'], 'anotherToggle' => ['on' => 'whenAnotherToggleIsOn', 'off' => 'whenAnotherToggleIsOff',], 'staticToggle' => ['on' => 'whenStaticToggleIsOn', 'off' => 'whenStaticToggleIsOff',], 'bustedToggle' => ['on' => 'whenBustedToggleIsOn', 'off' => 'whenBustedToggleIsOff',]]; + } + + public function enabled(): bool + { + return $this->enabled; + } + + public function turnOn(): self + { + $this->enabled = true; + + return $this; + } + + public function turnOff(): self + { + $this->enabled = false; + + return $this; + } + + public function whenSomeToggleIsOn(): string + { + return $this->invokedMethod = 'whenOn'; + } + + public function whenSomeToggleIsOff(): string + { + return $this->invokedMethod = 'whenOff'; + } + + public function invokedMethod(): string + { + return $this->invokedMethod; + } + + public function whenAnotherToggleIsOn(): string + { + return $this->toString(); + } + + public function whenAnotherToggleIsOff(): TestResult + { + return $this->createResult(); + } + + public function whenStaticToggleIsOn(): void + { + } + + public function whenStaticToggleIsOff(): TestCase + { + return $this->caller; + } + + public function whenBustedToggleIsOn(): void + { + } + + public function whenBustedToggleIsOff(): void + { + $this->nope(); + } +} diff --git a/tests/SomeOtherFeature.php b/tests/SomeOtherFeature.php new file mode 100644 index 0000000..e867282 --- /dev/null +++ b/tests/SomeOtherFeature.php @@ -0,0 +1,28 @@ + ['on' => 'whenSomeOtherToggleIsOn', 'off' => 'whenSomeOtherToggleIsOff']]; + } + + public function enabled(): bool + { + return true; + } + + public function whenSomeOtherToggleIsOn() + { + return 'whenSomeOtherToggleIsOn'; + } + + public function whenSomeOtherToggleIsOff() + { + return 'whenSomeOtherToggleIsOff'; + } +} diff --git a/tests/Unit/FeatureTest.php b/tests/Unit/FeatureTest.php index 9ea111d..cb64f81 100644 --- a/tests/Unit/FeatureTest.php +++ b/tests/Unit/FeatureTest.php @@ -3,8 +3,8 @@ namespace Vehikl\Flip\Tests\Unit; use PHPUnit\Framework\TestResult; -use Vehikl\Flip\Feature; use PHPUnit\Framework\TestCase; +use Vehikl\Flip\Tests\SomeFeature; class FeatureTest extends TestCase { @@ -68,93 +68,3 @@ public function test_it_blows_up_when_a_toggle_method_calls_a_method_that_doesnt SomeFeature::new($this)->bustedToggle(); } } - -class SomeFeature extends Feature -{ - private $enabled = false; - private $invokedMethod; - - public function toggles(): array - { - return [ - 'someToggle' => [ - 'on' => 'whenSomeToggleIsOn', - 'off' => 'whenSomeToggleIsOff' - ], - 'anotherToggle' => [ - 'on' => 'whenAnotherToggleIsOn', - 'off' => 'whenAnotherToggleIsOff', - ], - 'staticToggle' => [ - 'on' => 'whenStaticToggleIsOn', - 'off' => 'whenStaticToggleIsOff', - ], - 'bustedToggle' => [ - 'on' => 'whenBustedToggleIsOn', - 'off' => 'whenBustedToggleIsOff', - ] - ]; - } - - public function enabled(): bool - { - return $this->enabled; - } - - public function turnOn(): self - { - $this->enabled = true; - - return $this; - } - - public function turnOff(): self - { - $this->enabled = false; - - return $this; - } - - public function whenSomeToggleIsOn(): void - { - $this->invokedMethod = 'whenOn'; - } - - public function whenSomeToggleIsOff(): void - { - $this->invokedMethod = 'whenOff'; - } - - public function invokedMethod(): string - { - return $this->invokedMethod; - } - - public function whenAnotherToggleIsOn(): string - { - return $this->toString(); - } - - public function whenAnotherToggleIsOff(): TestResult - { - return $this->createResult(); - } - - public function whenStaticToggleIsOn(): void - { - } - - public function whenStaticToggleIsOff(): TestCase - { - return $this->caller; - } - - public function whenBustedToggleIsOn(): void - { - } - - public function whenBustedToggleIsOff(): void - { - $this->nope(); - } -} diff --git a/tests/Unit/FlipTest.php b/tests/Unit/FlipTest.php new file mode 100644 index 0000000..5475c78 --- /dev/null +++ b/tests/Unit/FlipTest.php @@ -0,0 +1,40 @@ +assertEquals('whenOff', $flip->someToggle()); + } + + public function test_it_calls_methods_on_the_class_if_there_are_no_applicable_features() + { + $flip = new Flip(new SomeClass, [SomeFeature::class]); + + $this->assertEquals('going!', $flip->go()); + } + + public function test_it_can_select_the_correct_toggle_to_run_from_multiple_features() + { + $flip = new Flip(new SomeClass, [SomeFeature::class, SomeOtherFeature::class]); + + $this->assertEquals('whenSomeOtherToggleIsOn', $flip->someOtherToggle()); + } + + public function test_the_flip_trait_makes_calling_features_easier() + { + $someClass = new SomeClass; + + $this->assertEquals('whenSomeOtherToggleIsOn', $someClass->someToggledMethod()); + } +}