create(); $this->assertInstanceOf(Category::class, $category); $this->assertIsString($category->name); $this->assertIsString($category->slug); } /** @test */ public function it_has_correct_fillable_attributes(): void { $categoryData = [ 'name' => 'Technology', 'slug' => 'technology', 'is_active' => true, ]; $category = Category::query()->create($categoryData); foreach ($categoryData as $key => $value) { $this->assertEquals($value, $category->$key); } } /** @test */ public function it_has_many_blogs(): void { $category = Category::factory()->create(); $blog1 = Blog::factory()->create(['category_id' => $category->id]); $blog2 = Blog::factory()->create(['category_id' => $category->id]); $this->assertCount(2, $category->blogs); $this->assertContains($blog1->id, $category->blogs->pluck('id')); $this->assertContains($blog2->id, $category->blogs->pluck('id')); } /** @test */ public function it_generates_unique_slugs(): void { $category1 = Category::factory()->create(['name' => 'Same Name']); $category2 = Category::factory()->create(['name' => 'Same Name']); $this->assertNotEquals($category1->slug, $category2->slug); } /** @test */ public function it_can_query_active_categories(): void { Category::factory()->create(['is_active' => true]); Category::factory()->create(['is_active' => false]); $activeCategories = Category::query()->where('is_active', true)->get(); $inactiveCategories = Category::query()->where('is_active', false)->get(); $this->assertCount(1, $activeCategories); $this->assertCount(1, $inactiveCategories); } /** @test */ public function it_stores_is_active_status_correctly(): void { $category = Category::factory()->create(['is_active' => false]); $this->assertFalse($category->is_active); } /** @test */ public function it_uses_correct_table_name(): void { $category = new Category; $this->assertEquals('categories', $category->getTable()); } /** @test */ public function it_extends_model_class(): void { $category = new Category; $this->assertInstanceOf(Model::class, $category); } }