Skip to content

Commit 4b60e85

Browse files
committed
feat: Infrastructure layer changes to enable registration of multi-country World Heritage sites
1 parent 26f929b commit 4b60e85

3 files changed

Lines changed: 309 additions & 66 deletions

File tree

src/app/Packages/Domains/Test/Repository/WorldHeritageRepository_insertTest.php

Lines changed: 206 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Support\Facades\DB;
88
use Tests\TestCase;
99
use App\Models\WorldHeritage;
10+
use Database\Seeders\CountrySeeder;
1011

1112
class WorldHeritageRepository_insertTest extends TestCase
1213
{
@@ -15,7 +16,8 @@ protected function setUp(): void
1516
{
1617
parent::setUp();
1718
$this->refresh();
18-
19+
$seeder = new CountrySeeder();
20+
$seeder->run();
1921
$this->repository = app(WorldHeritageRepository::class);
2022
}
2123

@@ -34,7 +36,7 @@ private function refresh(): void
3436
}
3537
}
3638

37-
private static function arrayData(): array
39+
private static function arraySingleData(): array
3840
{
3941
return [
4042
'unesco_id' => '668',
@@ -43,9 +45,9 @@ private static function arrayData(): array
4345
'name_jp' => '古都奈良の文化財',
4446
'country' => 'Japan',
4547
'region' => 'Asia',
46-
'state_party' => 'JP',
4748
'category' => 'cultural',
4849
'criteria' => ['ii', 'iii', 'v'],
50+
'state_party' => null,
4951
'year_inscribed' => 1998,
5052
'area_hectares' => 442.0,
5153
'buffer_zone_hectares' => 320.0,
@@ -55,81 +57,224 @@ private static function arrayData(): array
5557
'short_description' => 'Temples and shrines of the first permanent capital of Japan.',
5658
'image_url' => '',
5759
'unesco_site_url' => 'https://whc.unesco.org/en/list/668/',
60+
'state_parties' => ['JP'],
61+
'state_parties_meta' => [
62+
'JP' => [
63+
'is_primary' => true,
64+
'inscription_year' => 1998,
65+
],
66+
],
5867
];
5968
}
6069

61-
public function test_insert_check_type(): void
70+
private static function arrayMultiData(): array
71+
{
72+
return [
73+
'unesco_id' => 1133,
74+
'official_name' => "Ancient and Primeval Beech Forests of the Carpathians and Other Regions of Europe",
75+
'name' => "Ancient and Primeval Beech Forests",
76+
'name_jp' => null,
77+
'country' => 'Slovakia',
78+
'region' => 'Europe',
79+
'category' => 'natural',
80+
'criteria' => ['ix'],
81+
'state_party' => null,
82+
'year_inscribed' => 2007,
83+
'area_hectares' => 99947.81,
84+
'buffer_zone_hectares' => 296275.8,
85+
'is_endangered' => false,
86+
'latitude' => 0.0,
87+
'longitude' => 0.0,
88+
'short_description' => 'Transnational serial property of European beech forests illustrating post-glacial expansion and ecological processes across Europe.',
89+
'image_url' => '',
90+
'unesco_site_url' => 'https://whc.unesco.org/en/list/1133/',
91+
'state_parties' => [
92+
'AL','AT','BE','BA','BG','HR','CZ','FR','DE','IT','MK','PL','RO','SK','SI','ES','CH','UA'
93+
],
94+
'state_parties_meta' => [
95+
'AL' => ['is_primary' => false, 'inscription_year' => 2007],
96+
'AT' => ['is_primary' => false, 'inscription_year' => 2007],
97+
'BE' => ['is_primary' => false, 'inscription_year' => 2007],
98+
'BA' => ['is_primary' => false, 'inscription_year' => 2007],
99+
'BG' => ['is_primary' => false, 'inscription_year' => 2007],
100+
'HR' => ['is_primary' => false, 'inscription_year' => 2007],
101+
'CZ' => ['is_primary' => false, 'inscription_year' => 2007],
102+
'FR' => ['is_primary' => false, 'inscription_year' => 2007],
103+
'DE' => ['is_primary' => false, 'inscription_year' => 2007],
104+
'IT' => ['is_primary' => false, 'inscription_year' => 2007],
105+
'MK' => ['is_primary' => false, 'inscription_year' => 2007],
106+
'PL' => ['is_primary' => false, 'inscription_year' => 2007],
107+
'RO' => ['is_primary' => false, 'inscription_year' => 2007],
108+
'SK' => ['is_primary' => true, 'inscription_year' => 2007],
109+
'SI' => ['is_primary' => false, 'inscription_year' => 2007],
110+
'ES' => ['is_primary' => false, 'inscription_year' => 2007],
111+
'CH' => ['is_primary' => false, 'inscription_year' => 2007],
112+
'UA' => ['is_primary' => false, 'inscription_year' => 2007],
113+
],
114+
];
115+
}
116+
117+
public function test_insert_check_single_type(): void
118+
{
119+
$entity = new WorldHeritageEntity(
120+
self::arraySingleData()['id'] ?? null,
121+
self::arraySingleData()['unesco_id'],
122+
self::arraySingleData()['official_name'],
123+
self::arraySingleData()['name'],
124+
self::arraySingleData()['country'],
125+
self::arraySingleData()['region'],
126+
self::arraySingleData()['category'],
127+
self::arraySingleData()['year_inscribed'],
128+
self::arraySingleData()['latitude'],
129+
self::arraySingleData()['longitude'],
130+
self::arraySingleData()['is_endangered'],
131+
self::arraySingleData()['name_jp'],
132+
self::arraySingleData()['state_party'],
133+
self::arraySingleData()['criteria'],
134+
self::arraySingleData()['area_hectares'],
135+
self::arraySingleData()['buffer_zone_hectares'],
136+
self::arraySingleData()['short_description'],
137+
self::arraySingleData()['image_url'],
138+
self::arraySingleData()['unesco_site_url'],
139+
self::arraySingleData()['state_parties'],
140+
self::arraySingleData()['state_parties_meta']
141+
);
142+
143+
$result = $this->repository->insertHeritage($entity);
144+
145+
$this->assertInstanceOf(WorldHeritageEntity::class, $result);
146+
}
147+
148+
public function test_insert_check_single_value(): void
62149
{
63150
$entity = new WorldHeritageEntity(
64-
null,
65-
self::arrayData()['unesco_id'],
66-
self::arrayData()['official_name'],
67-
self::arrayData()['name'],
68-
self::arrayData()['country'],
69-
self::arrayData()['region'],
70-
self::arrayData()['category'],
71-
self::arrayData()['year_inscribed'],
72-
self::arrayData()['is_endangered'],
73-
self::arrayData()['latitude'],
74-
self::arrayData()['longitude'],
75-
self::arrayData()['name_jp'],
76-
self::arrayData()['state_party'],
77-
self::arrayData()['criteria'],
78-
self::arrayData()['area_hectares'],
79-
self::arrayData()['buffer_zone_hectares'],
80-
self::arrayData()['short_description'],
81-
self::arrayData()['image_url'],
82-
self::arrayData()['unesco_site_url']
151+
self::arraySingleData()['id'] ?? null,
152+
self::arraySingleData()['unesco_id'],
153+
self::arraySingleData()['official_name'],
154+
self::arraySingleData()['name'],
155+
self::arraySingleData()['country'],
156+
self::arraySingleData()['region'],
157+
self::arraySingleData()['category'],
158+
self::arraySingleData()['year_inscribed'],
159+
self::arraySingleData()['latitude'],
160+
self::arraySingleData()['longitude'],
161+
self::arraySingleData()['is_endangered'],
162+
self::arraySingleData()['name_jp'],
163+
self::arraySingleData()['state_party'],
164+
self::arraySingleData()['criteria'],
165+
self::arraySingleData()['area_hectares'],
166+
self::arraySingleData()['buffer_zone_hectares'],
167+
self::arraySingleData()['short_description'],
168+
self::arraySingleData()['image_url'],
169+
self::arraySingleData()['unesco_site_url'],
170+
self::arraySingleData()['state_parties'],
171+
self::arraySingleData()['state_parties_meta']
172+
);
173+
174+
$result = $this->repository->insertHeritage($entity);
175+
176+
$this->assertEquals(self::arraySingleData()['unesco_id'], $result->getUnescoId());
177+
$this->assertEquals(self::arraySingleData()['official_name'], $result->getOfficialName());
178+
$this->assertEquals(self::arraySingleData()['name'], $result->getName());
179+
$this->assertEquals(self::arraySingleData()['country'], $result->getCountry());
180+
$this->assertEquals(self::arraySingleData()['region'], $result->getRegion());
181+
$this->assertEquals(self::arraySingleData()['category'], $result->getCategory());
182+
$this->assertEquals(self::arraySingleData()['year_inscribed'], $result->getYearInscribed());
183+
$this->assertEquals(self::arraySingleData()['latitude'], $result->getLatitude());
184+
$this->assertEquals(self::arraySingleData()['longitude'], $result->getLongitude());
185+
$this->assertEquals(self::arraySingleData()['is_endangered'], $result->isEndangered());
186+
$this->assertEquals(self::arraySingleData()['name_jp'], $result->getNameJp());
187+
$this->assertEquals(self::arraySingleData()['criteria'], $result->getCriteria());
188+
$this->assertEquals(self::arraySingleData()['area_hectares'], $result->getAreaHectares());
189+
$this->assertEquals(self::arraySingleData()['buffer_zone_hectares'], $result->getBufferZoneHectares());
190+
$this->assertEquals(self::arraySingleData()['short_description'], $result->getShortDescription());
191+
$this->assertEquals(self::arraySingleData()['image_url'], $result->getImageUrl());
192+
$this->assertEquals(self::arraySingleData()['unesco_site_url'], $result->getUnescoSiteUrl());
193+
$this->assertEquals(self::arraySingleData()['state_parties'], $result->getStatePartyCodes());
194+
$this->assertEquals(self::arraySingleData()['state_parties_meta'], $result->getStatePartyMeta());
195+
}
196+
197+
public function test_insert_check_multi_type(): void
198+
{
199+
$entity = new WorldHeritageEntity(
200+
self::arrayMultiData()['id'] ?? null,
201+
self::arrayMultiData()['unesco_id'],
202+
self::arrayMultiData()['official_name'],
203+
self::arrayMultiData()['name'],
204+
self::arrayMultiData()['country'],
205+
self::arrayMultiData()['region'],
206+
self::arrayMultiData()['category'],
207+
self::arrayMultiData()['year_inscribed'],
208+
self::arrayMultiData()['is_endangered'],
209+
self::arrayMultiData()['latitude'],
210+
self::arrayMultiData()['longitude'],
211+
self::arrayMultiData()['name_jp'],
212+
self::arrayMultiData()['state_party'],
213+
self::arrayMultiData()['criteria'],
214+
self::arrayMultiData()['area_hectares'],
215+
self::arrayMultiData()['buffer_zone_hectares'],
216+
self::arrayMultiData()['short_description'],
217+
self::arrayMultiData()['image_url'],
218+
self::arrayMultiData()['unesco_site_url'],
219+
self::arrayMultiData()['state_parties'],
220+
self::arrayMultiData()['state_parties_meta']
83221
);
84222

85223
$result = $this->repository->insertHeritage($entity);
86224

87225
$this->assertInstanceOf(WorldHeritageEntity::class, $result);
88226
}
89227

90-
public function test_insert_check_value(): void
228+
public function test_insert_check_multi_value(): void
91229
{
92230
$entity = new WorldHeritageEntity(
93-
null,
94-
self::arrayData()['unesco_id'],
95-
self::arrayData()['official_name'],
96-
self::arrayData()['name'],
97-
self::arrayData()['country'],
98-
self::arrayData()['region'],
99-
self::arrayData()['category'],
100-
self::arrayData()['year_inscribed'],
101-
self::arrayData()['latitude'],
102-
self::arrayData()['longitude'],
103-
self::arrayData()['is_endangered'],
104-
self::arrayData()['name_jp'],
105-
self::arrayData()['state_party'],
106-
self::arrayData()['criteria'],
107-
self::arrayData()['area_hectares'],
108-
self::arrayData()['buffer_zone_hectares'],
109-
self::arrayData()['short_description'],
110-
self::arrayData()['image_url'],
111-
self::arrayData()['unesco_site_url']
231+
self::arrayMultiData()['id'] ?? null,
232+
self::arrayMultiData()['unesco_id'],
233+
self::arrayMultiData()['official_name'],
234+
self::arrayMultiData()['name'],
235+
self::arrayMultiData()['country'],
236+
self::arrayMultiData()['region'],
237+
self::arrayMultiData()['category'],
238+
self::arrayMultiData()['year_inscribed'],
239+
self::arrayMultiData()['is_endangered'],
240+
self::arrayMultiData()['latitude'],
241+
self::arrayMultiData()['longitude'],
242+
self::arrayMultiData()['name_jp'],
243+
self::arrayMultiData()['state_party'],
244+
self::arrayMultiData()['criteria'],
245+
self::arrayMultiData()['area_hectares'],
246+
self::arrayMultiData()['buffer_zone_hectares'],
247+
self::arrayMultiData()['short_description'],
248+
self::arrayMultiData()['image_url'],
249+
self::arrayMultiData()['unesco_site_url'],
250+
self::arrayMultiData()['state_parties'],
251+
self::arrayMultiData()['state_parties_meta']
112252
);
113253

114254
$result = $this->repository->insertHeritage($entity);
115255

116-
$this->assertEquals(self::arrayData()['unesco_id'], $result->getUnescoId());
117-
$this->assertEquals(self::arrayData()['official_name'], $result->getOfficialName());
118-
$this->assertEquals(self::arrayData()['name'], $result->getName());
119-
$this->assertEquals(self::arrayData()['name_jp'], $result->getNameJp());
120-
$this->assertEquals(self::arrayData()['country'], $result->getCountry());
121-
$this->assertEquals(self::arrayData()['region'], $result->getRegion());
122-
$this->assertEquals(self::arrayData()['state_party'], $result->getStateParty());
123-
$this->assertEquals(self::arrayData()['category'], $result->getCategory());
124-
$this->assertEquals(self::arrayData()['criteria'], $result->getCriteria());
125-
$this->assertEquals(self::arrayData()['year_inscribed'], $result->getYearInscribed());
126-
$this->assertEquals(self::arrayData()['area_hectares'], $result->getAreaHectares());
127-
$this->assertEquals(self::arrayData()['buffer_zone_hectares'], $result->getBufferZoneHectares());
128-
$this->assertEquals(self::arrayData()['is_endangered'], $result->isEndangered());
129-
$this->assertEquals(self::arrayData()['latitude'], $result->getLatitude());
130-
$this->assertEquals(self::arrayData()['longitude'], $result->getLongitude());
131-
$this->assertEquals(self::arrayData()['short_description'], $result->getShortDescription());
132-
$this->assertEquals(self::arrayData()['image_url'], $result->getImageUrl());
133-
$this->assertEquals(self::arrayData()['unesco_site_url'], $result->getUnescoSiteUrl());
256+
$this->assertEquals(self::arrayMultiData()['unesco_id'], $result->getUnescoId());
257+
$this->assertEquals(self::arrayMultiData()['official_name'], $result->getOfficialName());
258+
$this->assertEquals(self::arrayMultiData()['name'], $result->getName());
259+
$this->assertEquals(self::arrayMultiData()['country'], $result->getCountry());
260+
$this->assertEquals(self::arrayMultiData()['region'], $result->getRegion());
261+
$this->assertEquals(self::arrayMultiData()['category'], $result->getCategory());
262+
$this->assertEquals(self::arrayMultiData()['year_inscribed'], $result->getYearInscribed());
263+
$this->assertEquals(self::arrayMultiData()['is_endangered'], $result->isEndangered());
264+
$this->assertEquals(self::arrayMultiData()['latitude'], $result->getLatitude());
265+
$this->assertEquals(self::arrayMultiData()['longitude'], $result->getLongitude());
266+
$this->assertEquals(self::arrayMultiData()['name_jp'], $result->getNameJp());
267+
$this->assertEquals(self::arrayMultiData()['criteria'], $result->getCriteria());
268+
$this->assertEquals(self::arrayMultiData()['area_hectares'], $result->getAreaHectares());
269+
$this->assertEquals(self::arrayMultiData()['buffer_zone_hectares'], $result->getBufferZoneHectares());
270+
$this->assertEquals(self::arrayMultiData()['short_description'], $result->getShortDescription());
271+
$this->assertEquals(self::arrayMultiData()['image_url'], $result->getImageUrl());
272+
$this->assertEquals(self::arrayMultiData()['unesco_site_url'], $result->getUnescoSiteUrl());
273+
$this->assertEqualsCanonicalizing(self::arrayMultiData()['state_parties'], $result->getStatePartyCodes());
274+
$this->assertEquals(self::arrayMultiData()['state_parties_meta'], $result->getStatePartyMeta());
275+
$this->assertEqualsCanonicalizing(
276+
self::arrayMultiData()['state_parties_meta']['SK'],
277+
$entity->getStatePartyMeta()['SK']
278+
);
134279
}
135280
}

0 commit comments

Comments
 (0)