xref: /webtrees/tests/app/SurnameTradition/PolishSurnameTraditionTest.php (revision c793b70f153721f127cc9fc72fec5a60f4ba9d23)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2021 webtrees development team
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18declare(strict_types=1);
19
20namespace Fisharebest\Webtrees\SurnameTradition;
21
22use Fisharebest\Webtrees\Fact;
23use Fisharebest\Webtrees\Individual;
24use Fisharebest\Webtrees\TestCase;
25use Illuminate\Support\Collection;
26
27/**
28 * Test harness for the class PolishSurnameTradition
29 */
30class PolishSurnameTraditionTest extends TestCase
31{
32    private SurnameTraditionInterface $surname_tradition;
33
34    /**
35     * Test whether married surnames are used
36     *
37     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
38     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
39     *
40     * @return void
41     */
42    public function testMarriedSurnames(): void
43    {
44        self::assertTrue($this->surname_tradition->hasMarriedNames());
45    }
46
47    /**
48     * Test whether surnames are used
49     *
50     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
51     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
52     *
53     * @return void
54     */
55    public function testSurnames(): void
56    {
57        self::assertTrue($this->surname_tradition->hasSurnames());
58    }
59
60    /**
61     * Test new son names
62     *
63     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
64     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
65     *
66     * @return void
67     */
68    public function testNewSonNames(): void
69    {
70        $father_fact = $this->createStub(Fact::class);
71        $father_fact->method('value')->willReturn('John /White/');
72
73        $father = $this->createStub(Individual::class);
74        $father->method('facts')->willReturn(new Collection([$father_fact]));
75
76        $mother_fact = $this->createStub(Fact::class);
77        $mother_fact->method('value')->willReturn('Mary /Black/');
78
79        $mother = $this->createStub(Individual::class);
80        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
81
82        self::assertSame(
83            ["1 NAME /White/\n2 TYPE birth\n2 SURN White"],
84            $this->surname_tradition->newChildNames($father, $mother, 'M')
85        );
86    }
87
88    /**
89     * Test new daughter names
90     *
91     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
92     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
93     *
94     * @return void
95     */
96    public function testNewDaughterNames(): void
97    {
98        $father_fact = $this->createStub(Fact::class);
99        $father_fact->method('value')->willReturn('John /White/');
100
101        $father = $this->createStub(Individual::class);
102        $father->method('facts')->willReturn(new Collection([$father_fact]));
103
104        $mother_fact = $this->createStub(Fact::class);
105        $mother_fact->method('value')->willReturn('Mary /Black/');
106
107        $mother = $this->createStub(Individual::class);
108        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
109
110        self::assertSame(
111            ["1 NAME /White/\n2 TYPE birth\n2 SURN White"],
112            $this->surname_tradition->newChildNames($father, $mother, 'F')
113        );
114    }
115
116    /**
117     * Test new daughter names
118     *
119     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
120     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
121     *
122     * @return void
123     */
124    public function testNewDaughterNamesInflected(): void
125    {
126        $father_fact = $this->createStub(Fact::class);
127        $father_fact->method('value')->willReturn('John /Whitecki/');
128
129        $father = $this->createStub(Individual::class);
130        $father->method('facts')->willReturn(new Collection([$father_fact]));
131
132        $mother_fact = $this->createStub(Fact::class);
133        $mother_fact->method('value')->willReturn('Mary /Black/');
134
135        $mother = $this->createStub(Individual::class);
136        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
137
138        self::assertSame(
139            ["1 NAME /Whitecka/\n2 TYPE birth\n2 SURN Whitecki"],
140            $this->surname_tradition->newChildNames($father, $mother, 'F')
141        );
142
143        $father_fact = $this->createStub(Fact::class);
144        $father_fact->method('value')->willReturn('John /Whitedzki/');
145
146        $father = $this->createStub(Individual::class);
147        $father->method('facts')->willReturn(new Collection([$father_fact]));
148
149        $mother_fact = $this->createStub(Fact::class);
150        $mother_fact->method('value')->willReturn('Mary /Black/');
151
152        $mother = $this->createStub(Individual::class);
153        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
154
155        self::assertSame(
156            ["1 NAME /Whitedzka/\n2 TYPE birth\n2 SURN Whitedzki"],
157            $this->surname_tradition->newChildNames($father, $mother, 'F')
158        );
159
160        $father_fact = $this->createStub(Fact::class);
161        $father_fact->method('value')->willReturn('John /Whiteski/');
162
163        $father = $this->createStub(Individual::class);
164        $father->method('facts')->willReturn(new Collection([$father_fact]));
165
166        $mother_fact = $this->createStub(Fact::class);
167        $mother_fact->method('value')->willReturn('Mary /Black/');
168
169        $mother = $this->createStub(Individual::class);
170        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
171
172        self::assertSame(
173            ["1 NAME /Whiteska/\n2 TYPE birth\n2 SURN Whiteski"],
174            $this->surname_tradition->newChildNames($father, $mother, 'F')
175        );
176
177        $father_fact = $this->createStub(Fact::class);
178        $father_fact->method('value')->willReturn('John /Whiteżki/');
179
180        $father = $this->createStub(Individual::class);
181        $father->method('facts')->willReturn(new Collection([$father_fact]));
182
183        $mother_fact = $this->createStub(Fact::class);
184        $mother_fact->method('value')->willReturn('Mary /Black/');
185
186        $mother = $this->createStub(Individual::class);
187        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
188
189        self::assertSame(
190            ["1 NAME /Whiteżka/\n2 TYPE birth\n2 SURN Whiteżki"],
191            $this->surname_tradition->newChildNames($father, $mother, 'F')
192        );
193    }
194
195    /**
196     * Test new child names
197     *
198     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
199     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
200     *
201     * @return void
202     */
203    public function testNewChildNames(): void
204    {
205        $father_fact = $this->createStub(Fact::class);
206        $father_fact->method('value')->willReturn('John /White/');
207
208        $father = $this->createStub(Individual::class);
209        $father->method('facts')->willReturn(new Collection([$father_fact]));
210
211        $mother_fact = $this->createStub(Fact::class);
212        $mother_fact->method('value')->willReturn('Mary /Black/');
213
214        $mother = $this->createStub(Individual::class);
215        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
216
217        self::assertSame(
218            ["1 NAME /White/\n2 TYPE birth\n2 SURN White"],
219            $this->surname_tradition->newChildNames($father, $mother, 'U')
220        );
221    }
222
223    /**
224     * Test new child names
225     *
226     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
227     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
228     *
229     * @return void
230     */
231    public function testNewChildNamesWithNoParentsNames(): void
232    {
233        self::assertSame(
234            ["1 NAME //\n2 TYPE birth"],
235            $this->surname_tradition->newChildNames(null, null, 'U')
236        );
237    }
238
239    /**
240     * Test new father names
241     *
242     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
243     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
244     *
245     * @return void
246     */
247    public function testNewFatherNames(): void
248    {
249        $fact = $this->createStub(Fact::class);
250        $fact->method('value')->willReturn('Chris /White/');
251
252        $individual = $this->createStub(Individual::class);
253        $individual->method('facts')->willReturn(new Collection([$fact]));
254
255        self::assertSame(
256            ["1 NAME /White/\n2 TYPE birth\n2 SURN White"],
257            $this->surname_tradition->newParentNames($individual, 'M')
258        );
259    }
260
261    /**
262     * Test new father names
263     *
264     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
265     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
266     *
267     * @return void
268     */
269    public function testNewFatherNamesInflected(): void
270    {
271        $fact = $this->createStub(Fact::class);
272        $fact->method('value')->willReturn('Chris /Whitecka/');
273
274        $individual = $this->createStub(Individual::class);
275        $individual->method('facts')->willReturn(new Collection([$fact]));
276
277        self::assertSame(
278            ["1 NAME /Whitecki/\n2 TYPE birth\n2 SURN Whitecki"],
279            $this->surname_tradition->newParentNames($individual, 'M')
280        );
281
282        $fact = $this->createStub(Fact::class);
283        $fact->method('value')->willReturn('Chris /Whitedzka/');
284
285        $individual = $this->createStub(Individual::class);
286        $individual->method('facts')->willReturn(new Collection([$fact]));
287
288        self::assertSame(
289            ["1 NAME /Whitedzki/\n2 TYPE birth\n2 SURN Whitedzki"],
290            $this->surname_tradition->newParentNames($individual, 'M')
291        );
292
293        $fact = $this->createStub(Fact::class);
294        $fact->method('value')->willReturn('Chris /Whiteska/');
295
296        $individual = $this->createStub(Individual::class);
297        $individual->method('facts')->willReturn(new Collection([$fact]));
298
299        self::assertSame(
300            ["1 NAME /Whiteski/\n2 TYPE birth\n2 SURN Whiteski"],
301            $this->surname_tradition->newParentNames($individual, 'M')
302        );
303
304        $fact = $this->createStub(Fact::class);
305        $fact->method('value')->willReturn('Chris /Whiteżka/');
306
307        $individual = $this->createStub(Individual::class);
308        $individual->method('facts')->willReturn(new Collection([$fact]));
309
310        self::assertSame(
311            ["1 NAME /Whiteżki/\n2 TYPE birth\n2 SURN Whiteżki"],
312            $this->surname_tradition->newParentNames($individual, 'M')
313        );
314    }
315
316    /**
317     * Test new mother names
318     *
319     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
320     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
321     *
322     * @return void
323     */
324    public function testNewMotherNames(): void
325    {
326        $fact = $this->createStub(Fact::class);
327        $fact->method('value')->willReturn('Chris /White/');
328
329        $individual = $this->createStub(Individual::class);
330        $individual->method('facts')->willReturn(new Collection([$fact]));
331
332        self::assertSame(
333            ["1 NAME //\n2 TYPE birth"],
334            $this->surname_tradition->newParentNames($individual, 'F')
335        );
336    }
337
338    /**
339     * Test new parent names
340     *
341     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
342     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
343     *
344     * @return void
345     */
346    public function testNewParentNames(): void
347    {
348        $fact = $this->createStub(Fact::class);
349        $fact->method('value')->willReturn('Chris /White/');
350
351        $individual = $this->createStub(Individual::class);
352        $individual->method('facts')->willReturn(new Collection([$fact]));
353
354        self::assertSame(
355            ["1 NAME //\n2 TYPE birth"],
356            $this->surname_tradition->newParentNames($individual, 'U')
357        );
358    }
359
360    /**
361     * Test new spouse names
362     *
363     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
364     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
365     *
366     * @return void
367     */
368    public function testNewSpouseNames(): void
369    {
370        $fact = $this->createStub(Fact::class);
371        $fact->method('value')->willReturn('Chris /White/');
372
373        $individual = $this->createStub(Individual::class);
374        $individual->method('facts')->willReturn(new Collection([$fact]));
375
376        self::assertSame(
377            ["1 NAME //\n2 TYPE birth"],
378            $this->surname_tradition->newSpouseNames($individual, 'M')
379        );
380
381        self::assertSame(
382            ["1 NAME //\n2 TYPE birth", "1 NAME /White/\n2 TYPE married\n2 SURN White"],
383            $this->surname_tradition->newSpouseNames($individual, 'F')
384        );
385
386        self::assertSame(
387            ["1 NAME //\n2 TYPE birth"],
388            $this->surname_tradition->newSpouseNames($individual, 'U')
389        );
390    }
391
392    /**
393     * Prepare the environment for these tests
394     *
395     * @return void
396     */
397    protected function setUp(): void
398    {
399        parent::setUp();
400
401        $this->surname_tradition = new PolishSurnameTradition();
402    }
403}
404