CaiWuXiTong/tests/Unit/EcommerceFinance/ProductPurchasePriceRepositoryTest.php
limeng d87ca96593 普通商品增加1688代发采购单价来源 (#74)
保留并标注普通商品采购价,接入已完成1688代发采购单价的只读共享业务镜像。
2026-08-21 14:49:16 +08:00

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]);
}
}