From 0430551830ffbcc609d02b1e6b88655b1506c0b8 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Tue, 24 Sep 2024 19:56:41 +0530 Subject: [PATCH] Fix this issue and failing tests --- src/lib/migrations/BaseMigrationBuilder.php | 2 +- ...m200000_000002_create_table_posts2tags.php | 4 +- ...m200000_000002_create_table_posts2tags.php | 4 +- ...m200000_000002_create_table_posts2tags.php | 4 +- .../index.php | 14 +++++++ .../index.yml | 38 +++++++++++++++++++ .../m200000_000000_create_table_documents.php | 19 ++++++++++ .../m200000_000001_create_table_labels.php | 19 ++++++++++ ...0_000002_create_table_documents2labels.php | 26 +++++++++++++ ...m200000_000004_create_table_posts2tags.php | 4 +- tests/unit/IssueFixTest.php | 14 +++++++ 11 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.php create mode 100644 tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.yml create mode 100644 tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000000_create_table_documents.php create mode 100644 tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000001_create_table_labels.php create mode 100644 tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000002_create_table_documents2labels.php diff --git a/src/lib/migrations/BaseMigrationBuilder.php b/src/lib/migrations/BaseMigrationBuilder.php index d4c49c21..874230fc 100644 --- a/src/lib/migrations/BaseMigrationBuilder.php +++ b/src/lib/migrations/BaseMigrationBuilder.php @@ -101,7 +101,7 @@ public function buildJunction(ManyToManyRelation $relation):MigrationModel continue; } $this->migration - ->addUpCode($this->recordBuilder->addFk($fkName, $tableAlias, $fkCol, $refTable, $refCol)) + ->addUpCode($this->recordBuilder->addFk($fkName, $tableAlias, $fkCol, $refTable, $refCol, 'CASCADE')) ->addDownCode($this->recordBuilder->dropFk($fkName, $tableAlias)); $this->migration->dependencies[] = $refTable; } diff --git a/tests/specs/blog_v2/migrations_maria_db/m200000_000002_create_table_posts2tags.php b/tests/specs/blog_v2/migrations_maria_db/m200000_000002_create_table_posts2tags.php index 2e959d10..2a99ba10 100644 --- a/tests/specs/blog_v2/migrations_maria_db/m200000_000002_create_table_posts2tags.php +++ b/tests/specs/blog_v2/migrations_maria_db/m200000_000002_create_table_posts2tags.php @@ -12,8 +12,8 @@ public function up() 'tag_id' => $this->bigInteger()->notNull(), ]); $this->addPrimaryKey('pk_post_id_tag_id', '{{%posts2tags}}', 'post_id,tag_id'); - $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id'); - $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id'); + $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id', 'CASCADE'); + $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id', 'CASCADE'); } public function down() diff --git a/tests/specs/blog_v2/migrations_mysql_db/m200000_000002_create_table_posts2tags.php b/tests/specs/blog_v2/migrations_mysql_db/m200000_000002_create_table_posts2tags.php index 2e959d10..2a99ba10 100644 --- a/tests/specs/blog_v2/migrations_mysql_db/m200000_000002_create_table_posts2tags.php +++ b/tests/specs/blog_v2/migrations_mysql_db/m200000_000002_create_table_posts2tags.php @@ -12,8 +12,8 @@ public function up() 'tag_id' => $this->bigInteger()->notNull(), ]); $this->addPrimaryKey('pk_post_id_tag_id', '{{%posts2tags}}', 'post_id,tag_id'); - $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id'); - $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id'); + $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id', 'CASCADE'); + $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id', 'CASCADE'); } public function down() diff --git a/tests/specs/blog_v2/migrations_pgsql_db/m200000_000002_create_table_posts2tags.php b/tests/specs/blog_v2/migrations_pgsql_db/m200000_000002_create_table_posts2tags.php index d518ff32..e92fc36c 100644 --- a/tests/specs/blog_v2/migrations_pgsql_db/m200000_000002_create_table_posts2tags.php +++ b/tests/specs/blog_v2/migrations_pgsql_db/m200000_000002_create_table_posts2tags.php @@ -12,8 +12,8 @@ public function safeUp() 'tag_id' => $this->bigInteger()->notNull(), ]); $this->addPrimaryKey('pk_post_id_tag_id', '{{%posts2tags}}', 'post_id,tag_id'); - $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id'); - $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id'); + $this->addForeignKey('fk_posts2tags_post_id_v2_posts_id', '{{%posts2tags}}', 'post_id', '{{%v2_posts}}', 'id', 'CASCADE'); + $this->addForeignKey('fk_posts2tags_tag_id_v2_tags_id', '{{%posts2tags}}', 'tag_id', '{{%v2_tags}}', 'id', 'CASCADE'); } public function safeDown() diff --git a/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.php b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.php new file mode 100644 index 00000000..758c13f4 --- /dev/null +++ b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.php @@ -0,0 +1,14 @@ + '@specs/issue_fix/53_bug_inversed_reference_require_cascade/index.yml', + 'generateUrls' => false, + 'generateModels' => false, + 'excludeModels' => [ + 'Error', + ], + 'generateControllers' => false, + 'generateMigrations' => true, + 'generateModelFaker' => false, // `generateModels` must be `true` in order to use `generateModelFaker` as `true` +]; + diff --git a/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.yml b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.yml new file mode 100644 index 00000000..7676ad03 --- /dev/null +++ b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/index.yml @@ -0,0 +1,38 @@ +openapi: 3.0.3 + +info: + title: '53_bug_inversed_reference_require_cascade' + version: 1.0.0 + +components: + schemas: + Document: + title: Document + properties: + id: + type: integer + labels: + type: array + readOnly: true + description: Inversed reference for detect junction table documents2labels + items: + $ref: '#/components/schemas/Label' + + Label: + title: Label + properties: + id: + type: integer + documents: + type: array + readOnly: true + description: Inversed reference for detect junction table documents2labels + items: + $ref: '#/components/schemas/Document' + +paths: + '/': + get: + responses: + '200': + description: OK diff --git a/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000000_create_table_documents.php b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000000_create_table_documents.php new file mode 100644 index 00000000..123e8456 --- /dev/null +++ b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000000_create_table_documents.php @@ -0,0 +1,19 @@ +createTable('{{%documents}}', [ + 'id' => $this->primaryKey(), + ]); + } + + public function down() + { + $this->dropTable('{{%documents}}'); + } +} diff --git a/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000001_create_table_labels.php b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000001_create_table_labels.php new file mode 100644 index 00000000..80b6c53d --- /dev/null +++ b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000001_create_table_labels.php @@ -0,0 +1,19 @@ +createTable('{{%labels}}', [ + 'id' => $this->primaryKey(), + ]); + } + + public function down() + { + $this->dropTable('{{%labels}}'); + } +} diff --git a/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000002_create_table_documents2labels.php b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000002_create_table_documents2labels.php new file mode 100644 index 00000000..39ba483f --- /dev/null +++ b/tests/specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql/migrations_mysql_db/m200000_000002_create_table_documents2labels.php @@ -0,0 +1,26 @@ +createTable('{{%documents2labels}}', [ + 'document_id' => $this->integer()->notNull(), + 'label_id' => $this->integer()->notNull(), + ]); + $this->addPrimaryKey('pk_document_id_label_id', '{{%documents2labels}}', 'document_id,label_id'); + $this->addForeignKey('fk_documents2labels_document_id_documents_id', '{{%documents2labels}}', 'document_id', '{{%documents}}', 'id', 'CASCADE'); + $this->addForeignKey('fk_documents2labels_label_id_labels_id', '{{%documents2labels}}', 'label_id', '{{%labels}}', 'id', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('fk_documents2labels_label_id_labels_id', '{{%documents2labels}}'); + $this->dropForeignKey('fk_documents2labels_document_id_documents_id', '{{%documents2labels}}'); + $this->dropPrimaryKey('pk_document_id_label_id', '{{%documents2labels}}'); + $this->dropTable('{{%documents2labels}}'); + } +} diff --git a/tests/specs/many2many/migrations/m200000_000004_create_table_posts2tags.php b/tests/specs/many2many/migrations/m200000_000004_create_table_posts2tags.php index dbc82bc3..921fefb5 100644 --- a/tests/specs/many2many/migrations/m200000_000004_create_table_posts2tags.php +++ b/tests/specs/many2many/migrations/m200000_000004_create_table_posts2tags.php @@ -12,8 +12,8 @@ public function up() 'tag_id' => $this->bigInteger()->notNull(), ]); $this->addPrimaryKey('pk_post_id_tag_id', '{{%posts2tags}}', 'post_id,tag_id'); - $this->addForeignKey('fk_posts2tags_post_id_posts_id', '{{%posts2tags}}', 'post_id', '{{%posts}}', 'id'); - $this->addForeignKey('fk_posts2tags_tag_id_tags_id', '{{%posts2tags}}', 'tag_id', '{{%tags}}', 'id'); + $this->addForeignKey('fk_posts2tags_post_id_posts_id', '{{%posts2tags}}', 'post_id', '{{%posts}}', 'id', 'CASCADE'); + $this->addForeignKey('fk_posts2tags_tag_id_tags_id', '{{%posts2tags}}', 'tag_id', '{{%tags}}', 'id', 'CASCADE'); } public function down() diff --git a/tests/unit/IssueFixTest.php b/tests/unit/IssueFixTest.php index b6c7abdb..b641bb52 100644 --- a/tests/unit/IssueFixTest.php +++ b/tests/unit/IssueFixTest.php @@ -360,4 +360,18 @@ public function test158BugGiiapiGeneratedRulesEnumWithTrim() ]); $this->checkFiles($actualFiles, $expectedFiles); } + + // https://github.com/php-openapi/yii2-openapi/issues/53 + public function test53BugInversedReferenceRequireCascade() + { + $testFile = Yii::getAlias("@specs/issue_fix/53_bug_inversed_reference_require_cascade/index.php"); + $this->runGenerator($testFile); + $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [ + 'recursive' => true, + ]); + $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/53_bug_inversed_reference_require_cascade/mysql"), [ + 'recursive' => true, + ]); + $this->checkFiles($actualFiles, $expectedFiles); + } }