createUser('creator@example.com'); $set = app(SetRepository::class)->create(new CreateSetDto( name: 'Bible', creator: $creator, )); $this->assertGreaterThan(0, $set->getId()); $this->assertSame('Bible', $set->getName()); $this->assertSame($creator->getId(), $set->getCreator()->getId()); $this->assertDatabaseHas('sets', [ 'id' => $set->getId(), 'name' => 'Bible', 'creator_id' => $creator->getId(), ]); } public function test_it_lists_every_set_alphabetically(): void { $firstCreator = $this->createUser('first@example.com'); $secondCreator = $this->createUser('second@example.com'); $repository = app(SetRepository::class); $repository->create(new CreateSetDto( name: 'Fitness Program', creator: $firstCreator, )); $repository->create(new CreateSetDto( name: 'Bible', creator: $secondCreator, )); $repository->create(new CreateSetDto( name: 'Course', creator: $firstCreator, )); $sets = $repository->all(); $this->assertSame( ['Bible', 'Course', 'Fitness Program'], array_map(function ($set): string { return $set->getName(); }, $sets), ); $this->assertSame( $secondCreator->getId(), $sets[0]->getCreator()->getId(), ); } public function test_it_rejects_duplicate_set_names(): void { $creator = $this->createUser('creator@example.com'); $repository = app(SetRepository::class); $repository->create(new CreateSetDto( name: 'Bible', creator: $creator, )); $this->expectException(QueryException::class); $repository->create(new CreateSetDto( name: 'Bible', creator: $creator, )); } private function createUser(string $email): User { return app(UserRepository::class)->create(new CreateUserDto( email: new EmailAddress($email), passwordHash: 'hashed-password', )); } }