xref: /webtrees/tests/app/Census/CensusColumnConditionFrenchGarconTest.php (revision 1270d2767576ed4a83917769b0ee3613e3b010bf)
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\Census;
21
22use Fisharebest\Webtrees\Date;
23use Fisharebest\Webtrees\Fact;
24use Fisharebest\Webtrees\Family;
25use Fisharebest\Webtrees\Individual;
26use Fisharebest\Webtrees\TestCase;
27use Illuminate\Support\Collection;
28use PHPUnit\Framework\Attributes\CoversClass;
29
30#[CoversClass(CensusColumnConditionFrenchGarcon::class)]
31#[CoversClass(AbstractCensusColumnCondition::class)]
32class CensusColumnConditionFrenchGarconTest extends TestCase
33{
34    public function testNoSpouseFamiliesMale(): void
35    {
36        $individual = $this->createMock(Individual::class);
37        $individual->method('sex')->willReturn('M');
38        $individual->method('spouseFamilies')->willReturn(new Collection());
39        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
40
41        $census = $this->createMock(CensusInterface::class);
42        $census->method('censusDate')->willReturn('30 JUN 1830');
43
44        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
45
46        self::assertSame('1', $column->generate($individual, $individual));
47    }
48
49    public function testNoSpouseFamiliesFemale(): void
50    {
51        $individual = $this->createMock(Individual::class);
52        $individual->method('sex')->willReturn('F');
53        $individual->method('spouseFamilies')->willReturn(new Collection());
54        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
55
56        $census = $this->createMock(CensusInterface::class);
57        $census->method('censusDate')->willReturn('30 JUN 1830');
58
59        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
60
61        self::assertSame('', $column->generate($individual, $individual));
62    }
63
64    public function testNoFamilyFactsMale(): void
65    {
66        $family = $this->createMock(Family::class);
67        $family->method('getMarriageDate')->willReturn(new Date(''));
68        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
69
70        $individual = $this->createMock(Individual::class);
71        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
72        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
73        $individual->method('sex')->willReturn('M');
74
75        $census = $this->createMock(CensusInterface::class);
76
77        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
78        $census->method('censusDate')->willReturn('30 JUN 1830');
79
80        self::assertSame('1', $column->generate($individual, $individual));
81    }
82
83    public function testNoFamilyFactsFemale(): void
84    {
85        $family = $this->createMock(Family::class);
86        $family->method('getMarriageDate')->willReturn(new Date(''));
87        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
88
89        $individual = $this->createMock(Individual::class);
90        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
91        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
92        $individual->method('sex')->willReturn('F');
93
94        $census = $this->createMock(CensusInterface::class);
95
96        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
97        $census->method('censusDate')->willReturn('30 JUN 1830');
98
99        self::assertSame('', $column->generate($individual, $individual));
100    }
101
102    public function testSpouseDeadMale(): void
103    {
104        $fact = $this->createMock(Fact::class);
105
106        $spouse = $this->createMock(Individual::class);
107        $spouse->method('getDeathDate')->willReturn(new Date('1820'));
108
109        $family = $this->createMock(Family::class);
110        $family
111            ->expects(self::exactly(2))
112            ->method('facts')
113            ->with(self::withConsecutive([['MARR'], ['DIV']]))
114            ->willReturnOnConsecutiveCalls(
115                new Collection([$fact]),
116                new Collection()
117            );
118        $family->expects($this->once())->method('spouse')->willReturn($spouse);
119
120        $individual = $this->createMock(Individual::class);
121        $individual->method('sex')->willReturn('M');
122        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
123
124        $census = $this->createMock(CensusInterface::class);
125
126        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
127        $census->method('censusDate')->willReturn('30 JUN 1830');
128
129        self::assertSame('', $column->generate($individual, $individual));
130    }
131
132    public function testSpouseDeadFemale(): void
133    {
134        $fact = $this->createMock(Fact::class);
135
136        $spouse = $this->createMock(Individual::class);
137        $spouse->method('getDeathDate')->willReturn(new Date('1820'));
138
139        $family = $this->createMock(Family::class);
140        $family
141            ->expects(self::exactly(2))
142            ->method('facts')
143            ->with(self::withConsecutive([['MARR'], ['DIV']]))
144            ->willReturnOnConsecutiveCalls(
145                new Collection([$fact]),
146                new Collection()
147            );
148        $family->expects($this->once())->method('spouse')->willReturn($spouse);
149
150        $individual = $this->createMock(Individual::class);
151        $individual->method('sex')->willReturn('F');
152        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
153
154        $census = $this->createMock(CensusInterface::class);
155
156        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
157        $census->method('censusDate')->willReturn('30 JUN 1830');
158
159        self::assertSame('', $column->generate($individual, $individual));
160    }
161
162    public function testNoFamilyUnmarriedMale(): void
163    {
164        $family = $this->createMock(Family::class);
165        $family->method('getMarriageDate')->willReturn(new Date(''));
166        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
167
168        $individual = $this->createMock(Individual::class);
169        $individual->method('sex')->willReturn('M');
170        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
171        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
172
173        $census = $this->createMock(CensusInterface::class);
174        $census->method('censusDate')->willReturn('30 JUN 1830');
175
176        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
177
178        self::assertSame('1', $column->generate($individual, $individual));
179    }
180
181    public function testNoFamilyUnmarriedFemale(): void
182    {
183        $family = $this->createMock(Family::class);
184        $family->method('getMarriageDate')->willReturn(new Date(''));
185        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
186
187        $individual = $this->createMock(Individual::class);
188        $individual->method('sex')->willReturn('F');
189        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
190        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1800'));
191
192        $census = $this->createMock(CensusInterface::class);
193        $census->method('censusDate')->willReturn('30 JUN 1830');
194
195        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
196
197        self::assertSame('', $column->generate($individual, $individual));
198    }
199
200    public function testChildMale(): void
201    {
202        $family = $this->createMock(Family::class);
203        $family->method('getMarriageDate')->willReturn(new Date(''));
204        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
205
206        $individual = $this->createMock(Individual::class);
207        $individual->method('sex')->willReturn('M');
208        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
209        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1820'));
210
211        $census = $this->createMock(CensusInterface::class);
212        $census->method('censusDate')->willReturn('30 JUN 1830');
213
214        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
215
216        self::assertSame('1', $column->generate($individual, $individual));
217    }
218
219    public function testChildFemale(): void
220    {
221        $family = $this->createMock(Family::class);
222        $family->method('getMarriageDate')->willReturn(new Date(''));
223        $family->method('facts')->with(['MARR'])->willReturn(new Collection());
224
225        $individual = $this->createMock(Individual::class);
226        $individual->method('sex')->willReturn('F');
227        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
228        $individual->method('getEstimatedBirthDate')->willReturn(new Date('1820'));
229
230        $census = $this->createMock(CensusInterface::class);
231        $census->method('censusDate')->willReturn('30 JUN 1830');
232
233        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
234
235        self::assertSame('', $column->generate($individual, $individual));
236    }
237
238    public function testDivorcedMale(): void
239    {
240        $fact = $this->createMock(Fact::class);
241
242        $family = $this->createMock(Family::class);
243        $family
244            ->expects(self::exactly(2))
245            ->method('facts')
246            ->with(self::withConsecutive([['MARR'], ['DIV']]))
247            ->willReturn(
248                new Collection([$fact]),
249                new Collection([$fact])
250            );
251
252        $individual = $this->createMock(Individual::class);
253        $individual->method('sex')->willReturn('M');
254        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
255
256        $census = $this->createMock(CensusInterface::class);
257
258        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
259        $census->method('censusDate')->willReturn('30 JUN 1830');
260
261        self::assertSame('', $column->generate($individual, $individual));
262    }
263
264    public function testDivorcedFemale(): void
265    {
266        $fact = $this->createMock(Fact::class);
267
268        $family = $this->createMock(Family::class);
269        $family
270            ->expects(self::exactly(2))
271            ->method('facts')
272            ->with(self::withConsecutive([['MARR'], ['DIV']]))
273            ->willReturn(
274                new Collection([$fact]),
275                new Collection([$fact])
276            );
277
278        $individual = $this->createMock(Individual::class);
279        $individual->method('sex')->willReturn('F');
280        $individual->method('spouseFamilies')->willReturn(new Collection([$family]));
281
282        $census = $this->createMock(CensusInterface::class);
283
284        $column = new CensusColumnConditionFrenchGarcon($census, '', '');
285        $census->method('censusDate')->willReturn('30 JUN 1830');
286
287        self::assertSame('', $column->generate($individual, $individual));
288    }
289}
290