Skip to content

test(modx): схема live-сьюта из Phinx-миграций - #698

Open
Ibochkarev wants to merge 3 commits into
betafrom
test/issue-695-phinx-live-schema
Open

test(modx): схема live-сьюта из Phinx-миграций#698
Ibochkarev wants to merge 3 commits into
betafrom
test/issue-695-phinx-live-schema

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Live-сьют testbench создаёт схему через полный прогон Phinx (как resolver_02_migrations.php), а не через PackageDefinition::tables(). Три миграции с bootstrap MODX принимают инжектированный $modx (migrations/_modx.php + $GLOBALS['modx'] в phinx.php).

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите): tech-debt live-тестов / coverage миграций

Связанные Issues

Closes #695

Как это было протестировано?

cd core/components/minishop3
php -l migrations/_modx.php \
  migrations/20251020000000_initial_schema.php \
  migrations/20260518120000_create_option_groups_and_migrate.php \
  migrations/20260522120000_repair_grid_fields_if_missing.php \
  phinx.php \
  tests/Modx/Support/ExtraTestCase.php \
  tests/Modx/Support/PhinxSchemaBootstrap.php \
  tests/Modx/PhinxSchemaLiveTest.php
# exit 0

php tests/MigrationSelfContainedTest.php   # OK, exit 0
php tests/PhinxMigrationTablePrefixTest.php # OK, exit 0

composer test:modx локально не гонялся (нет доступа к MySQL testbench). Ожидается зелёный job modx-testbench в CI.

  • Ручное тестирование
  • Автоматические тесты (composer ci:php / smoke; live — CI test:modx)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: ветка test/issue-695-phinx-live-schema
  • MODX: testbench 3.1 / 3.2 (CI matrix)
  • PHP: 8.2+

Скриншоты (если применимо)

До После
n/a n/a

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуется
  • PHPStan проходит без новых ошибок (composer stan / CI job PHPStan) — затронут в основном tests/Modx + миграции
  • ESLint проходит без ошибок (npm run lint:ci для Vue) — не требуется
  • Обновлён CHANGELOG.md (для значимых изменений) — не трогаем вне релиза

Дополнительные заметки

Способ запуска в testbench (AC): PhinxSchemaBootstrap::ensure() до parent::setUp() — migrate (idempotent) + recapture snapshot + sync table_count через SchemaInventory::countTablesWithPrefix().

Выпущенные миграции: меняется только bootstrap (_modx.php), не схема/данные. На уже применённых сайтах up() не повторится. Нужна ручная проверка чистой установки на тестовом сайте (AC human gate).

Вне скоупа: upgrade-path с дампом старого релиза; статическая сверка schema.xml ↔ карта.

Replace PackageDefinition::tables() with a once-per-process Phinx migrate
and snapshot recapture so testbench exercises the same path as install
resolvers (#695).
@Ibochkarev Ibochkarev added priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt labels Sep 11, 2026
xPDO resolves metadata as {path}Model/metadata.mysql.php when the
namespacePrefix is MiniShop3\, so the package path must be .../src/
(same as ExtraTestCase), not .../src/Model/. Also fix product-field FK
in persist tests and compare schema against static mysql maps.
MySQL 8 hides cross-connection DDL from Phinx hasTable() while the
migration transaction is open; verify via modx PDO and refresh the
Phinx transaction before FK checks. Reset ExtraFields cache/map between
live tests so ExtraFieldMapTest does not break later msVendor asserts.
@Ibochkarev
Ibochkarev requested a review from biz87 September 11, 2026 02:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Live-тесты: схема из Phinx-миграций вместо карты xPDO

1 participant