Add project listing selector, confirmed revision and private 3MF renders

This commit is contained in:
2026-11-08 18:49:32 +00:00
parent e62b6800a6
commit 4e675510fd
29 changed files with 3394 additions and 14 deletions
+30
View File
@@ -153,6 +153,36 @@ class ProjectListingLinkTest extends TestCase
$this->assertDatabaseCount('project_listing_links', 0);
}
public function test_rejects_a_listing_that_is_inactive_rather_than_live_or_draft(): void
{
Http::preventStrayRequests();
$this->connectEtsy();
Http::fake(['https://api.etsy.com/v3/application/listings/777*' => Http::response([
'listing_id' => 777, 'shop_id' => 42, 'title' => 'Old item', 'state' => 'inactive',
])]);
$admin = User::factory()->create(['role' => 'admin']);
$project = Project::factory()->create();
$this->actingAs($admin)->post(route('projects.listings.store', $project), ['listing_id' => 777])
->assertSessionHasErrors('listing_id');
$this->assertDatabaseCount('project_listing_links', 0);
}
public function test_rejects_a_sold_out_listing(): void
{
Http::preventStrayRequests();
$this->connectEtsy();
Http::fake(['https://api.etsy.com/v3/application/listings/778*' => Http::response([
'listing_id' => 778, 'shop_id' => 42, 'title' => 'Sold out item', 'state' => 'sold_out',
])]);
$admin = User::factory()->create(['role' => 'admin']);
$project = Project::factory()->create();
$this->actingAs($admin)->post(route('projects.listings.store', $project), ['listing_id' => 778])
->assertSessionHasErrors('listing_id');
$this->assertDatabaseCount('project_listing_links', 0);
}
public function test_non_admin_cannot_attach_listings(): void
{
$project = Project::factory()->create();