Guard Paddle sync mapping
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-01-02 21:47:14 +01:00
parent 77b7af13d4
commit 8b445ae998
3 changed files with 85 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature;
use App\Jobs\SyncPackageToPaddle;
use App\Models\Package;
use Illuminate\Console\Command;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Bus as BusFacade;
use Tests\TestCase;
@@ -14,7 +15,10 @@ class PaddleSyncPackagesCommandTest extends TestCase
public function test_command_dispatches_jobs_for_packages(): void
{
Package::factory()->count(2)->create();
Package::factory()->count(2)->create([
'paddle_product_id' => 'pro_test',
'paddle_price_id' => 'pri_test',
]);
BusFacade::fake();
@@ -44,6 +48,41 @@ class PaddleSyncPackagesCommandTest extends TestCase
});
}
public function test_command_blocks_bulk_sync_with_unmapped_packages(): void
{
Package::factory()->create([
'paddle_product_id' => null,
'paddle_price_id' => null,
]);
BusFacade::fake();
$this->artisan('paddle:sync-packages', [
'--dry-run' => true,
'--queue' => true,
])->assertExitCode(Command::FAILURE);
BusFacade::assertNotDispatched(SyncPackageToPaddle::class);
}
public function test_command_allows_unmapped_packages_when_overridden(): void
{
Package::factory()->create([
'paddle_product_id' => null,
'paddle_price_id' => null,
]);
BusFacade::fake();
$this->artisan('paddle:sync-packages', [
'--dry-run' => true,
'--queue' => true,
'--allow-unmapped' => true,
])->assertExitCode(Command::SUCCESS);
BusFacade::assertDispatched(SyncPackageToPaddle::class, 1);
}
protected function getJobPackageId(SyncPackageToPaddle $job): int
{
$reflection = new \ReflectionClass($job);