Skip to content

Commit 05c7175

Browse files
committed
SprintMigrationsTrait.
1 parent 31d8ae0 commit 05c7175

File tree

4 files changed

+98
-1
lines changed

4 files changed

+98
-1
lines changed

composer.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
"require": {
2424
"proklung/phpunit-testing-tools": "^1.0",
2525
"sheerockoff/bitrix-ci": "^20.5",
26+
"andreyryabin/sprint.migration": "^3.28.4",
2627
"ext-mysqli": "*"
28+
},
29+
"extra": {
30+
"installer-paths": {
31+
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/": ["type:bitrix-module"]
32+
}
2733
}
2834
}

readme.MD

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,27 @@
5353
При использовании дампов с боя обычно возникают проблемы с просроченностью лицензии. В таком случае приходится вручную
5454
заменить файл `include.php` в `vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main`.
5555

56+
#### Трэйт SprintMigrationsTrait
57+
58+
Использование миграций модуля [sprint.option](https://github.com/andreyryabin/sprint.migration).
59+
60+
Путь к директории с миграциями указывается в методе `getPathSprintMigrations` теста:
61+
62+
```php
63+
protected function getPathSprintMigrations() : string
64+
{
65+
return __DIR__ . '../../../../../../Tests/sprint_migrations/';
66+
}
67+
```
68+
69+
##### Нюансы
70+
71+
В силу особенностей использования сборки [Bitrix CI](https://github.com/sheerockoff/bitrix-ci) приходится устанавливать модуль хитро - прямо внутрь пакета сборки
72+
(в папку `vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option`) на стадии работы композера. Побочный эффект - если обновится сама сборка,
73+
то модуль миграций улетит в трубу.
74+
75+
Пока так.
76+
5677
#### Трэйт UseMigrationsTrait
5778

5879
Указание запускать миграции перед каждым тестом.

src/Base/BitrixableTestCase.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
namespace Prokl\BitrixTestingTools\Base;
44

5+
use Bitrix\Catalog\Model\Price;
56
use Exception;
67
use Prokl\BitrixTestingTools\Migrations\ArrilotMigratorProcessor;
78
use Prokl\BitrixTestingTools\Migrator;
89
use Prokl\BitrixTestingTools\Helpers\ClassUtils;
910
use Prokl\BitrixTestingTools\Helpers\Database;
1011
use Prokl\BitrixTestingTools\Traits\CustomDumpTrait;
1112
use Prokl\BitrixTestingTools\Traits\ResetDatabaseTrait;
13+
use Prokl\BitrixTestingTools\Traits\SprintMigrationsTrait;
1214
use Prokl\BitrixTestingTools\Traits\UseMigrationsTrait;
1315
use Prokl\TestingTools\Base\BaseTestCase;
1416
use Sheerockoff\BitrixCi\Bootstrap;
@@ -55,13 +57,19 @@ protected function setUp(): void
5557
// Миграции
5658
if ($this->useMigrations()) {
5759
$migrator = new ArrilotMigratorProcessor();
58-
60+
/** @noinspection PhpUndefinedMethodInspection */
5961
$migrator->setMigrationsDir($this->getMigrationsDir())
6062
->init();
6163

6264
$migrator->createMigrationsTable();
6365
$migrator->migrate();
6466
}
67+
68+
// Миграции модуля sprint.option.
69+
if ($this->useSprintMigrations()) {
70+
/** @noinspection PhpUndefinedMethodInspection */
71+
$this->sprintMigration();
72+
}
6573
}
6674

6775
/**
@@ -158,6 +166,16 @@ private function useMigrations() : bool
158166
return $this->hasTrait(UseMigrationsTrait::class);
159167
}
160168

169+
/**
170+
* Использовать ли миграции модуля sprint.option. Признак - трэйт SprintMigrationsTrait.
171+
*
172+
* @return boolean
173+
*/
174+
private function useSprintMigrations() : bool
175+
{
176+
return $this->hasTrait(SprintMigrationsTrait::class);
177+
}
178+
161179
/**
162180
* Имеет ли экземпляр класса тот или иной трэйт.
163181
*
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
namespace Prokl\BitrixTestingTools\Traits;
4+
5+
use Bitrix\Main\ModuleManager;
6+
use CModule;
7+
use Sprint\Migration\Exceptions\MigrationException;
8+
use Sprint\Migration\Installer;
9+
10+
/**
11+
* Trait SprintMigrationsTrait
12+
* Трэйт запуска миграций модуля sprint.migration.
13+
* @package Prokl\BitrixTestingTools\Traits
14+
*/
15+
trait SprintMigrationsTrait
16+
{
17+
/**
18+
* Запуск миграций модуля sprint.option (@see https://github.com/andreyryabin/sprint.migration).
19+
*
20+
* @return boolean
21+
* @throws MigrationException
22+
*/
23+
protected function sprintMigration() : bool
24+
{
25+
if (!ModuleManager::isModuleInstalled('sprint.migration')) {
26+
RegisterModule('sprint.migration');
27+
}
28+
29+
if (CModule::IncludeModule('sprint.migration')) {
30+
(new Installer(
31+
[
32+
'migration_dir' => $this->getPathSprintMigrations(),
33+
'migration_dir_absolute' => true,
34+
]
35+
))->up();
36+
return true;
37+
}
38+
39+
return false;
40+
}
41+
42+
/**
43+
* Путь к миграциям.
44+
*
45+
* @return string
46+
*/
47+
protected function getPathSprintMigrations() : string
48+
{
49+
return __DIR__ . '../../../../../../Tests/sprint_migrations/';
50+
}
51+
52+
}

0 commit comments

Comments
 (0)