. */ declare(strict_types=1); namespace Tests\Unit\Factory; use FireflyIII\Factory\CategoryFactory; use Tests\TestCase; /** * Class CategoryFactoryTest */ class CategoryFactoryTest extends TestCase { /** * @covers \FireflyIII\Factory\CategoryFactory */ public function testFindOrCreateExistingID(): void { $existing = $this->user()->categories()->first(); /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($this->user()); $category = $factory->findOrCreate($existing->id, null); $this->assertEquals($existing->id, $category->id); } /** * @covers \FireflyIII\Factory\CategoryFactory */ public function testFindOrCreateExistingName(): void { $existing = $this->user()->categories()->first(); /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($this->user()); $category = $factory->findOrCreate(null, $existing->name); $this->assertEquals($existing->id, $category->id); } /** * You can force a NULL result by presenting an invalid ID and no valid name. * * @covers \FireflyIII\Factory\CategoryFactory */ public function testFindOrCreateInvalidID(): void { $existing = $this->user()->categories()->max('id'); $existing += 4; /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($this->user()); $this->assertNull($factory->findOrCreate($existing, '')); } /** * @covers \FireflyIII\Factory\CategoryFactory */ public function testFindOrCreateNewName(): void { $name = 'Some new category #' . random_int(1, 1000); /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($this->user()); $category = $factory->findOrCreate(null, $name); $this->assertEquals($name, $category->name); } /** * @covers \FireflyIII\Factory\CategoryFactory */ public function testFindOrCreateNull(): void { /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($this->user()); $this->assertNull($factory->findOrCreate(null, null)); } }