54 lines
2.2 KiB
PHP
54 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\EcommerceFinance;
|
|
|
|
use Modules\EcommerceFinance\Repositories\ProductPurchasePriceRepository;
|
|
use Modules\EcommerceFinance\Services\UpstreamReadOnlyQuery;
|
|
use Modules\EcommerceFinance\Services\UpstreamReadOnlyQueryFactory;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ProductPurchasePriceRepositoryTest extends TestCase
|
|
{
|
|
public function test_fixed_batch_query_uses_source_update_cursor_and_required_fields(): void
|
|
{
|
|
$query = new class extends UpstreamReadOnlyQuery {
|
|
public string $sql = '';
|
|
public array $bindings = [];
|
|
public function __construct() { parent::__construct('jiansun'); }
|
|
public function select(string $sql, array $bindings = []): array
|
|
{
|
|
$this->sql = $sql;
|
|
$this->bindings = $bindings;
|
|
|
|
return [];
|
|
}
|
|
};
|
|
$factory = new class($query) extends UpstreamReadOnlyQueryFactory {
|
|
public function __construct(private readonly UpstreamReadOnlyQuery $query) {}
|
|
public function forSource(string $source): UpstreamReadOnlyQuery
|
|
{
|
|
TestCase::assertSame('jiansun', $source);
|
|
|
|
return $this->query;
|
|
}
|
|
};
|
|
|
|
(new ProductPurchasePriceRepository($factory))->mirrorBatch(
|
|
['updated_at' => '2026-08-20T10:00:00.000', 'item_id' => 100],
|
|
'2026-08-19T00:00:00.000',
|
|
'2026-08-21T00:00:00.000',
|
|
1000,
|
|
);
|
|
|
|
$this->assertStringContainsString('SELECT TOP (1000)', $query->sql);
|
|
$this->assertStringContainsString('[dbo].[jst_purchase] p', $query->sql);
|
|
$this->assertStringContainsString('[dbo].[jst_purchaseItem] i', $query->sql);
|
|
$this->assertStringContainsString('i.[po_id] = p.[po_id]', $query->sql);
|
|
$this->assertStringContainsString('p.[updateTime] >= ?', $query->sql);
|
|
$this->assertStringContainsString('p.[updateTime] = ? AND i.[Id] > ?', $query->sql);
|
|
$this->assertStringContainsString('ORDER BY p.[updateTime], i.[Id]', $query->sql);
|
|
$this->assertStringNotContainsString("p.[status] = 'Finished'", $query->sql);
|
|
$this->assertSame(100, $query->bindings[4]);
|
|
}
|
|
}
|