From 92a623097aaff2cd57a4d3bff1a0abd56fe86b72 Mon Sep 17 00:00:00 2001 From: Smoren Date: Wed, 8 Mar 2023 16:48:09 +0300 Subject: [PATCH] Tests and README updated. --- README.md | 124 ++++++++++++------------ tests/unit/MassSchematorTest.php | 34 +++---- tests/unit/SchematorTest.php | 158 +++++++++++++++---------------- 3 files changed, 158 insertions(+), 158 deletions(-) diff --git a/README.md b/README.md index 8305844..255a131 100644 --- a/README.md +++ b/README.md @@ -27,34 +27,34 @@ use Smoren\Schemator\Factories\SchematorFactory; $input = [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', - 'friends' => ['Kazakhstan', 'Belarus', 'Armenia'], + 'name' => 'UK', + 'neighbours' => ['Ireland', 'Sweden', 'France'], 'capitals' => [ - 'msk' => 'Moscow', - 'spb' => 'St. Petersburg', + 'lnd' => 'London', + 'edb' => 'Edinburgh', ], ], 'streets' => [ [ 'id' => 1000, - 'name' => 'Tverskaya', + 'name' => 'Woodstock Rd', 'houses' => [1, 5, 9], ], [ 'id' => 1002, - 'name' => 'Leninskiy', + 'name' => 'Banbury Rd', 'houses' => [22, 35, 49], ], [ 'id' => 1003, - 'name' => 'Tarusskaya', + 'name' => 'Beamont St', 'houses' => [11, 12, 15], ], ], - 'msk_path' => 'country.capitals.msk', + 'lnd_path' => 'country.capitals.lnd', ]; $schema = [ @@ -63,10 +63,10 @@ $schema = [ 'city_street_names' => 'streets.name', 'country_id' => 'country.id', 'country_name' => 'country.name', - 'country_friends' => 'country.friends', - 'country_friend' => 'country.friends', - 'country_first_capital' => 'country.capitals.msk', - 'country_second_capital' => 'country.capitals.spb', + 'country_neighbours' => 'country.neighbours', + 'country_neighbour' => 'country.neighbours', + 'country_first_capital' => 'country.capitals.lnd', + 'country_second_capital' => 'country.capitals.edb', 'country_data.country_id' => 'country.id', 'country_data.country_name' => 'country.name', ]; @@ -78,36 +78,36 @@ print_r($output); /* Array ( [city_id] => 100 - [city_name] => Novgorod + [city_name] => Oxford [city_street_names] => Array ( - [0] => Tverskaya - [1] => Leninskiy - [2] => Tarusskaya + [0] => Woodstock Rd + [1] => Banbury Rd + [2] => Beamont St ) [country_id] => 10 - [country_name] => Russia - [country_friends] => Array + [country_name] => UK + [country_neighbours] => Array ( - [0] => Kazakhstan - [1] => Belarus - [2] => Armenia + [0] => Ireland + [1] => Sweden + [2] => France ) - [country_friend] => Array + [country_neighbour] => Array ( - [0] => Kazakhstan - [1] => Belarus - [2] => Armenia + [0] => Ireland + [1] => Sweden + [2] => France ) - [country_first_capital] => Moscow - [country_second_capital] => St. Petersburg + [country_first_capital] => London + [country_second_capital] => Edinburgh [country_data] => Array ( [country_id] => 10 - [country_name] => Russia + [country_name] => UK ) ) @@ -151,43 +151,43 @@ use Smoren\Schemator\Filters\BaseFiltersStorage; $input = [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', - 'friends' => ['Kazakhstan', 'Belarus', 'Armenia'], + 'name' => 'UK', + 'neighbours' => ['Ireland', 'Sweden', 'France'], 'capitals' => [ - 'msk' => 'Moscow', - 'spb' => 'St. Petersburg', + 'lnd' => 'London', + 'edb' => 'Edinburgh', ], ], 'streets' => [ [ 'id' => 1000, - 'name' => 'Tverskaya', + 'name' => 'Woodstock Rd', 'houses' => [1, 5, 9], ], [ 'id' => 1002, - 'name' => 'Leninskiy', + 'name' => 'Banbury Rd', 'houses' => [22, 35, 49], ], [ 'id' => 1003, - 'name' => 'Tarusskaya', + 'name' => 'Beamont St', 'houses' => [11, 12, 15], ], ], - 'msk_path' => 'country.capitals.msk', + 'lnd_path' => 'country.capitals.lnd', ]; $schema = [ 'city_street_names.all' => ['streets.name', ['implode', ', ']], 'city_street_names.sorted' => ['streets.name', ['sort'], ['implode', ', ']], 'city_street_names.filtered' => ['streets.name', ['filter', function (string $candidate) { - return strpos($candidate, 'Len') !== false; + return strpos($candidate, 'Ban') !== false; }]], - 'msk' => ['msk_path', ['path']], + 'lnd' => ['lnd_path', ['path']], 'city_street_houses' => ['streets.houses', ['flatten']], ]; @@ -200,16 +200,16 @@ Array ( [city_street_names] => Array ( - [all] => Tverskaya, Leninskiy, Tarusskaya - [sorted] => Leninskiy, Tarusskaya, Tverskaya + [all] => Woodstock Rd, Banbury Rd, Beamont St + [sorted] => Banbury Rd, Beamont St, Woodstock Rd [filtered] => Array ( - [0] => Leninskiy + [0] => Banbury Rd ) ) - [msk] => Moscow + [lnd] => London [city_street_houses] => Array ( [0] => 1 @@ -342,7 +342,7 @@ $schemator = SchematorFactory::createBuilder() ->get(); $input = [ - 'streets' => ['Tverskaya', 'Leninskiy', 'Tarusskaya'], + 'streets' => ['Woodstock Rd', 'Banbury Rd', 'Beamont St'], ]; $schema = [ @@ -355,7 +355,7 @@ print_r($output); /* Array ( - [street_names] => Tverskaya, Tarusskaya + [street_names] => Woodstock Rd, Beamont St ) */ ``` @@ -370,37 +370,37 @@ $massSchemator = SchematorFactory::createMass(); $cities = [ [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'London', 'country' => [ 'id' => 10, - 'name' => 'Russia', + 'name' => 'UK', ], 'streets' => [ [ 'id' => 1001, - 'name' => 'Glavnaya', + 'name' => 'The Mall', ], [ 'id' => 1002, - 'name' => 'Lenina', + 'name' => 'Carnaby Street', ], ], ], [ 'id' => 101, - 'name' => 'Moscow', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', + 'name' => 'UK', ], 'streets' => [ [ 'id' => 1003, - 'name' => 'Tverskaya', + 'name' => 'Turl Street', ], [ 'id' => 1004, - 'name' => 'Tarusskaya', + 'name' => 'Holywell Street', ], ], ], @@ -428,28 +428,28 @@ Array [0] => Array ( [city_id] => 100 - [city_name] => Novgorod + [city_name] => London [city_street_names] => Array ( - [0] => Glavnaya - [1] => Lenina + [0] => The Mall + [1] => Carnaby Street ) [country_id] => 10 - [country_name] => Russia + [country_name] => UK ) [1] => Array ( [city_id] => 101 - [city_name] => Moscow + [city_name] => Oxford [city_street_names] => Array ( - [0] => Tverskaya - [1] => Tarusskaya + [0] => Turl Street + [1] => Holywell Street ) [country_id] => 10 - [country_name] => Russia + [country_name] => UK ) ) */ diff --git a/tests/unit/MassSchematorTest.php b/tests/unit/MassSchematorTest.php index 0cda2c8..9855d9b 100644 --- a/tests/unit/MassSchematorTest.php +++ b/tests/unit/MassSchematorTest.php @@ -31,17 +31,17 @@ public function testSimple() $expectedResult = [ [ 'city_id' => 100, - 'city_name' => 'Novgorod', - 'city_street_names' => ['Glavnaya', 'Lenina'], + 'city_name' => 'London', + 'city_street_names' => ['The Mall', 'Carnaby Street'], 'country_id' => 10, - 'country_name' => 'Russia', + 'country_name' => 'UK', ], [ 'city_id' => 101, - 'city_name' => 'Moscow', - 'city_street_names' => ['Tverskaya', 'Tarusskaya'], + 'city_name' => 'Oxford', + 'city_street_names' => ['Turl Street', 'Holywell Street'], 'country_id' => 10, - 'country_name' => 'Russia', + 'country_name' => 'UK', ], ]; @@ -86,14 +86,14 @@ public function testNested() 'my_city_id' => 100, 'my_country' => [ 'my_id' => 10, - 'my_name' => 'Russia', + 'my_name' => 'UK', ], ], [ 'my_city_id' => 101, 'my_country' => [ 'my_id' => 10, - 'my_name' => 'Russia', + 'my_name' => 'UK', ], ], ]; @@ -110,7 +110,7 @@ public function testExtra() '' => 'name', ]); - $this->assertEquals(['Novgorod', 'Moscow'], $result); + $this->assertEquals(['London', 'Oxford'], $result); } /** @@ -121,37 +121,37 @@ protected function getCities(): array return [ [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'London', 'country' => [ 'id' => 10, - 'name' => 'Russia', + 'name' => 'UK', ], 'streets' => [ [ 'id' => 1001, - 'name' => 'Glavnaya', + 'name' => 'The Mall', ], [ 'id' => 1002, - 'name' => 'Lenina', + 'name' => 'Carnaby Street', ], ], ], [ 'id' => 101, - 'name' => 'Moscow', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', + 'name' => 'UK', ], 'streets' => [ [ 'id' => 1003, - 'name' => 'Tverskaya', + 'name' => 'Turl Street', ], [ 'id' => 1004, - 'name' => 'Tarusskaya', + 'name' => 'Holywell Street', ], ], ], diff --git a/tests/unit/SchematorTest.php b/tests/unit/SchematorTest.php index 629b399..5d14e28 100644 --- a/tests/unit/SchematorTest.php +++ b/tests/unit/SchematorTest.php @@ -23,36 +23,36 @@ public function testDefaultDelimiter(): void $input = [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', - 'friends' => ['Kazakhstan', 'Belarus', 'Armenia'], + 'name' => 'UK', + 'neighbours' => ['Ireland', 'Sweden', 'France'], 'capitals' => [ - 'msk' => 'Moscow', - 'spb' => 'St. Petersburg', + 'lnd' => 'London', + 'edb' => 'Edinburgh', ], ], 'streets' => [ [ 'id' => 1000, - 'name' => 'Tverskaya', + 'name' => 'Woodstock Rd', 'houses' => [1, 5, 9], ], [ 'id' => 1002, - 'name' => 'Leninskiy', + 'name' => 'Banbury Rd', 'houses' => [22, 35, 49], 'unknown' => null, ], [ 'id' => 1003, - 'name' => 'Tarusskaya', + 'name' => 'Beamont St', 'houses' => [11, 12, 15], 'unknown' => 'some value', ], ], - 'msk_path' => 'country.capitals.msk', + 'lnd_path' => 'country.capitals.lnd', ]; $data = $schemator->convert($input, [ @@ -62,10 +62,10 @@ public function testDefaultDelimiter(): void 'city_street_houses' => 'streets.houses', 'country_id' => 'country.id', 'country_name' => 'country.name', - 'country_friends' => 'country.friends', - 'country_friend' => 'country.friends', - 'country_first_capital' => 'country.capitals.msk', - 'country_second_capital' => 'country.capitals.spb', + 'country_neighbours' => 'country.neighbours', + 'country_neighbour' => 'country.neighbours', + 'country_first_capital' => 'country.capitals.lnd', + 'country_second_capital' => 'country.capitals.edb', 'unknown' => 'unknown', 'unknown_another' => 'country.unknown', 'unknown_array' => 'streets.unknown', @@ -75,21 +75,21 @@ public function testDefaultDelimiter(): void ]); $this->assertSame(100, $data['city_id']); - $this->assertSame('Novgorod', $data['city_name']); - $this->assertEquals(['Tverskaya', 'Leninskiy', 'Tarusskaya'], $data['city_street_names']); + $this->assertSame('Oxford', $data['city_name']); + $this->assertEquals(['Woodstock Rd', 'Banbury Rd', 'Beamont St'], $data['city_street_names']); $this->assertEquals([[1, 5, 9], [22, 35, 49], [11, 12, 15]], $data['city_street_houses']); $this->assertSame(10, $data['country_id']); - $this->assertSame('Russia', $data['country_name']); - $this->assertEquals(['Kazakhstan', 'Belarus', 'Armenia'], $data['country_friends']); - $this->assertSame('Moscow', $data['country_first_capital']); - $this->assertSame('St. Petersburg', $data['country_second_capital']); + $this->assertSame('UK', $data['country_name']); + $this->assertEquals(['Ireland', 'Sweden', 'France'], $data['country_neighbours']); + $this->assertSame('London', $data['country_first_capital']); + $this->assertSame('Edinburgh', $data['country_second_capital']); $this->assertNull($data['unknown']); $this->assertNull($data['unknown_another']); $this->assertEquals([null, 'some value'], $data['unknown_array']); $this->assertEquals($input, $data['raw']); $this->assertEquals([ 'country_id' => 10, - 'country_name' => 'Russia', + 'country_name' => 'UK', ], $data['country_data']); try { @@ -134,22 +134,22 @@ function (FilterContextInterface $context) { $data = $schemator->convert($input, [ 'city_street_names' => ['streets.name', ['implode', ', ']] ]); - $this->assertSame('Tverskaya, Leninskiy, Tarusskaya', $data['city_street_names']); + $this->assertSame('Woodstock Rd, Banbury Rd, Beamont St', $data['city_street_names']); $data = $schemator->convert($input, [ 'city_street_names' => ['streets.name', ['implode', ', '], ['explode', ', ']] ]); - $this->assertEquals(['Tverskaya', 'Leninskiy', 'Tarusskaya'], $data['city_street_names']); + $this->assertEquals(['Woodstock Rd', 'Banbury Rd', 'Beamont St'], $data['city_street_names']); $data = $schemator->convert($input, [ - 'city_street_names' => ['streets.name', ['startsWith', 'T'], ['implode', ', ']] + 'city_street_names' => ['streets.name', ['startsWith', 'B'], ['implode', ', ']] ]); - $this->assertSame('Tverskaya, Tarusskaya', $data['city_street_names']); + $this->assertSame('Banbury Rd, Beamont St', $data['city_street_names']); $data = $schemator->convert($input, [ - 'msk' => ['msk_path', ['path']] + 'lnd' => ['lnd_path', ['path']] ]); - $this->assertSame('Moscow', $data['msk']); + $this->assertSame('London', $data['lnd']); } /** @@ -161,34 +161,34 @@ public function testSpecificDelimiter(): void $input = [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', - 'friends' => ['Kazakhstan', 'Belarus', 'Armenia'], + 'name' => 'UK', + 'neighbours' => ['Ireland', 'Sweden', 'France'], 'capitals' => [ - 'msk' => 'Moscow', - 'spb' => 'St. Petersburg', + 'lnd' => 'London', + 'edb' => 'Edinburgh', ], ], 'streets' => [ [ 'id' => 1000, - 'name' => 'Tverskaya', + 'name' => 'Woodstock Rd', 'houses' => [1, 5, 9], ], [ 'id' => 1002, - 'name' => 'Leninskiy', + 'name' => 'Banbury Rd', 'houses' => [22, 35, 49], ], [ 'id' => 1003, - 'name' => 'Tarusskaya', + 'name' => 'Beamont St', 'houses' => [11, 12, 15], ], ], - 'msk_path' => 'country/capitals/msk', + 'lnd_path' => 'country/capitals/lnd', ]; $data = $schemator->convert($input, [ @@ -198,10 +198,10 @@ public function testSpecificDelimiter(): void 'city_street_houses' => 'streets/houses', 'country_id' => 'country/id', 'country_name' => 'country/name', - 'country_friends' => 'country/friends', - 'country_friend' => 'country/friends', - 'country_first_capital' => 'country/capitals/msk', - 'country_second_capital' => 'country/capitals/spb', + 'country_neighbours' => 'country/neighbours', + 'country_neighbour' => 'country/neighbours', + 'country_first_capital' => 'country/capitals/lnd', + 'country_second_capital' => 'country/capitals/edb', 'unknown' => 'unknown', 'unknown_another' => 'country/unknown', 'unknown_array' => 'streets/unknown', @@ -211,21 +211,21 @@ public function testSpecificDelimiter(): void ]); $this->assertSame(100, $data['city_id']); - $this->assertSame('Novgorod', $data['city_name']); - $this->assertEquals(['Tverskaya', 'Leninskiy', 'Tarusskaya'], $data['city_street_names']); + $this->assertSame('Oxford', $data['city_name']); + $this->assertEquals(['Woodstock Rd', 'Banbury Rd', 'Beamont St'], $data['city_street_names']); $this->assertEquals([[1, 5, 9], [22, 35, 49], [11, 12, 15]], $data['city_street_houses']); $this->assertSame(10, $data['country_id']); - $this->assertSame('Russia', $data['country_name']); - $this->assertEquals(['Kazakhstan', 'Belarus', 'Armenia'], $data['country_friends']); - $this->assertSame('Moscow', $data['country_first_capital']); - $this->assertSame('St. Petersburg', $data['country_second_capital']); + $this->assertSame('UK', $data['country_name']); + $this->assertEquals(['Ireland', 'Sweden', 'France'], $data['country_neighbours']); + $this->assertSame('London', $data['country_first_capital']); + $this->assertSame('Edinburgh', $data['country_second_capital']); $this->assertNull($data['unknown']); $this->assertNull($data['unknown_another']); $this->assertEquals([], $data['unknown_array']); $this->assertEquals($input, $data['raw']); $this->assertEquals([ 'country_id' => 10, - 'country_name' => 'Russia', + 'country_name' => 'UK', ], $data['country_data']); try { @@ -270,22 +270,22 @@ function (FilterContextInterface $context) { $data = $schemator->convert($input, [ 'city_street_names' => ['streets/name', ['implode', ', ']] ]); - $this->assertSame('Tverskaya, Leninskiy, Tarusskaya', $data['city_street_names']); + $this->assertSame('Woodstock Rd, Banbury Rd, Beamont St', $data['city_street_names']); $data = $schemator->convert($input, [ 'city_street_names' => ['streets/name', ['implode', ', '], ['explode', ', ']] ]); - $this->assertEquals(['Tverskaya', 'Leninskiy', 'Tarusskaya'], $data['city_street_names']); + $this->assertEquals(['Woodstock Rd', 'Banbury Rd', 'Beamont St'], $data['city_street_names']); $data = $schemator->convert($input, [ - 'city_street_names' => ['streets/name', ['startsWith', 'T'], ['implode', ', ']] + 'city_street_names' => ['streets/name', ['startsWith', 'B'], ['implode', ', ']] ]); - $this->assertSame('Tverskaya, Tarusskaya', $data['city_street_names']); + $this->assertSame('Banbury Rd, Beamont St', $data['city_street_names']); $data = $schemator->convert($input, [ - 'msk' => ['msk_path', ['path']] + 'lnd' => ['lnd_path', ['path']] ]); - $this->assertSame('Moscow', $data['msk']); + $this->assertSame('London', $data['lnd']); } /** @@ -307,54 +307,54 @@ public function testBuilder(): void $input = [ 'id' => 100, - 'name' => 'Novgorod', + 'name' => 'Oxford', 'country' => [ 'id' => 10, - 'name' => 'Russia', - 'friends' => ['Kazakhstan', 'Belarus', 'Armenia'], + 'name' => 'UK', + 'neighbours' => ['Ireland', 'Sweden', 'France'], 'capitals' => [ - 'msk' => 'Moscow', - 'spb' => 'St. Petersburg', + 'lnd' => 'London', + 'edb' => 'Edinburgh', ], ], 'streets' => [ [ 'id' => 1000, - 'name' => 'Tverskaya', + 'name' => 'Woodstock Rd', 'houses' => [1, 5, 9], ], [ 'id' => 1002, - 'name' => 'Leninskiy', + 'name' => 'Banbury Rd', 'houses' => [22, 35, 49], ], [ 'id' => 1003, - 'name' => 'Tarusskaya', + 'name' => 'Beamont St', 'houses' => [11, 12, 15], ], ], - 'msk_path' => 'country.capitals.msk', + 'lnd_path' => 'country.capitals.lnd', ]; $data = $schemator->convert($input, [ 'city_street_names.first' => ['streets.name', ['implode', ', ']], 'city_street_names.second' => ['streets.name', ['implode', ', '], ['explode', ', ']], - 'city_street_names.third' => ['streets.name', ['startsWith', 'T'], ['implode', ', ']], + 'city_street_names.third' => ['streets.name', ['startsWith', 'B'], ['implode', ', ']], 'city_street_names.sorted' => ['streets.name', ['sort'], ['implode', ', ']], 'city_street_names.filtered' => ['streets.name', ['filter', function (string $candidate) { - return strpos($candidate, 'Len') !== false; + return strpos($candidate, 'Ban') !== false; }]], - 'msk' => ['msk_path', ['path']], + 'lnd' => ['lnd_path', ['path']], 'city_street_houses' => ['streets.houses', ['flatten']], 'const' => [['const', 'my const']], ]); - $this->assertSame('Tverskaya, Leninskiy, Tarusskaya', $data['city_street_names']['first']); - $this->assertEquals(['Tverskaya', 'Leninskiy', 'Tarusskaya'], $data['city_street_names']['second']); - $this->assertSame('Tverskaya, Tarusskaya', $data['city_street_names']['third']); - $this->assertSame('Leninskiy, Tarusskaya, Tverskaya', $data['city_street_names']['sorted']); - $this->assertEquals(['Leninskiy'], $data['city_street_names']['filtered']); - $this->assertSame('Moscow', $data['msk']); + $this->assertSame('Woodstock Rd, Banbury Rd, Beamont St', $data['city_street_names']['first']); + $this->assertEquals(['Woodstock Rd', 'Banbury Rd', 'Beamont St'], $data['city_street_names']['second']); + $this->assertSame('Banbury Rd, Beamont St', $data['city_street_names']['third']); + $this->assertSame('Banbury Rd, Beamont St, Woodstock Rd', $data['city_street_names']['sorted']); + $this->assertEquals(['Banbury Rd'], $data['city_street_names']['filtered']); + $this->assertSame('London', $data['lnd']); $this->assertEquals([1, 5, 9, 22, 35, 49, 11, 12, 15], $data['city_street_houses']); $this->assertSame('my const', $data['const']); } @@ -637,17 +637,17 @@ public function testNestedArrays() 'id' => 1, 'countries' => [ [ - 'name' => 'Russia', + 'name' => 'UK', 'cities' => [ [ - 'name' => 'Moscow', + 'name' => 'London', 'streets' => [ - ['name' => 'Tverskaya'], - ['name' => 'Leninskiy'], + ['name' => 'Woodstock Rd'], + ['name' => 'Banbury Rd'], ] ], [ - 'name' => 'Novgorod', + 'name' => 'Oxford', 'streets' => [ ['name' => 'Lenina'], ['name' => 'Komsomola'], @@ -656,7 +656,7 @@ public function testNestedArrays() ] ], [ - 'name' => 'Belarus', + 'name' => 'Sweden', 'cities' => [ [ 'name' => 'Minsk', @@ -680,10 +680,10 @@ public function testNestedArrays() $result = $schemator->convert($data, $schema); - $this->assertEquals(['Russia', 'Belarus'], $result['country_names']); - $this->assertEquals(['Moscow', 'Novgorod', 'Minsk'], $result['city_names']); + $this->assertEquals(['UK', 'Sweden'], $result['country_names']); + $this->assertEquals(['London', 'Oxford', 'Minsk'], $result['city_names']); $this->assertEquals([ - 'Tverskaya', 'Leninskiy', 'Lenina', 'Komsomola', 'Moskovskaya', 'Russkaya', + 'Woodstock Rd', 'Banbury Rd', 'Lenina', 'Komsomola', 'Moskovskaya', 'Russkaya', ], $result['street_names']); }