From ee0db30118f661fb166bcffbf5d82032df484697 Mon Sep 17 00:00:00 2001 From: Samuel Vicent Date: Mon, 11 Oct 2021 11:18:27 +0200 Subject: [PATCH] MultipleErrors->reason always returns [0] and should return first item from associative array (#305) * Patch MultipleErrors->reason method by getting always the first item - Added Tests and a custom Exception * Return EmptyReason instead of throwing exception when MultipleErrors has no reasons (validations accomplished) Co-authored-by: Samuel Vicent --- src/Result/MultipleErrors.php | 6 ++-- src/Result/Reason/EmptyReason.php | 16 ++++++++++ .../Reason/MultipleErrorsTest.php | 30 ++++++++++++++++++- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 src/Result/Reason/EmptyReason.php diff --git a/src/Result/MultipleErrors.php b/src/Result/MultipleErrors.php index 24bf5ff..5fa85af 100644 --- a/src/Result/MultipleErrors.php +++ b/src/Result/MultipleErrors.php @@ -2,7 +2,7 @@ namespace Egulias\EmailValidator\Result; -use Egulias\EmailValidator\Result\InvalidEmail; +use Egulias\EmailValidator\Result\Reason\EmptyReason; use Egulias\EmailValidator\Result\Reason\Reason; /** @@ -34,7 +34,9 @@ class MultipleErrors extends InvalidEmail public function reason() : Reason { - return $this->reasons[0]; + return 0 !== count($this->reasons) + ? current($this->reasons) + : new EmptyReason(); } public function description() : string diff --git a/src/Result/Reason/EmptyReason.php b/src/Result/Reason/EmptyReason.php new file mode 100644 index 0000000..3016e6f --- /dev/null +++ b/src/Result/Reason/EmptyReason.php @@ -0,0 +1,16 @@ +assertEquals($expectedReason, $multiError->description()); $this->assertEquals($error1, $multiError->reason()); } + + public function testRetrieveFirstReasonWithReasonCodeEqualsZero(): void + { + $error1 = new DummyReason(); + + $multiError = new MultipleErrors(); + $multiError->addReason($error1); + + $this->assertEquals($error1, $multiError->reason()); + } + + public function testRetrieveFirstReasonWithReasonCodeDistinctToZero(): void + { + $error1 = new AnotherDummyReason(); + + $multiError = new MultipleErrors(); + $multiError->addReason($error1); + + $this->assertEquals($error1, $multiError->reason()); + } + + public function testRetrieveFirstReasonWithNoReasonAdded() + { + $emptyReason = new EmptyReason(); + $multiError = new MultipleErrors(); + $this->assertEquals($emptyReason, $multiError->reason()); + } }