55 lines
2.8 KiB
PHP
55 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\EcommerceFinance;
|
|
|
|
use App\Console\Commands\SyncBusinessMirrors;
|
|
use Illuminate\Support\Carbon;
|
|
use Mockery;
|
|
use Modules\EcommerceFinance\Repositories\GenericBusinessMirrorRepository;
|
|
use Modules\EcommerceFinance\Services\BusinessMirrorDatasetRegistry;
|
|
use Modules\EcommerceFinance\Repositories\SupplierManagementMirrorRepository;
|
|
use Tests\TestCase;
|
|
|
|
class SupplierManagementSyncScheduleTest extends TestCase
|
|
{
|
|
public function test_supplier_datasets_have_explicit_shared_row_store_policies(): void
|
|
{
|
|
$policies = config('business_data.datasets');
|
|
foreach ([SupplierManagementMirrorRepository::DATASET, ...array_values(SupplierManagementMirrorRepository::RELATED)] as $key) {
|
|
$this->assertArrayHasKey($key, $policies);
|
|
$this->assertSame('mariadb', $policies[$key]['target_store']);
|
|
$this->assertStringStartsWith('供应商管理', $policies[$key]['consumer']);
|
|
}
|
|
}
|
|
|
|
public function test_supplier_reconciliation_refreshes_old_rows_and_resumes_partial_full_runs_only_when_opted_in(): void
|
|
{
|
|
Carbon::setTestNow('2026-10-11 12:00:00');
|
|
try {
|
|
$registry = new BusinessMirrorDatasetRegistry();
|
|
$dataset = $registry->get(SupplierManagementMirrorRepository::DATASET);
|
|
$datasets = Mockery::mock(BusinessMirrorDatasetRegistry::class)->makePartial();
|
|
$datasets->shouldReceive('all')->andReturn([$dataset->key() => $dataset]);
|
|
$datasets->shouldReceive('scheduled')->andReturnTrue();
|
|
$mirror = Mockery::mock(GenericBusinessMirrorRepository::class);
|
|
$command = app(SyncBusinessMirrors::class);
|
|
$command->setInput(new \Symfony\Component\Console\Input\ArrayInput([], $command->getDefinition()));
|
|
$method = new \ReflectionMethod($command, 'scheduledKeys');
|
|
$state = ['initial_completed_at' => '2026-10-10 12:00:00', 'status' => 'succeeded', 'last_full_succeeded_at' => '2026-10-11 10:30:00'];
|
|
$mirror->shouldReceive('state')->andReturnUsing(function () use (&$state) { return $state; });
|
|
$this->assertTrue($method->invoke($command, $datasets, $mirror)[0]['full']);
|
|
$state['last_full_succeeded_at'] = '2026-10-11 11:30:00';
|
|
$this->assertFalse($method->invoke($command, $datasets, $mirror)[0]['full']);
|
|
$state['status'] = 'running';
|
|
$state['run_mode'] = 'full';
|
|
$this->assertTrue($method->invoke($command, $datasets, $mirror)[0]['full']);
|
|
$definitions = config('upstream_mirrors.datasets');
|
|
$definitions[$dataset->key()]['full_reconcile_hours'] = 0;
|
|
config(['upstream_mirrors.datasets' => $definitions]);
|
|
$this->assertFalse($method->invoke($command, $datasets, $mirror)[0]['full']);
|
|
} finally {
|
|
Carbon::setTestNow();
|
|
}
|
|
}
|
|
}
|