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\Family; 23use Fisharebest\Webtrees\Individual; 24use Fisharebest\Webtrees\Place; 25use Fisharebest\Webtrees\TestCase; 26use Illuminate\Support\Collection; 27 28/** 29 * Test harness for the class CensusColumnFatherBirthPlace 30 */ 31class CensusColumnFatherBirthPlaceTest extends TestCase 32{ 33 private function getPlaceMock(string $place): Place 34 { 35 $placeParts = explode(', ', $place); 36 37 $placeMock = $this->createMock(Place::class); 38 $placeMock->method('gedcomName')->willReturn($place); 39 $placeMock->method('lastParts')->willReturn(new Collection($placeParts)); 40 41 return $placeMock; 42 } 43 44 /** 45 * @covers \Fisharebest\Webtrees\Census\CensusColumnFatherBirthPlace 46 * @covers \Fisharebest\Webtrees\Census\AbstractCensusColumn 47 */ 48 public function testSameCountry(): void 49 { 50 $father = $this->createMock(Individual::class); 51 $father->method('getBirthPlace')->willReturn($this->getPlaceMock('London, England')); 52 53 $family = $this->createMock(Family::class); 54 $family->method('husband')->willReturn($father); 55 56 $individual = $this->createMock(Individual::class); 57 $individual->method('childFamilies')->willReturn(new Collection([$family])); 58 59 $census = $this->createMock(CensusInterface::class); 60 $census->method('censusPlace')->willReturn('England'); 61 62 $column = new CensusColumnFatherBirthPlace($census, '', ''); 63 64 self::assertSame('London', $column->generate($individual, $individual)); 65 } 66 67 /** 68 * @covers \Fisharebest\Webtrees\Census\CensusColumnFatherBirthPlace 69 * @covers \Fisharebest\Webtrees\Census\AbstractCensusColumn 70 */ 71 public function testDifferentCountry(): void 72 { 73 $father = $this->createMock(Individual::class); 74 $father->method('getBirthPlace')->willReturn($this->getPlaceMock('London, England')); 75 76 $family = $this->createMock(Family::class); 77 $family->method('husband')->willReturn($father); 78 79 $individual = $this->createMock(Individual::class); 80 $individual->method('childFamilies')->willReturn(new Collection([$family])); 81 82 $census = $this->createMock(CensusInterface::class); 83 $census->method('censusPlace')->willReturn('Ireland'); 84 85 $column = new CensusColumnFatherBirthPlace($census, '', ''); 86 87 self::assertSame('London, England', $column->generate($individual, $individual)); 88 } 89 90 /** 91 * @covers \Fisharebest\Webtrees\Census\CensusColumnFatherBirthPlace 92 * @covers \Fisharebest\Webtrees\Census\AbstractCensusColumn 93 */ 94 public function testPlaceNoParent(): void 95 { 96 $family = $this->createMock(Family::class); 97 $family->method('husband')->willReturn(null); 98 99 $individual = $this->createMock(Individual::class); 100 $individual->method('childFamilies')->willReturn(new Collection([$family])); 101 102 $census = $this->createMock(CensusInterface::class); 103 $census->method('censusPlace')->willReturn('England'); 104 105 $column = new CensusColumnFatherBirthPlace($census, '', ''); 106 107 self::assertSame('', $column->generate($individual, $individual)); 108 } 109 110 /** 111 * @covers \Fisharebest\Webtrees\Census\CensusColumnFatherBirthPlace 112 * @covers \Fisharebest\Webtrees\Census\AbstractCensusColumn 113 */ 114 public function testPlaceNoParentFamily(): void 115 { 116 $individual = $this->createMock(Individual::class); 117 $individual->method('childFamilies')->willReturn(new Collection()); 118 119 $census = $this->createMock(CensusInterface::class); 120 $census->method('censusPlace')->willReturn('England'); 121 122 $column = new CensusColumnFatherBirthPlace($census, '', ''); 123 124 self::assertSame('', $column->generate($individual, $individual)); 125 } 126} 127