From 7712dc925b1e9bc6615b9c47434245aad2e77931 Mon Sep 17 00:00:00 2001 From: Alexander Wanyoike Date: Wed, 14 Apr 2021 14:12:49 +0100 Subject: [PATCH 1/2] Implement filtration and first --- src/SegmentSet.php | 13 +++++++++++++ tests/unit/SegmentSetTest.php | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/SegmentSet.php b/src/SegmentSet.php index f313d71..5a31f27 100644 --- a/src/SegmentSet.php +++ b/src/SegmentSet.php @@ -85,6 +85,19 @@ public function getIterator() } } + public function filter(callable $predicate): SegmentSet + { + return self::of(array_filter($this->segments, $predicate)); + } + + public function first(): ?Segment + { + if ($this->size() === 0) { + return null; + } + return reset($this->segments); + } + public function toJson(?string $action): array { $itemData = []; diff --git a/tests/unit/SegmentSetTest.php b/tests/unit/SegmentSetTest.php index 73aa63f..314cd1e 100644 --- a/tests/unit/SegmentSetTest.php +++ b/tests/unit/SegmentSetTest.php @@ -3,6 +3,7 @@ namespace SnowIO\DataLakeDataModel\Test; use PHPUnit\Framework\TestCase; +use SnowIO\DataLakeDataModel\Segment; use SnowIO\DataLakeDataModel\SegmentSet; use SnowIO\DataLakeDataModel\Test\ACME\DataLake\Segments\Price; use SnowIO\DataLakeDataModel\Test\ACME\DataLake\Segments\Stock; @@ -68,4 +69,28 @@ public function testEquals() self::assertFalse($otherSegments->equals($segments)); } + public function testFiltration() + { + $segments = SegmentSet::of([ + Price::fromJson(SegmentTest::getPriceJson()), + Stock::fromJson(SegmentTest::getStockJson()) + ]); + + $filteredSegments = $segments->filter(function (Segment $segment) { + return $segment->getSegmentId() === Price::NAME; + }); + + self::assertEquals(1, $filteredSegments->size()); + } + + public function testFirst() + { + $segments = SegmentSet::of([ + $price = Price::fromJson(SegmentTest::getPriceJson()), + Stock::fromJson(SegmentTest::getStockJson()) + ]); + + $actual = $segments->first(); + self::assertTrue($actual->equals($price)); + } } \ No newline at end of file From ca00fcb68533765c92b91df8e975e13a4caf5a2c Mon Sep 17 00:00:00 2001 From: Alexander Wanyoike Date: Thu, 15 Apr 2021 13:13:18 +0100 Subject: [PATCH 2/2] Return null for empty segment sets --- tests/unit/SegmentSetTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/unit/SegmentSetTest.php b/tests/unit/SegmentSetTest.php index 314cd1e..cad4fba 100644 --- a/tests/unit/SegmentSetTest.php +++ b/tests/unit/SegmentSetTest.php @@ -93,4 +93,12 @@ public function testFirst() $actual = $segments->first(); self::assertTrue($actual->equals($price)); } + + public function testFirstWithEmptySegmentSet() + { + $segments = SegmentSet::of([]); + + $actual = $segments->first(); + self::assertNull($actual); + } } \ No newline at end of file