xref: /webtrees/tests/app/Http/RequestHandlers/RedirectPedigreePhpTest.php (revision 00ef1d3af59aba99c1ae5c92c7e655525c97797b)
13340ecd2SGreg Roach<?php
23340ecd2SGreg Roach
33340ecd2SGreg Roach/**
43340ecd2SGreg Roach * webtrees: online genealogy
5d11be702SGreg Roach * Copyright (C) 2023 webtrees development team
63340ecd2SGreg Roach * This program is free software: you can redistribute it and/or modify
73340ecd2SGreg Roach * it under the terms of the GNU General Public License as published by
83340ecd2SGreg Roach * the Free Software Foundation, either version 3 of the License, or
93340ecd2SGreg Roach * (at your option) any later version.
103340ecd2SGreg Roach * This program is distributed in the hope that it will be useful,
113340ecd2SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
123340ecd2SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
133340ecd2SGreg Roach * GNU General Public License for more details.
143340ecd2SGreg Roach * You should have received a copy of the GNU General Public License
153340ecd2SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
163340ecd2SGreg Roach */
173340ecd2SGreg Roach
183340ecd2SGreg Roachdeclare(strict_types=1);
193340ecd2SGreg Roach
203340ecd2SGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers;
213340ecd2SGreg Roach
223340ecd2SGreg Roachuse Fig\Http\Message\RequestMethodInterface;
233340ecd2SGreg Roachuse Fig\Http\Message\StatusCodeInterface;
243340ecd2SGreg Roachuse Fisharebest\Webtrees\Factories\IndividualFactory;
25*00ef1d3aSGreg Roachuse Fisharebest\Webtrees\GuestUser;
2615c4f62cSGreg Roachuse Fisharebest\Webtrees\Http\Exceptions\HttpGoneException;
273340ecd2SGreg Roachuse Fisharebest\Webtrees\Individual;
28*00ef1d3aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleChartInterface;
293340ecd2SGreg Roachuse Fisharebest\Webtrees\Module\PedigreeChartModule;
303340ecd2SGreg Roachuse Fisharebest\Webtrees\Registry;
313340ecd2SGreg Roachuse Fisharebest\Webtrees\Services\ModuleService;
323340ecd2SGreg Roachuse Fisharebest\Webtrees\Services\TreeService;
333340ecd2SGreg Roachuse Fisharebest\Webtrees\TestCase;
343340ecd2SGreg Roachuse Fisharebest\Webtrees\Tree;
353340ecd2SGreg Roachuse Illuminate\Support\Collection;
36202c018bSGreg Roachuse PHPUnit\Framework\Attributes\CoversClass;
373340ecd2SGreg Roach
38202c018bSGreg Roach#[CoversClass(RedirectPedigreePhp::class)]
393340ecd2SGreg Roachclass RedirectPedigreePhpTest extends TestCase
403340ecd2SGreg Roach{
41a26ec5edSGreg Roach    protected static bool $uses_database = true;
42a26ec5edSGreg Roach
433340ecd2SGreg Roach    public function testRedirect(): void
443340ecd2SGreg Roach    {
4562ff2f18SGreg Roach        $tree = $this->createMock(Tree::class);
463340ecd2SGreg Roach        $tree
473340ecd2SGreg Roach            ->method('name')
483340ecd2SGreg Roach            ->willReturn('tree1');
493340ecd2SGreg Roach
5062ff2f18SGreg Roach        $tree_service = $this->createMock(TreeService::class);
513340ecd2SGreg Roach        $tree_service
52*00ef1d3aSGreg Roach            ->expects($this->once())
533340ecd2SGreg Roach            ->method('all')
543340ecd2SGreg Roach            ->willReturn(new Collection(['tree1' => $tree]));
553340ecd2SGreg Roach
5662ff2f18SGreg Roach        $individual = $this->createMock(Individual::class);
573340ecd2SGreg Roach
5862ff2f18SGreg Roach        $individual_factory = $this->createMock(IndividualFactory::class);
593340ecd2SGreg Roach        $individual_factory
60*00ef1d3aSGreg Roach            ->expects($this->once())
613340ecd2SGreg Roach            ->method('make')
623340ecd2SGreg Roach            ->with('X123', $tree)
633340ecd2SGreg Roach            ->willReturn($individual);
643340ecd2SGreg Roach
653340ecd2SGreg Roach        Registry::individualFactory($individual_factory);
663340ecd2SGreg Roach
6762ff2f18SGreg Roach        $module = $this->createMock(PedigreeChartModule::class);
683340ecd2SGreg Roach        $module
69*00ef1d3aSGreg Roach            ->expects($this->once())
703340ecd2SGreg Roach            ->method('chartUrl')
713340ecd2SGreg Roach            ->willReturn('https://www.example.com');
723340ecd2SGreg Roach
7362ff2f18SGreg Roach        $module_service = $this->createMock(ModuleService::class);
743340ecd2SGreg Roach        $module_service
75*00ef1d3aSGreg Roach            ->expects($this->once())
76*00ef1d3aSGreg Roach            ->method('findByComponent')
77*00ef1d3aSGreg Roach            ->with(ModuleChartInterface::class)
783340ecd2SGreg Roach            ->willReturn(new Collection([$module]));
793340ecd2SGreg Roach
803340ecd2SGreg Roach        $handler = new RedirectPedigreePhp($module_service, $tree_service);
813340ecd2SGreg Roach
82*00ef1d3aSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_GET, ['ged' => 'tree1', 'rootid' => 'X123']);
833340ecd2SGreg Roach
843340ecd2SGreg Roach        $response = $handler->handle($request);
853340ecd2SGreg Roach
863340ecd2SGreg Roach        self::assertSame(StatusCodeInterface::STATUS_MOVED_PERMANENTLY, $response->getStatusCode());
873340ecd2SGreg Roach        self::assertSame('https://www.example.com', $response->getHeaderLine('Location'));
883340ecd2SGreg Roach    }
893340ecd2SGreg Roach
903340ecd2SGreg Roach    public function testModuleDisabled(): void
913340ecd2SGreg Roach    {
9262ff2f18SGreg Roach        $tree = $this->createMock(Tree::class);
93*00ef1d3aSGreg Roach        $tree
94*00ef1d3aSGreg Roach            ->method('name')
95*00ef1d3aSGreg Roach            ->willReturn('tree1');
963340ecd2SGreg Roach
9762ff2f18SGreg Roach        $tree_service = $this->createMock(TreeService::class);
983340ecd2SGreg Roach        $tree_service
99*00ef1d3aSGreg Roach            ->expects($this->once())
1003340ecd2SGreg Roach            ->method('all')
101*00ef1d3aSGreg Roach            ->willReturn(new Collection(['tree1' => $tree]));
102*00ef1d3aSGreg Roach
103*00ef1d3aSGreg Roach        $module_service = $this->createMock(ModuleService::class);
104*00ef1d3aSGreg Roach        $module_service
105*00ef1d3aSGreg Roach            ->method('findByComponent')
106*00ef1d3aSGreg Roach            ->with(ModuleChartInterface::class, $tree, new GuestUser())
107*00ef1d3aSGreg Roach            ->willReturn(new Collection());
1083340ecd2SGreg Roach
1093340ecd2SGreg Roach        $handler = new RedirectPedigreePhp($module_service, $tree_service);
1103340ecd2SGreg Roach
111*00ef1d3aSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_GET, ['ged' => 'tree1', 'rootid' => 'X123']);
1123340ecd2SGreg Roach
11315c4f62cSGreg Roach        $this->expectException(HttpGoneException::class);
1143340ecd2SGreg Roach
1153340ecd2SGreg Roach        $handler->handle($request);
1163340ecd2SGreg Roach    }
1173340ecd2SGreg Roach
1183340ecd2SGreg Roach    public function testNoSuchTree(): void
1193340ecd2SGreg Roach    {
12062ff2f18SGreg Roach        $module_service  = $this->createMock(ModuleService::class);
1213340ecd2SGreg Roach
12262ff2f18SGreg Roach        $tree_service = $this->createMock(TreeService::class);
1233340ecd2SGreg Roach        $tree_service
124*00ef1d3aSGreg Roach            ->expects($this->once())
1253340ecd2SGreg Roach            ->method('all')
1263340ecd2SGreg Roach            ->willReturn(new Collection([]));
1273340ecd2SGreg Roach
1283340ecd2SGreg Roach        $handler = new RedirectPedigreePhp($module_service, $tree_service);
1293340ecd2SGreg Roach
130*00ef1d3aSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_GET, ['ged' => 'tree1', 'rootid' => 'X123']);
1313340ecd2SGreg Roach
13215c4f62cSGreg Roach        $this->expectException(HttpGoneException::class);
1333340ecd2SGreg Roach
1343340ecd2SGreg Roach        $handler->handle($request);
1353340ecd2SGreg Roach    }
1363340ecd2SGreg Roach}
137