xref: /webtrees/tests/app/Http/RequestHandlers/UpgradeWizardStepTest.php (revision 6fd7250f6c16d6ac1ede6f02b0e2892379acc193)
14b3ef6caSGreg Roach<?php
24b3ef6caSGreg Roach
34b3ef6caSGreg Roach/**
44b3ef6caSGreg Roach * webtrees: online genealogy
54b3ef6caSGreg Roach * Copyright (C) 2021 webtrees development team
64b3ef6caSGreg Roach * This program is free software: you can redistribute it and/or modify
74b3ef6caSGreg Roach * it under the terms of the GNU General Public License as published by
84b3ef6caSGreg Roach * the Free Software Foundation, either version 3 of the License, or
94b3ef6caSGreg Roach * (at your option) any later version.
104b3ef6caSGreg Roach * This program is distributed in the hope that it will be useful,
114b3ef6caSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
124b3ef6caSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
134b3ef6caSGreg Roach * GNU General Public License for more details.
144b3ef6caSGreg Roach * You should have received a copy of the GNU General Public License
154b3ef6caSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
164b3ef6caSGreg Roach */
174b3ef6caSGreg Roach
184b3ef6caSGreg Roachdeclare(strict_types=1);
194b3ef6caSGreg Roach
204b3ef6caSGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers;
214b3ef6caSGreg Roach
224b3ef6caSGreg Roachuse Exception;
234b3ef6caSGreg Roachuse Fig\Http\Message\RequestMethodInterface;
244b3ef6caSGreg Roachuse Fig\Http\Message\StatusCodeInterface;
254b3ef6caSGreg Roachuse Fisharebest\Webtrees\Auth;
264b3ef6caSGreg Roachuse Fisharebest\Webtrees\Exceptions\HttpServerErrorException;
274b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\GedcomExportService;
284b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\TimeoutService;
294b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\TreeService;
304b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\UpgradeService;
314b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\UserService;
324b3ef6caSGreg Roachuse Fisharebest\Webtrees\TestCase;
334b3ef6caSGreg Roachuse Illuminate\Support\Collection;
344b3ef6caSGreg Roach
354b3ef6caSGreg Roach/**
364b3ef6caSGreg Roach * Test UpgradeController class.
374b3ef6caSGreg Roach *
384b3ef6caSGreg Roach * @covers \Fisharebest\Webtrees\Http\RequestHandlers\UpgradeWizardStep
394b3ef6caSGreg Roach */
404b3ef6caSGreg Roachclass UpgradeWizardStepTest extends TestCase
414b3ef6caSGreg Roach{
424b3ef6caSGreg Roach    protected static $uses_database = true;
434b3ef6caSGreg Roach
444b3ef6caSGreg Roach    /**
454b3ef6caSGreg Roach     * @return void
464b3ef6caSGreg Roach     */
474b3ef6caSGreg Roach    public function testIgnoreStepInvalid(): void
484b3ef6caSGreg Roach    {
494b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
504b3ef6caSGreg Roach            new GedcomExportService(),
514b3ef6caSGreg Roach            new TreeService(),
524b3ef6caSGreg Roach            new UpgradeService(new TimeoutService())
534b3ef6caSGreg Roach        );
544b3ef6caSGreg Roach
554b3ef6caSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Invalid']);
564b3ef6caSGreg Roach
574b3ef6caSGreg Roach        $response = $handler->handle($request);
584b3ef6caSGreg Roach
594b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_NO_CONTENT, $response->getStatusCode());
604b3ef6caSGreg Roach    }
614b3ef6caSGreg Roach
624b3ef6caSGreg Roach    /**
634b3ef6caSGreg Roach     * @return void
644b3ef6caSGreg Roach     */
654b3ef6caSGreg Roach    public function testStepCheckOK(): void
664b3ef6caSGreg Roach    {
674b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
684b3ef6caSGreg Roach        $mock_upgrade_service->method('latestVersion')->willReturn('999.999.999');
694b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
704b3ef6caSGreg Roach            new GedcomExportService(),
714b3ef6caSGreg Roach            new TreeService(),
724b3ef6caSGreg Roach            $mock_upgrade_service
734b3ef6caSGreg Roach        );
744b3ef6caSGreg Roach
754b3ef6caSGreg Roach        $request  = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Check']);
764b3ef6caSGreg Roach        $response = $handler->handle($request);
774b3ef6caSGreg Roach
784b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
794b3ef6caSGreg Roach    }
804b3ef6caSGreg Roach
814b3ef6caSGreg Roach    /**
824b3ef6caSGreg Roach     * @return void
834b3ef6caSGreg Roach     */
844b3ef6caSGreg Roach    public function testStepCheckUnavailable(): void
854b3ef6caSGreg Roach    {
864b3ef6caSGreg Roach        $this->expectException(HttpServerErrorException::class);
874b3ef6caSGreg Roach
884b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
894b3ef6caSGreg Roach        $mock_upgrade_service->method('latestVersion')->willReturn('');
904b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
914b3ef6caSGreg Roach            new GedcomExportService(),
924b3ef6caSGreg Roach            new TreeService(),
934b3ef6caSGreg Roach            $mock_upgrade_service
944b3ef6caSGreg Roach        );
954b3ef6caSGreg Roach
964b3ef6caSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Check']);
974b3ef6caSGreg Roach        $handler->handle($request);
984b3ef6caSGreg Roach    }
994b3ef6caSGreg Roach
1004b3ef6caSGreg Roach    /**
1014b3ef6caSGreg Roach     * @return void
1024b3ef6caSGreg Roach     */
1034b3ef6caSGreg Roach    public function testStepCheckFail(): void
1044b3ef6caSGreg Roach    {
1054b3ef6caSGreg Roach        $this->expectException(HttpServerErrorException::class);
1064b3ef6caSGreg Roach
1074b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
1084b3ef6caSGreg Roach        $mock_upgrade_service->method('latestVersion')->willReturn('0.0.0');
1094b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
1104b3ef6caSGreg Roach            new GedcomExportService(),
1114b3ef6caSGreg Roach            new TreeService(),
1124b3ef6caSGreg Roach            $mock_upgrade_service
1134b3ef6caSGreg Roach        );
1144b3ef6caSGreg Roach
1154b3ef6caSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Check']);
1164b3ef6caSGreg Roach        $handler->handle($request);
1174b3ef6caSGreg Roach    }
1184b3ef6caSGreg Roach
1194b3ef6caSGreg Roach    /**
1204b3ef6caSGreg Roach     * @return void
1214b3ef6caSGreg Roach     */
1224b3ef6caSGreg Roach    public function testStepPrepare(): void
1234b3ef6caSGreg Roach    {
1244b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
1254b3ef6caSGreg Roach            new GedcomExportService(),
1264b3ef6caSGreg Roach            new TreeService(),
1274b3ef6caSGreg Roach            new UpgradeService(new TimeoutService())
1284b3ef6caSGreg Roach        );
1294b3ef6caSGreg Roach
1304b3ef6caSGreg Roach        $request  = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Prepare']);
1314b3ef6caSGreg Roach        $response = $handler->handle($request);
1324b3ef6caSGreg Roach
1334b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
1344b3ef6caSGreg Roach    }
1354b3ef6caSGreg Roach
1364b3ef6caSGreg Roach    /**
1374b3ef6caSGreg Roach     * @return void
1384b3ef6caSGreg Roach     */
1394b3ef6caSGreg Roach    public function testStepPending(): void
1404b3ef6caSGreg Roach    {
1414b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
1424b3ef6caSGreg Roach            new GedcomExportService(),
1434b3ef6caSGreg Roach            new TreeService(),
1444b3ef6caSGreg Roach            new UpgradeService(new TimeoutService())
1454b3ef6caSGreg Roach        );
1464b3ef6caSGreg Roach
1474b3ef6caSGreg Roach        $request  = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Pending']);
1484b3ef6caSGreg Roach        $response = $handler->handle($request);
1494b3ef6caSGreg Roach
1504b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
1514b3ef6caSGreg Roach    }
1524b3ef6caSGreg Roach
1534b3ef6caSGreg Roach    /**
1544b3ef6caSGreg Roach     * @return void
1554b3ef6caSGreg Roach     */
1564b3ef6caSGreg Roach    public function testStepPendingExist(): void
1574b3ef6caSGreg Roach    {
1584b3ef6caSGreg Roach        $tree_service = new TreeService();
1594b3ef6caSGreg Roach        $tree         = $tree_service->create('name', 'title');
1604b3ef6caSGreg Roach        $user         = (new UserService())->create('user', 'name', 'email', 'password');
1614b3ef6caSGreg Roach
1624b3ef6caSGreg Roach        Auth::login($user);
1634b3ef6caSGreg Roach        $tree->createIndividual("0 @@ INDI\n1 NAME Joe Bloggs");
1644b3ef6caSGreg Roach
1654b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
1664b3ef6caSGreg Roach            new GedcomExportService(),
1674b3ef6caSGreg Roach            new TreeService(),
1684b3ef6caSGreg Roach            new UpgradeService(new TimeoutService())
1694b3ef6caSGreg Roach        );
1704b3ef6caSGreg Roach
1714b3ef6caSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Pending']);
172*6fd7250fSGreg Roach        $response = $handler->handle($request);
173*6fd7250fSGreg Roach
174*6fd7250fSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR, $response->getStatusCode());
1754b3ef6caSGreg Roach    }
1764b3ef6caSGreg Roach
1774b3ef6caSGreg Roach    /**
1784b3ef6caSGreg Roach     * @return void
1794b3ef6caSGreg Roach     */
1804b3ef6caSGreg Roach    public function testStepExport(): void
1814b3ef6caSGreg Roach    {
1824b3ef6caSGreg Roach        $tree            = $this->importTree('demo.ged');
1834b3ef6caSGreg Roach        $all_trees       = Collection::make([$tree->name() => $tree]);
1844b3ef6caSGreg Roach        $tree_service    = $this->createMock(TreeService::class);
1854b3ef6caSGreg Roach        $tree_service->method('all')->willReturn($all_trees);
1864b3ef6caSGreg Roach
1874b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
1884b3ef6caSGreg Roach            new GedcomExportService(),
1894b3ef6caSGreg Roach            $tree_service,
1904b3ef6caSGreg Roach            new UpgradeService(new TimeoutService())
1914b3ef6caSGreg Roach        );
1924b3ef6caSGreg Roach
1934b3ef6caSGreg Roach        $request  = self::createRequest()->withQueryParams(['step' => 'Export', 'tree' => $tree->name()]);
1944b3ef6caSGreg Roach        $response = $handler->handle($request);
1954b3ef6caSGreg Roach
1964b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
1974b3ef6caSGreg Roach
1984b3ef6caSGreg Roach        // Now overwrite the file we just created
1994b3ef6caSGreg Roach        $response = $handler->handle($request);
2004b3ef6caSGreg Roach
2014b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
2024b3ef6caSGreg Roach    }
2034b3ef6caSGreg Roach
2044b3ef6caSGreg Roach    /**
2054b3ef6caSGreg Roach     * @return void
2064b3ef6caSGreg Roach     */
2074b3ef6caSGreg Roach    public function testStepDownloadFails(): void
2084b3ef6caSGreg Roach    {
2094b3ef6caSGreg Roach        $this->expectException(HttpServerErrorException::class);
2104b3ef6caSGreg Roach
2114b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
2124b3ef6caSGreg Roach        $mock_upgrade_service->method('downloadFile')->will(self::throwException(new Exception()));
2134b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
2144b3ef6caSGreg Roach            new GedcomExportService(),
2154b3ef6caSGreg Roach            new TreeService(),
2164b3ef6caSGreg Roach            $mock_upgrade_service
2174b3ef6caSGreg Roach        );
2184b3ef6caSGreg Roach
2194b3ef6caSGreg Roach        $request = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Download']);
2204b3ef6caSGreg Roach        $handler->handle($request);
2214b3ef6caSGreg Roach    }
2224b3ef6caSGreg Roach
2234b3ef6caSGreg Roach    /**
2244b3ef6caSGreg Roach     * @return void
2254b3ef6caSGreg Roach     */
2264b3ef6caSGreg Roach    public function testStepDownload(): void
2274b3ef6caSGreg Roach    {
2284b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
2294b3ef6caSGreg Roach        $mock_upgrade_service->method('downloadFile')->willReturn(123456);
2304b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
2314b3ef6caSGreg Roach            new GedcomExportService(),
2324b3ef6caSGreg Roach            new TreeService(),
2334b3ef6caSGreg Roach            $mock_upgrade_service
2344b3ef6caSGreg Roach        );
2354b3ef6caSGreg Roach
2364b3ef6caSGreg Roach        $request  = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Download']);
2374b3ef6caSGreg Roach        $response = $handler->handle($request);
2384b3ef6caSGreg Roach
2394b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
2404b3ef6caSGreg Roach    }
2414b3ef6caSGreg Roach
2424b3ef6caSGreg Roach    /**
2434b3ef6caSGreg Roach     * @return void
2444b3ef6caSGreg Roach     */
2454b3ef6caSGreg Roach    public function testStepUnzip(): void
2464b3ef6caSGreg Roach    {
2474b3ef6caSGreg Roach        $mock_upgrade_service = $this->createMock(UpgradeService::class);
2484b3ef6caSGreg Roach        $mock_upgrade_service->method('webtreesZipContents')->willReturn(new Collection());
2494b3ef6caSGreg Roach        $handler = new UpgradeWizardStep(
2504b3ef6caSGreg Roach            new GedcomExportService(),
2514b3ef6caSGreg Roach            new TreeService(),
2524b3ef6caSGreg Roach            $mock_upgrade_service
2534b3ef6caSGreg Roach        );
2544b3ef6caSGreg Roach
2554b3ef6caSGreg Roach        $request  = self::createRequest(RequestMethodInterface::METHOD_POST, ['step' => 'Unzip']);
2564b3ef6caSGreg Roach        $response = $handler->handle($request);
2574b3ef6caSGreg Roach
2584b3ef6caSGreg Roach        self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
2594b3ef6caSGreg Roach    }
2604b3ef6caSGreg Roach}
261