Skip to content

Commit

Permalink
19-03-2024г. - Unit тесты для UrlComponent
Browse files Browse the repository at this point in the history
  • Loading branch information
PC-Principal committed Mar 19, 2024
1 parent 09de8cb commit 56e0a81
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 2 deletions.
2 changes: 1 addition & 1 deletion components/UrlComponent.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public function createUrl($manager, $route, $params)
/** Возвращаем путь до детальной страницы */
return 'keys/' . $route;

} elseif (News::find()->where([News::ATTR_URL => $route])->One()){ /** Если смогли найти по урлу - Новость */
} elseif (News::find()->where([News::ATTR_URL => $route])->One()) { /** Если смогли найти по урлу - Новость */

/** Возвращаем путь до детальной страницы */
return 'news/' . $route;
Expand Down
2 changes: 1 addition & 1 deletion tests/_data/articles.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
],
[
'title' => 'Что продают торговцы EFT на разных уровнях репутации.',
'url' => 'torgovci-reputaciya',
'url' => 'torgovci-reputaciya-art-item',
'preview' => null,
'content' => '<p><span style="font-size:18px"><strong>Информация из штаба ЧВК</strong></span></p><p><span style="font-size:16px">Как понять, какой из корпусов западаный, а какой восточный?&nbsp;Эта информация особенно необходима при прохождении квестов <a href="https://wiki-tarkov.ru/quests-of-traders/mirotvorec-quests" target="_blank">Миротворца</a>.</span><br />&nbsp</p><p>&nbsp;</p><p><span style="font-size:16px">Система игры подразумевает определенное&nbsp;направление сторон света, и на некотором примере, мы объясним вам, какое крыло санатория восточное (правое), а какой западное (левое). Именно такая система обозначений корпусов используется в игре.&nbsp;</span></p><p><span style="font-size:16px"><img alt="" class="image-link" src="/img/upload/info/korpusa_sanatorya.png" style="float:left; margin:5px 15px; width:40%" />Всё на самом деле очень просто. Все вы наверняка видели вертолётную площадку с вертолётом на ней, так эта площадка&nbsp;и станет нашем центром для более удобного определения направлений. </span></p><p><span style="font-size:16px">Итак,&nbsp;мы находимся у вертолёта, смотря на центральный корпус санатория &quot;Лазурный берег&quot;. Если взять <span style="color:#0000FF"><strong>центральный корпус</strong></span>, как направление на <span style="color:#0000FF"><strong>север</strong></span>, то, соответственно, вертолёт будет центром, а <span style="color:#FF0000"><strong>гидроэлектростанция</strong></span> позади вертолёта - будет направлением на <strong><span style="color:#FF0000">юг</span><span style="color:#0000CD">. </span></strong>Тогда получется, что <span style="color:#00cc00"><strong>левый корпус</strong> </span>от нас - <span style="color:#00cc00"><strong>запад</strong></span>,&nbsp;а <strong><span style="color:#FF8C00">правый корпус</span></strong> - <span style="color:#FF8C00"><strong>восток</strong></span>.</span></p><p><span style="font-size:16px">Именно такая система обозначения корпусов используется в квестах у&nbsp;<a href="https://wiki-tarkov.ru/quests-of-traders/mirotvorec-quests" target="_blank">Миротворца</a>, и в игре в целом. Эта система избавит вас от недопониманий, поможет вам сосредоточиться на других задачах в игре Escape from Tarkov, ведь больше не придётся постоянно вспоминать какой из корпусов западный, а какой правый. Почему используется именно такое обозначение, ведь официальная карта расположена совсем по-другому?&nbsp;Судя по всему, корпуса названы так в связи с тем, что центральный вход к санаторию находится со стороны вертолётной площадки, именно от центрального входа зависят внутриигровые направления корпусов.</span></p>',
'enabled' => 1,
Expand Down
125 changes: 125 additions & 0 deletions tests/unit/components/UrlTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php
/**
* Created by PhpStorm.
* User: PC_Principal
* Date: 19.03.2024
* Time: 14:48
*/

namespace app\tests\components;

use app\components\UrlComponent;
use Codeception\Test\Unit;
use tests\_support\FixturesCollection;
use yii\web\UrlManager;
use yii\web\Request;
use UnitTester;

/**
* Тестирование Url компонента
*
* Class UrlTest
* @package app\tests\components
*/
class UrlTest extends Unit
{
/** @var UnitTester - Объект класса для тестирования */
protected UnitTester $tester;

/** @var UrlManager - Класс урл менеджера */
protected UrlManager $urlManager;

/** @var UrlComponent - Компонент урл-менеджера */
protected UrlComponent $urlComponent;

/**
* Действия выполняемые перед каждым тестом
*
* @return void
*/
protected function _before()
{
/** Сетапим урл компонент свойству класса */
$this->urlComponent = new UrlComponent();

/** Сетапим объект урл менеджера в переменную */
$this->urlManager = new UrlManager();

/** Грузим фикстуры перед каждым тестом */
$this->tester->haveFixtures(FixturesCollection::getCrudOnly());
}

/**
* Проверяем что регулярные выражения по парсингу урла работают корректно
*
* @return void
* @throws \yii\base\InvalidConfigException
*/
public function testParseRequest()
{
/** Тестируем что попали в кейс обработки детальных ключей */
$parsedRequestKeys = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'keys/some-key-id']));
$this->assertEquals(['site/doorkeysdetail', ['id' => 'some-key-id']], $parsedRequestKeys);

/** Тестируем что попали в кейс обработки детальных новостей */
$parsedRequestNews = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'news/some-news-id']));
$this->assertEquals(['site/newsdetail', ['id' => 'some-news-id']], $parsedRequestNews);

/** Тестируем что попали в кейс обработки детальных статей */
$parsedRequestArticles = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'articles/some-article-url']));
$this->assertEquals(['site/articledetail', ['url' => 'some-article-url']], $parsedRequestArticles);

/** Тестируем что попали в кейс обработки детальных торговцев */
$parsedRequestTraders = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'traders/some-trader-id']));
$this->assertEquals(['trader/tradersdetail', ['id' => 'some-trader-id']], $parsedRequestTraders);

/** Тестируем что попали в кейс обработки детальных умений */
$parsedRequestSkillsDetail = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'skills/some-skill-category/some-skill-id.html']));
$this->assertEquals(['skills/skillsdetail', ['url' => 'some-skill-id']], $parsedRequestSkillsDetail);

/** Тестируем что попали в кейс обработки категорий скилов */
$parsedRequestSkillsCategory = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'skills/some-skill-category']));
$this->assertEquals(['skills/skillscategory', ['name' => 'some-skill-category']], $parsedRequestSkillsCategory);

/** Тестируем что попали в кейс обработки детальных предметов справочника лута */
$parsedRequestLootDetail = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'loot/some-loot-id.html']));
$this->assertEquals(['item/detailloot', ['item' => 'some-loot-id']], $parsedRequestLootDetail);

/** Тестируем что попали в кейс обработки категорий справочника лута */
$parsedRequestLootCategory = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'loot/some-category']));
$this->assertEquals(['loot/category', ['name' => 'some-category']], $parsedRequestLootCategory);

/** Тестируем что не попали не в один из кейсов */
$parsedRequestLootCategory = $this->urlComponent->parseRequest($this->urlManager, new Request(['pathInfo' => 'somecontroller/unexists']));
$this->assertFalse($parsedRequestLootCategory);
}

/**
* Проверяем что при наличии определенного урла, он корректно создастся
* Тут используются фикстуры для данных из БД
*
* @return void
*/
public function testCreateUrl()
{
/** Проверяем что формируем корректный урл до детальной страницы ключей */
$createUrlForDoorkeys = $this->urlComponent->createUrl($this->urlManager, 'zb-014', []);
$this->assertEquals('keys/zb-014', $createUrlForDoorkeys);

/** Проверяем что формируем корректный урл до детальной страницы новостей */
$createUrlForNews = $this->urlComponent->createUrl($this->urlManager, 'sanatoriy-korpusa', []);
$this->assertEquals('news/sanatoriy-korpusa', $createUrlForNews);

/** Проверяем что формируем корректный урл до детальной страницы статей */
$createUrlForArticles = $this->urlComponent->createUrl($this->urlManager, 'torgovci-reputaciya-art-item', []);
$this->assertEquals('articles/torgovci-reputaciya-art-item', $createUrlForArticles);

/** Проверяем что формируем корректный урл до детальной страницы торговца */
$createUrlForTraders = $this->urlComponent->createUrl($this->urlManager, 'prapor', []);
$this->assertEquals('traders/prapor', $createUrlForTraders);

/** Проверяем что возвращаем false, если не один урл не был корректно сформирован */
$createUrlForNonExistentRoute = $this->urlComponent->createUrl($this->urlManager, 'some-non-existent-route', []);
$this->assertFalse($createUrlForNonExistentRoute);
}
}

0 comments on commit 56e0a81

Please sign in to comment.