*/ class CustomerFactory extends Factory { protected $model = Customer::class; public function definition(): array { return [ 'name' => $this->faker->company(), // Large unique space — safeEmail()'s pool can collide late in a full // suite run (process-wide unique() state), tripping customers.email. 'email' => 'customer-'.$this->faker->unique()->numerify('########').'@example.test', 'locale' => 'de', 'status' => 'active', // `customer_type` is deliberately absent, so it stays NULL: the // factory has not asked, and neither has anybody else. A default // here would be the one thing the column exists to prevent — an // answer nobody gave — and it would also hide the case that most // needs testing, since NULL is what every customer created from a // Stripe event arrives with. Use consumer() or business() when a // test is about the answer. ]; } /** Somebody who said they are a private person. Has the withdrawal right. */ public function consumer(): static { return $this->state(['customer_type' => Customer::TYPE_CONSUMER]); } /** Somebody who said they are a business. Has no withdrawal right. */ public function business(): static { return $this->state(['customer_type' => Customer::TYPE_BUSINESS]); } }