Skip to content

Commit

Permalink
Tests for upsert&destroy with small chunk
Browse files Browse the repository at this point in the history
  • Loading branch information
evgeny committed May 25, 2023
1 parent 6c42fbf commit e2fdd54
Showing 1 changed file with 61 additions and 0 deletions.
Expand Up @@ -4,6 +4,7 @@

namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Receive\Savers;

use Illuminate\Support\Facades\Config;
use Umbrellio\TableSync\Integration\Laravel\Receive\Savers\EloquentSaver;
use Umbrellio\TableSync\Tests\functional\Laravel\Models\TestModel;

Expand Down Expand Up @@ -42,4 +43,64 @@ public function upsertByDuplicatedTargetKeys(): void
$this->assertSame($someField, $model->some_field);
});
}

/**
* @test
*/
public function testUpsertWithChunk(): void
{
$this->dropPrimaryKeyConstraint();
$this->setChunkSize(1);
$models = factory(TestModel::class, 3)->create(['id' => 1]);
$this->assertDatabaseCount(static::TARGET, 3);
$models->each(fn (TestModel $model) => $this->assertDatabaseHas(static::TARGET, $model->toArray()));

$item1 = [
'id' => 1,
'name' => 'name_1',
'some_field' => 'some_field_1',
];
$item2 = [
'id' => 1,
'name' => 'name_2',
'some_field' => 'some_field_2',
];
$item3 = [
'id' => 1,
'name' => 'name_3',
'some_field' => 'some_field_3',
];
$data = [$item1, $item2, $item3];
$this
->makeMessageData(['id'], $data)
->upsert(1000.1);

$models->each(fn (TestModel $model) => $this->assertDatabaseMissing(static::TARGET, $model->toArray()));
$this->assertDatabaseHas(static::TARGET, $item1);
$this->assertDatabaseMissing(static::TARGET, $item2);
$this->assertDatabaseMissing(static::TARGET, $item3);
}

/**
* @test
*/
public function testDestroyWithChunk(): void
{
$this->dropPrimaryKeyConstraint();
$this->setChunkSize(2);
$models = factory(TestModel::class, 3)->create(['id' => 1]);
$this->assertDatabaseCount(static::TARGET, 3);
$models->each(fn (TestModel $model) => $this->assertDatabaseHas(static::TARGET, $model->toArray()));

$this
->makeMessageData(['id'], [['id' => 1]])
->destroy();

$this->assertDatabaseCount(static::TARGET, 0);
}

private function setChunkSize(int $size): void
{
Config::set('table_sync.receive.eloquent_chunk_size', $size);
}
}

0 comments on commit e2fdd54

Please sign in to comment.