Skip to content
This repository was archived by the owner on Jun 4, 2024. It is now read-only.

Failing test case for #168, can not define index for a relation key #169

Merged
merged 8 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ services:
- maria
tty: true
mysql:
image: mysql:8
image: mysql:8.0.37
ports:
- '13306:3306'
volumes:
Expand Down
2 changes: 1 addition & 1 deletion tests/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1 @@
/tmp
/tmp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

/**
* Table for Delivery
*/
class m200000_000000_create_table_deliveries extends \yii\db\Migration
{
public function up()
{
$this->createTable('{{%deliveries}}', [
'id' => $this->primaryKey(),
'title' => $this->text()->null(),
]);
}

public function down()
{
$this->dropTable('{{%deliveries}}');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

/**
* Table for User
*/
class m200000_000001_create_table_users extends \yii\db\Migration
{
public function up()
{
$this->createTable('{{%users}}', [
'id' => $this->primaryKey(),
'name' => $this->text()->notNull(),
]);
}

public function down()
{
$this->dropTable('{{%users}}');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

/**
* Table for Webhook
*/
class m200000_000002_create_table_webhooks extends \yii\db\Migration
{
public function up()
{
$this->createTable('{{%webhooks}}', [
'id' => $this->primaryKey(),
'name' => $this->text()->null(),
'user_id' => $this->integer()->null()->defaultValue(null),
'redelivery_of' => $this->integer()->null()->defaultValue(null),
]);
$this->addForeignKey('fk_webhooks_user_id_users_id', '{{%webhooks}}', 'user_id', '{{%users}}', 'id');
$this->addForeignKey('fk_webhooks_redelivery_of_deliveries_id', '{{%webhooks}}', 'redelivery_of', '{{%deliveries}}', 'id');
// TOOD add index names
$this->createIndex('...', '{{%webhooks}}', ['user_id', 'name'], true);
$this->createIndex('...', '{{%webhooks}}', ['redelivery_of', 'name'], true);
}

public function down()
{
$this->dropForeignKey('fk_webhooks_redelivery_of_deliveries_id', '{{%webhooks}}');
$this->dropForeignKey('fk_webhooks_user_id_users_id', '{{%webhooks}}');
$this->dropTable('{{%webhooks}}');
}
}
144 changes: 144 additions & 0 deletions tests/specs/fk_col_name_index/app/models/BaseModelFaker.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
<?php

namespace app\models;

use Faker\Factory as FakerFactory;
use Faker\Generator;
use Faker\UniqueGenerator;

/**
* Base fake data generator
*/
abstract class BaseModelFaker
{
/**
* @var Generator
*/
protected $faker;
/**
* @var UniqueGenerator
*/
protected $uniqueFaker;

public function __construct()
{
$this->faker = FakerFactory::create(str_replace('-', '_', \Yii::$app->language));
$this->uniqueFaker = new UniqueGenerator($this->faker);
}

abstract public function generateModel($attributes = []);

public function getFaker():Generator
{
return $this->faker;
}

public function getUniqueFaker():UniqueGenerator
{
return $this->uniqueFaker;
}

public function setFaker(Generator $faker):void
{
$this->faker = $faker;
}

public function setUniqueFaker(UniqueGenerator $faker):void
{
$this->uniqueFaker = $faker;
}

/**
* Generate and return model
* @param array|callable $attributes
* @param UniqueGenerator|null $uniqueFaker
* @return \yii\db\ActiveRecord
* @example MyFaker::makeOne(['user_id' => 1, 'title' => 'foo']);
* @example MyFaker::makeOne( function($model, $faker) {
* $model->scenario = 'create';
* $model->setAttributes(['user_id' => 1, 'title' => $faker->sentence]);
* return $model;
* });
*/
public static function makeOne($attributes = [], ?UniqueGenerator $uniqueFaker = null)
{
$fakeBuilder = new static();
if ($uniqueFaker !== null) {
$fakeBuilder->setUniqueFaker($uniqueFaker);
}
$model = $fakeBuilder->generateModel($attributes);
return $model;
}

/**
* Generate, save and return model
* @param array|callable $attributes
* @param UniqueGenerator|null $uniqueFaker
* @return \yii\db\ActiveRecord
* @example MyFaker::saveOne(['user_id' => 1, 'title' => 'foo']);
* @example MyFaker::saveOne( function($model, $faker) {
* $model->scenario = 'create';
* $model->setAttributes(['user_id' => 1, 'title' => $faker->sentence]);
* return $model;
* });
*/
public static function saveOne($attributes = [], ?UniqueGenerator $uniqueFaker = null)
{
$model = static::makeOne($attributes, $uniqueFaker);
$model->save();
return $model;
}

/**
* Generate and return multiple models
* @param int $number
* @param array|callable $commonAttributes
* @return \yii\db\ActiveRecord[]|array
* @example TaskFaker::make(5, ['project_id'=>1, 'user_id' => 2]);
* @example TaskFaker::make(5, function($model, $faker, $uniqueFaker) {
* $model->setAttributes(['name' => $uniqueFaker->username, 'state'=>$faker->boolean(20)]);
* return $model;
* });
*/
public static function make(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null):array
{
if ($number < 1) {
return [];
}
$fakeBuilder = new static();
if ($uniqueFaker !== null) {
$fakeBuilder->setUniqueFaker($uniqueFaker);
}
return array_map(function () use ($commonAttributes, $fakeBuilder) {
$model = $fakeBuilder->generateModel($commonAttributes);
return $model;
}, range(0, $number -1));
}

/**
* Generate, save and return multiple models
* @param int $number
* @param array|callable $commonAttributes
* @return \yii\db\ActiveRecord[]|array
* @example TaskFaker::save(5, ['project_id'=>1, 'user_id' => 2]);
* @example TaskFaker::save(5, function($model, $faker, $uniqueFaker) {
* $model->setAttributes(['name' => $uniqueFaker->username, 'state'=>$faker->boolean(20)]);
* return $model;
* });
*/
public static function save(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null):array
{
if ($number < 1) {
return [];
}
$fakeBuilder = new static();
if ($uniqueFaker !== null) {
$fakeBuilder->setUniqueFaker($uniqueFaker);
}
return array_map(function () use ($commonAttributes, $fakeBuilder) {
$model = $fakeBuilder->generateModel($commonAttributes);
$model->save();
return $model;
}, range(0, $number -1));
}
}
10 changes: 10 additions & 0 deletions tests/specs/fk_col_name_index/app/models/Delivery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace app\models;

class Delivery extends \app\models\base\Delivery
{


}

41 changes: 41 additions & 0 deletions tests/specs/fk_col_name_index/app/models/DeliveryFaker.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
namespace app\models;

use Faker\UniqueGenerator;

/**
* Fake data generator for Delivery
* @method static Delivery makeOne($attributes = [], ?UniqueGenerator $uniqueFaker = null);
* @method static Delivery saveOne($attributes = [], ?UniqueGenerator $uniqueFaker = null);
* @method static Delivery[] make(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null)
* @method static Delivery[] save(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null)
*/
class DeliveryFaker extends BaseModelFaker
{

/**
* @param array|callable $attributes
* @return Delivery|\yii\db\ActiveRecord
* @example
* $model = (new PostFaker())->generateModels(['author_id' => 1]);
* $model = (new PostFaker())->generateModels(function($model, $faker, $uniqueFaker) {
* $model->scenario = 'create';
* $model->author_id = 1;
* return $model;
* });
**/
public function generateModel($attributes = [])
{
$faker = $this->faker;
$uniqueFaker = $this->uniqueFaker;
$model = new Delivery();
//$model->id = $uniqueFaker->numberBetween(0, 1000000);
$model->title = $faker->sentence;
if (!is_callable($attributes)) {
$model->setAttributes($attributes, false);
} else {
$model = $attributes($model, $faker, $uniqueFaker);
}
return $model;
}
}
10 changes: 10 additions & 0 deletions tests/specs/fk_col_name_index/app/models/User.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace app\models;

class User extends \app\models\base\User
{


}

41 changes: 41 additions & 0 deletions tests/specs/fk_col_name_index/app/models/UserFaker.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
namespace app\models;

use Faker\UniqueGenerator;

/**
* Fake data generator for User
* @method static User makeOne($attributes = [], ?UniqueGenerator $uniqueFaker = null);
* @method static User saveOne($attributes = [], ?UniqueGenerator $uniqueFaker = null);
* @method static User[] make(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null)
* @method static User[] save(int $number, $commonAttributes = [], ?UniqueGenerator $uniqueFaker = null)
*/
class UserFaker extends BaseModelFaker
{

/**
* @param array|callable $attributes
* @return User|\yii\db\ActiveRecord
* @example
* $model = (new PostFaker())->generateModels(['author_id' => 1]);
* $model = (new PostFaker())->generateModels(function($model, $faker, $uniqueFaker) {
* $model->scenario = 'create';
* $model->author_id = 1;
* return $model;
* });
**/
public function generateModel($attributes = [])
{
$faker = $this->faker;
$uniqueFaker = $this->uniqueFaker;
$model = new User();
//$model->id = $uniqueFaker->numberBetween(0, 1000000);
$model->name = $faker->sentence;
if (!is_callable($attributes)) {
$model->setAttributes($attributes, false);
} else {
$model = $attributes($model, $faker, $uniqueFaker);
}
return $model;
}
}
10 changes: 10 additions & 0 deletions tests/specs/fk_col_name_index/app/models/Webhook.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace app\models;

class Webhook extends \app\models\base\Webhook
{


}

Loading
Loading