xref: /webtrees/tests/app/SurnameTradition/PolishSurnameTraditionTest.php (revision 0d515f585d0ea331a3e7959b1a009d9100af8a3f)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2023 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 surnames are used
36     *
37     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
38     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
39     */
40    public function testSurnames(): void
41    {
42        self::assertSame('//', $this->surname_tradition->defaultName());
43    }
44
45    /**
46     * Test new son names
47     *
48     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
49     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
50     */
51    public function testNewSonNames(): void
52    {
53        $father_fact = $this->createStub(Fact::class);
54        $father_fact->method('value')->willReturn('John /White/');
55
56        $father = $this->createStub(Individual::class);
57        $father->method('facts')->willReturn(new Collection([$father_fact]));
58
59        $mother_fact = $this->createStub(Fact::class);
60        $mother_fact->method('value')->willReturn('Mary /Black/');
61
62        $mother = $this->createStub(Individual::class);
63        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
64
65        self::assertSame(
66            ["1 NAME /White/\n2 TYPE BIRTH\n2 SURN White"],
67            $this->surname_tradition->newChildNames($father, $mother, 'M')
68        );
69    }
70
71    /**
72     * Test new daughter names
73     *
74     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
75     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
76     */
77    public function testNewDaughterNames(): void
78    {
79        $father_fact = $this->createStub(Fact::class);
80        $father_fact->method('value')->willReturn('John /White/');
81
82        $father = $this->createStub(Individual::class);
83        $father->method('facts')->willReturn(new Collection([$father_fact]));
84
85        $mother_fact = $this->createStub(Fact::class);
86        $mother_fact->method('value')->willReturn('Mary /Black/');
87
88        $mother = $this->createStub(Individual::class);
89        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
90
91        self::assertSame(
92            ["1 NAME /White/\n2 TYPE BIRTH\n2 SURN White"],
93            $this->surname_tradition->newChildNames($father, $mother, 'F')
94        );
95    }
96
97    /**
98     * Test new daughter names
99     *
100     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
101     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
102     */
103    public function testNewDaughterNamesInflected(): void
104    {
105        $father_fact = $this->createStub(Fact::class);
106        $father_fact->method('value')->willReturn('John /Whitecki/');
107
108        $father = $this->createStub(Individual::class);
109        $father->method('facts')->willReturn(new Collection([$father_fact]));
110
111        $mother_fact = $this->createStub(Fact::class);
112        $mother_fact->method('value')->willReturn('Mary /Black/');
113
114        $mother = $this->createStub(Individual::class);
115        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
116
117        self::assertSame(
118            ["1 NAME /Whitecka/\n2 TYPE BIRTH\n2 SURN Whitecki"],
119            $this->surname_tradition->newChildNames($father, $mother, 'F')
120        );
121
122        $father_fact = $this->createStub(Fact::class);
123        $father_fact->method('value')->willReturn('John /Whitedzki/');
124
125        $father = $this->createStub(Individual::class);
126        $father->method('facts')->willReturn(new Collection([$father_fact]));
127
128        $mother_fact = $this->createStub(Fact::class);
129        $mother_fact->method('value')->willReturn('Mary /Black/');
130
131        $mother = $this->createStub(Individual::class);
132        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
133
134        self::assertSame(
135            ["1 NAME /Whitedzka/\n2 TYPE BIRTH\n2 SURN Whitedzki"],
136            $this->surname_tradition->newChildNames($father, $mother, 'F')
137        );
138
139        $father_fact = $this->createStub(Fact::class);
140        $father_fact->method('value')->willReturn('John /Whiteski/');
141
142        $father = $this->createStub(Individual::class);
143        $father->method('facts')->willReturn(new Collection([$father_fact]));
144
145        $mother_fact = $this->createStub(Fact::class);
146        $mother_fact->method('value')->willReturn('Mary /Black/');
147
148        $mother = $this->createStub(Individual::class);
149        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
150
151        self::assertSame(
152            ["1 NAME /Whiteska/\n2 TYPE BIRTH\n2 SURN Whiteski"],
153            $this->surname_tradition->newChildNames($father, $mother, 'F')
154        );
155
156        $father_fact = $this->createStub(Fact::class);
157        $father_fact->method('value')->willReturn('John /Whiteżki/');
158
159        $father = $this->createStub(Individual::class);
160        $father->method('facts')->willReturn(new Collection([$father_fact]));
161
162        $mother_fact = $this->createStub(Fact::class);
163        $mother_fact->method('value')->willReturn('Mary /Black/');
164
165        $mother = $this->createStub(Individual::class);
166        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
167
168        self::assertSame(
169            ["1 NAME /Whiteżka/\n2 TYPE BIRTH\n2 SURN Whiteżki"],
170            $this->surname_tradition->newChildNames($father, $mother, 'F')
171        );
172    }
173
174    /**
175     * Test new child names
176     *
177     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
178     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
179     */
180    public function testNewChildNames(): void
181    {
182        $father_fact = $this->createStub(Fact::class);
183        $father_fact->method('value')->willReturn('John /White/');
184
185        $father = $this->createStub(Individual::class);
186        $father->method('facts')->willReturn(new Collection([$father_fact]));
187
188        $mother_fact = $this->createStub(Fact::class);
189        $mother_fact->method('value')->willReturn('Mary /Black/');
190
191        $mother = $this->createStub(Individual::class);
192        $mother->method('facts')->willReturn(new Collection([$mother_fact]));
193
194        self::assertSame(
195            ["1 NAME /White/\n2 TYPE BIRTH\n2 SURN White"],
196            $this->surname_tradition->newChildNames($father, $mother, 'U')
197        );
198    }
199
200    /**
201     * Test new child names
202     *
203     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
204     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
205     */
206    public function testNewChildNamesWithNoParentsNames(): void
207    {
208        self::assertSame(
209            ["1 NAME //\n2 TYPE BIRTH"],
210            $this->surname_tradition->newChildNames(null, null, 'U')
211        );
212    }
213
214    /**
215     * Test new father names
216     *
217     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
218     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
219     */
220    public function testNewFatherNames(): void
221    {
222        $fact = $this->createStub(Fact::class);
223        $fact->method('value')->willReturn('Chris /White/');
224
225        $individual = $this->createStub(Individual::class);
226        $individual->method('facts')->willReturn(new Collection([$fact]));
227
228        self::assertSame(
229            ["1 NAME /White/\n2 TYPE BIRTH\n2 SURN White"],
230            $this->surname_tradition->newParentNames($individual, 'M')
231        );
232    }
233
234    /**
235     * Test new father names
236     *
237     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
238     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
239     */
240    public function testNewFatherNamesInflected(): void
241    {
242        $fact = $this->createStub(Fact::class);
243        $fact->method('value')->willReturn('Chris /Whitecka/');
244
245        $individual = $this->createStub(Individual::class);
246        $individual->method('facts')->willReturn(new Collection([$fact]));
247
248        self::assertSame(
249            ["1 NAME /Whitecki/\n2 TYPE BIRTH\n2 SURN Whitecki"],
250            $this->surname_tradition->newParentNames($individual, 'M')
251        );
252
253        $fact = $this->createStub(Fact::class);
254        $fact->method('value')->willReturn('Chris /Whitedzka/');
255
256        $individual = $this->createStub(Individual::class);
257        $individual->method('facts')->willReturn(new Collection([$fact]));
258
259        self::assertSame(
260            ["1 NAME /Whitedzki/\n2 TYPE BIRTH\n2 SURN Whitedzki"],
261            $this->surname_tradition->newParentNames($individual, 'M')
262        );
263
264        $fact = $this->createStub(Fact::class);
265        $fact->method('value')->willReturn('Chris /Whiteska/');
266
267        $individual = $this->createStub(Individual::class);
268        $individual->method('facts')->willReturn(new Collection([$fact]));
269
270        self::assertSame(
271            ["1 NAME /Whiteski/\n2 TYPE BIRTH\n2 SURN Whiteski"],
272            $this->surname_tradition->newParentNames($individual, 'M')
273        );
274
275        $fact = $this->createStub(Fact::class);
276        $fact->method('value')->willReturn('Chris /Whiteżka/');
277
278        $individual = $this->createStub(Individual::class);
279        $individual->method('facts')->willReturn(new Collection([$fact]));
280
281        self::assertSame(
282            ["1 NAME /Whiteżki/\n2 TYPE BIRTH\n2 SURN Whiteżki"],
283            $this->surname_tradition->newParentNames($individual, 'M')
284        );
285    }
286
287    /**
288     * Test new mother names
289     *
290     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
291     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
292     */
293    public function testNewMotherNames(): void
294    {
295        $fact = $this->createStub(Fact::class);
296        $fact->method('value')->willReturn('Chris /White/');
297
298        $individual = $this->createStub(Individual::class);
299        $individual->method('facts')->willReturn(new Collection([$fact]));
300
301        self::assertSame(
302            ["1 NAME //\n2 TYPE BIRTH"],
303            $this->surname_tradition->newParentNames($individual, 'F')
304        );
305    }
306
307    /**
308     * Test new parent names
309     *
310     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
311     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
312     */
313    public function testNewParentNames(): void
314    {
315        $fact = $this->createStub(Fact::class);
316        $fact->method('value')->willReturn('Chris /White/');
317
318        $individual = $this->createStub(Individual::class);
319        $individual->method('facts')->willReturn(new Collection([$fact]));
320
321        self::assertSame(
322            ["1 NAME //\n2 TYPE BIRTH"],
323            $this->surname_tradition->newParentNames($individual, 'U')
324        );
325    }
326
327    /**
328     * Test new spouse names
329     *
330     * @covers \Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition
331     * @covers \Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition
332     */
333    public function testNewSpouseNames(): void
334    {
335        $fact = $this->createStub(Fact::class);
336        $fact->method('value')->willReturn('Chris /White/');
337
338        $individual = $this->createStub(Individual::class);
339        $individual->method('facts')->willReturn(new Collection([$fact]));
340
341        self::assertSame(
342            ["1 NAME //\n2 TYPE BIRTH"],
343            $this->surname_tradition->newSpouseNames($individual, 'M')
344        );
345
346        self::assertSame(
347            ["1 NAME //\n2 TYPE BIRTH", "1 NAME /White/\n2 TYPE MARRIED\n2 SURN White"],
348            $this->surname_tradition->newSpouseNames($individual, 'F')
349        );
350
351        self::assertSame(
352            ["1 NAME //\n2 TYPE BIRTH"],
353            $this->surname_tradition->newSpouseNames($individual, 'U')
354        );
355    }
356
357    /**
358     * Prepare the environment for these tests
359     */
360    protected function setUp(): void
361    {
362        parent::setUp();
363
364        $this->surname_tradition = new PolishSurnameTradition();
365    }
366}
367