1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
<?php
namespace Illuminate\Tests\Integration\Database\MySql;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
/**
* @requires extension pdo_mysql
* @requires OS Linux|Darwin
*/
class DatabaseMySqlConnectionTest extends MySqlTestCase
{
const TABLE = 'player';
const FLOAT_COL = 'float_col';
const JSON_COL = 'json_col';
const FLOAT_VAL = 0.2;
protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
{
if (! Schema::hasTable(self::TABLE)) {
Schema::create(self::TABLE, function (Blueprint $table) {
$table->json(self::JSON_COL)->nullable();
$table->float(self::FLOAT_COL)->nullable();
});
}
}
protected function destroyDatabaseMigrations()
{
Schema::drop(self::TABLE);
}
/**
* @dataProvider floatComparisonsDataProvider
*/
public function testJsonFloatComparison($value, $operator, $shouldMatch)
{
DB::table(self::TABLE)->insert([self::JSON_COL => '{"rank":'.self::FLOAT_VAL.'}']);
$this->assertSame(
$shouldMatch,
DB::table(self::TABLE)->where(self::JSON_COL.'->rank', $operator, $value)->exists(),
self::JSON_COL.'->rank should '.($shouldMatch ? '' : 'not ')."be $operator $value"
);
}
public function floatComparisonsDataProvider()
{
return [
[0.2, '=', true],
[0.2, '>', false],
[0.2, '<', false],
[0.1, '=', false],
[0.1, '<', false],
[0.1, '>', true],
[0.3, '=', false],
[0.3, '<', true],
[0.3, '>', false],
];
}
public function testFloatValueStoredCorrectly()
{
DB::table(self::TABLE)->insert([self::FLOAT_COL => self::FLOAT_VAL]);
$this->assertEquals(self::FLOAT_VAL, DB::table(self::TABLE)->value(self::FLOAT_COL));
}
/**
* @dataProvider jsonWhereNullDataProvider
*/
public function testJsonWhereNull($expected, $key, array $value = ['value' => 123])
{
DB::table(self::TABLE)->insert([self::JSON_COL => json_encode($value)]);
$this->assertSame($expected, DB::table(self::TABLE)->whereNull(self::JSON_COL.'->'.$key)->exists());
}
/**
* @dataProvider jsonWhereNullDataProvider
*/
public function testJsonWhereNotNull($expected, $key, array $value = ['value' => 123])
{
DB::table(self::TABLE)->insert([self::JSON_COL => json_encode($value)]);
$this->assertSame(! $expected, DB::table(self::TABLE)->whereNotNull(self::JSON_COL.'->'.$key)->exists());
}
public function jsonWhereNullDataProvider()
{
return [
'key not exists' => [true, 'invalid'],
'key exists and null' => [true, 'value', ['value' => null]],
'key exists and "null"' => [false, 'value', ['value' => 'null']],
'key exists and not null' => [false, 'value', ['value' => false]],
'nested key not exists' => [true, 'nested->invalid'],
'nested key exists and null' => [true, 'nested->value', ['nested' => ['value' => null]]],
'nested key exists and "null"' => [false, 'nested->value', ['nested' => ['value' => 'null']]],
'nested key exists and not null' => [false, 'nested->value', ['nested' => ['value' => false]]],
];
}
}
|