Skip to content

Commit 6052d8a

Browse files
committed
Add integration tests
1 parent 4b15923 commit 6052d8a

File tree

6 files changed

+220
-32
lines changed

6 files changed

+220
-32
lines changed

composer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@
3030
}
3131
],
3232
"require": {
33-
"php": "~7.0||~7.1||~7.2||~7.3||~7.4",
34-
"magento/framework": "^101.0.0||^102.0.0||^103.0.0"
33+
"php": "~7.1||~7.2||~7.3||~7.4",
34+
"magento/framework": "^101.0.0||^102.0.0||^103.0.0",
35+
"magento/module-store": "^100.0.2||^101.0",
36+
"magento/module-url-rewrite": "^100.0.2||^101.0.0||^102.0.0"
3537
},
3638
"require-dev": {
3739
"roave/security-advisories": "dev-master",

tests/integration/ExampleTest.php

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
namespace IntegerNet\RewriteMap;
4+
5+
use IntegerNet\RewriteMap\Model\RewriteMapRepository;
6+
use Magento\Store\Api\StoreRepositoryInterface;
7+
use Magento\TestFramework\Helper\Bootstrap;
8+
use Magento\UrlRewrite\Model\OptionProvider;
9+
use PHPUnit\Framework\TestCase;
10+
11+
/**
12+
* @magentoAppIsolation enabled
13+
* @magentoDbIsolation enabled
14+
*/
15+
class RewriteMapRepositoryTest extends TestCase
16+
{
17+
/**
18+
* @var \Magento\Framework\ObjectManagerInterface
19+
*/
20+
private $objectManager;
21+
/**
22+
* @var RewriteMapRepository
23+
*/
24+
private $rewriteMapRepository;
25+
26+
protected function setUp(): void
27+
{
28+
$this->objectManager = Bootstrap::getObjectManager();
29+
$this->rewriteMapRepository = $this->objectManager->get(RewriteMapRepository::class);
30+
}
31+
32+
/**
33+
* @magentoDataFixture Magento/Store/_files/second_store.php
34+
* @test
35+
*/
36+
public function loads_rewrite_map_based_on_magento_url_rewrites()
37+
{
38+
$defaultStoreId = 1;
39+
$anotherStoreId = $this->getSecondStoreIdFromFixtureFile();
40+
(new UrlRewriteFactory())->createMagentoUrlRewrites(
41+
[
42+
[$defaultStoreId, 301, 'request-301-store-1', 'target-301-store-1'],
43+
[$defaultStoreId, 302, 'request-302-store-1', 'target-302-store-1'],
44+
[$anotherStoreId, 301, 'request-301-store-2', 'target-301-store-2'],
45+
[$anotherStoreId, 302, 'request-302-store-2', 'target-302-store-2'],
46+
]
47+
);
48+
49+
$rewriteMap = $this->rewriteMapRepository->getByStoreAndType($defaultStoreId, 301);
50+
$this->assertEquals("/request-301-store-1 /target-301-store-1\n", $rewriteMap->getContent());
51+
52+
$rewriteMap = $this->rewriteMapRepository->getByStoreAndType($defaultStoreId, 302);
53+
$this->assertEquals("/request-302-store-1 /target-302-store-1\n", $rewriteMap->getContent());
54+
55+
$rewriteMap = $this->rewriteMapRepository->getByStoreAndType($anotherStoreId, 301);
56+
$this->assertEquals("/request-301-store-2 /target-301-store-2\n", $rewriteMap->getContent());
57+
58+
$rewriteMap = $this->rewriteMapRepository->getByStoreAndType($anotherStoreId, 302);
59+
$this->assertEquals("/request-302-store-2 /target-302-store-2\n", $rewriteMap->getContent());
60+
}
61+
62+
/**
63+
* @see /dev/tests/integration/testsuite/Magento/Store/_files/second_store.php
64+
* @return int
65+
*/
66+
private function getSecondStoreIdFromFixtureFile(): int
67+
{
68+
return (int) $this->objectManager->get(StoreRepositoryInterface::class)->get('fixture_second_store')->getId();
69+
}
70+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
3+
namespace IntegerNet\RewriteMap;
4+
5+
use IntegerNet\RewriteMap\Model\RewriteMapRepository;
6+
use IntegerNet\RewriteMap\Model\RewriteMapsSavingService;
7+
use Magento\Framework\App\Filesystem\DirectoryList;
8+
use Magento\Framework\Filesystem;
9+
use Magento\Store\Api\StoreRepositoryInterface;
10+
use Magento\TestFramework\Helper\Bootstrap;
11+
use Magento\UrlRewrite\Model\OptionProvider;
12+
use PHPUnit\Framework\TestCase;
13+
14+
/**
15+
* @magentoAppIsolation enabled
16+
* @magentoDbIsolation enabled
17+
*/
18+
class RewriteMapsWriteTest extends TestCase
19+
{
20+
/**
21+
* @var \Magento\Framework\ObjectManagerInterface
22+
*/
23+
private $objectManager;
24+
/**
25+
* @var RewriteMapsSavingService
26+
*/
27+
private $rewriteMapsSavingService;
28+
/**
29+
* @var Filesystem
30+
*/
31+
private $magentoFileSystem;
32+
33+
protected function setUp(): void
34+
{
35+
$this->objectManager = Bootstrap::getObjectManager();
36+
$this->rewriteMapsSavingService = $this->objectManager->get(RewriteMapsSavingService::class);
37+
$this->magentoFileSystem = $this->objectManager->get(Filesystem::class);
38+
}
39+
40+
protected function tearDown(): void
41+
{
42+
$this->removeRewriteMapDir();
43+
}
44+
45+
/**
46+
* @magentoDataFixture Magento/Store/_files/second_store.php
47+
* @test
48+
*/
49+
public function saves_rewrite_maps_to_var_directory()
50+
{
51+
$defaultStoreId = 1;
52+
$anotherStoreId = $this->getSecondStoreIdFromFixtureFile();
53+
(new UrlRewriteFactory())->createMagentoUrlRewrites(
54+
[
55+
[$defaultStoreId, 301, 'request-301-store-1', 'target-301-store-1'],
56+
[$defaultStoreId, 302, 'request-302-store-1', 'target-302-store-1'],
57+
[$anotherStoreId, 301, 'request-301-store-2', 'target-301-store-2'],
58+
[$anotherStoreId, 302, 'request-302-store-2', 'target-302-store-2'],
59+
]
60+
);
61+
62+
$this->rewriteMapsSavingService->saveRewriteMapsForAllStores();
63+
64+
$this->assertFilesExistInVar(
65+
[
66+
"rewrite_map/rewrite-map-301-store-$defaultStoreId.txt",
67+
"rewrite_map/rewrite-map-302-store-$defaultStoreId.txt",
68+
"rewrite_map/rewrite-map-301-store-$anotherStoreId.txt",
69+
"rewrite_map/rewrite-map-302-store-$anotherStoreId.txt",
70+
]
71+
);
72+
}
73+
74+
/**
75+
* @return int
76+
* @see /dev/tests/integration/testsuite/Magento/Store/_files/second_store.php
77+
*/
78+
private function getSecondStoreIdFromFixtureFile(): int
79+
{
80+
return (int)$this->objectManager->get(StoreRepositoryInterface::class)->get('fixture_second_store')->getId();
81+
}
82+
83+
private function removeRewriteMapDir()
84+
{
85+
$varDirectory = $this->magentoFileSystem->getDirectoryWrite(DirectoryList::VAR_DIR);
86+
$varDirectory->delete('rewrite_map');
87+
}
88+
89+
private function assertFilesExistInVar(array $filenames)
90+
{
91+
$varDirectory = $this->magentoFileSystem->getDirectoryRead(DirectoryList::VAR_DIR);
92+
$this->assertEquals(
93+
$filenames,
94+
array_filter($filenames, [$varDirectory, 'isFile']),
95+
'Files should be created in var'
96+
);
97+
}
98+
}

tests/src/ExampleTestDataBuilder.php

Lines changed: 0 additions & 12 deletions
This file was deleted.

tests/src/UrlRewriteFactory.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace IntegerNet\RewriteMap;
5+
6+
use Magento\TestFramework\Helper\Bootstrap;
7+
use Magento\UrlRewrite\Model\UrlPersistInterface;
8+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
9+
10+
class UrlRewriteFactory
11+
{
12+
/**
13+
* @var \Magento\Framework\ObjectManagerInterface
14+
*/
15+
private $objectManager;
16+
17+
public function __construct()
18+
{
19+
$this->objectManager = Bootstrap::getObjectManager();
20+
}
21+
22+
/**
23+
* @param array $rewrites [int storeId, int redirectType, string requestPath, string targetPath]
24+
* @throws \Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException
25+
*/
26+
public function createMagentoUrlRewrites(array $rewrites): void
27+
{
28+
/** @var UrlPersistInterface $urlPersist */
29+
$urlPersist = $this->objectManager->get(UrlPersistInterface::class);
30+
$urlRewrites = [];
31+
foreach ($rewrites as $rewrite) {
32+
$urlRewrites[] = $this->objectManager->create(
33+
UrlRewrite::class,
34+
[
35+
'data' => [
36+
UrlRewrite::STORE_ID => $rewrite[0],
37+
UrlRewrite::ENTITY_TYPE => 'custom',
38+
UrlRewrite::REDIRECT_TYPE => $rewrite[1],
39+
UrlRewrite::REQUEST_PATH => $rewrite[2],
40+
UrlRewrite::TARGET_PATH => $rewrite[3],
41+
],
42+
]
43+
);
44+
}
45+
$urlPersist->replace($urlRewrites);
46+
}
47+
48+
}

0 commit comments

Comments
 (0)