create(['email' => 'demo-free@ladill.com']); $this->artisan('demo:seed', ['identity' => $user->email, '--plan' => 'free']) ->assertSuccessful(); $this->assertDatabaseMissing('woo_pro_subscriptions', ['user_id' => $user->id]); $stores = WooStore::query()->where('user_id', $user->id)->get(); $this->assertCount(1, $stores); $this->assertSame(WooStore::STATUS_ACTIVE, $stores->first()->status); $productCount = WooProduct::query()->where('woo_store_id', $stores->first()->id)->count(); $this->assertLessThanOrEqual(20, $productCount); $this->assertGreaterThan(0, $productCount); $this->assertGreaterThan(0, WooOrder::query()->where('woo_store_id', $stores->first()->id)->count()); $this->assertGreaterThan(0, $stores->first()->categories()->count()); } public function test_pro_plan_assigns_subscription_and_multiple_stores(): void { $user = User::factory()->create(['public_id' => 'woo-demo-pro-001']); $this->artisan('demo:seed', ['identity' => 'woo-demo-pro-001', '--plan' => 'pro']) ->assertSuccessful(); $sub = ProSubscription::query()->where('user_id', $user->id)->first(); $this->assertNotNull($sub); $this->assertSame(ProSubscription::PLAN_PRO, $sub->plan); $this->assertTrue($sub->entitled()); $this->assertCount(2, WooStore::query()->where('user_id', $user->id)->get()); $this->assertGreaterThan(20, WooProduct::query() ->whereIn('woo_store_id', WooStore::query()->where('user_id', $user->id)->pluck('id')) ->count()); } public function test_idempotent_without_reset_and_reset_reseeds(): void { $user = User::factory()->create(['email' => 'demo-pro@ladill.com']); $this->artisan('demo:seed', ['identity' => $user->email, '--plan' => 'enterprise']) ->assertSuccessful(); $firstCount = WooStore::query()->where('user_id', $user->id)->count(); $this->assertSame(3, $firstCount); $this->artisan('demo:seed', ['identity' => $user->email, '--plan' => 'enterprise']) ->assertSuccessful(); $this->assertSame(3, WooStore::query()->where('user_id', $user->id)->count()); $this->artisan('demo:seed', [ 'identity' => $user->email, '--plan' => 'free', '--reset' => true, ])->assertSuccessful(); $this->assertCount(1, WooStore::query()->where('user_id', $user->id)->get()); $this->assertDatabaseMissing('woo_pro_subscriptions', ['user_id' => $user->id]); } public function test_pro_plan_uses_demo_world_business_and_customer_continuity(): void { $user = User::factory()->create(['email' => 'demo-pro@ladill.com']); $this->artisan('demo:seed', ['identity' => $user->email, '--plan' => 'pro']) ->assertSuccessful(); $store = WooStore::query()->where('user_id', $user->id)->first(); $this->assertStringContainsString(DemoWorld::business('pro')['name'], $store->site_name); $firstPerson = DemoWorld::people(1)[0]; $this->assertDatabaseHas('woo_orders', [ 'woo_store_id' => $store->id, 'customer_name' => DemoWorld::fullName($firstPerson), 'customer_email' => $firstPerson['email'], ]); } }