. */ declare(strict_types=1); namespace Tests\Unit\Factory; use Carbon\Carbon; use FireflyIII\Factory\TransactionJournalMetaFactory; use FireflyIII\Models\TransactionJournalMeta; use Log; use Tests\TestCase; /** * Class TransactionJournalMetaFactoryTest * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.TooManyPublicMethods) */ class TransactionJournalMetaFactoryTest extends TestCase { /** * */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateBasic(): void { $withdrawal = $this->getRandomWithdrawal(); $withdrawal->transactionJournalMeta()->delete(); $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => 'bye!', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $withdrawal->transactionJournalMeta()->count()); $this->assertEquals($set['data'], $result->data); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateDate(): void { $withdrawal = $this->getRandomWithdrawal(); $withdrawal->transactionJournalMeta()->delete(); $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => new Carbon('2012-01-01'), ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $withdrawal->transactionJournalMeta()->count()); $this->assertEquals($set['data']->toW3cString(), $result->data); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateDeleteExisting(): void { $withdrawal = $this->getRandomWithdrawal(); TransactionJournalMeta::create( [ 'transaction_journal_id' => $withdrawal->id, 'name' => 'hello', 'data' => 'bye!', ] ); $count = $withdrawal->transactionJournalMeta()->count(); $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => null, ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $factory->updateOrCreate($set); $this->assertEquals($count - 1, $withdrawal->transactionJournalMeta()->count()); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateEmpty(): void { $withdrawal = $this->getRandomWithdrawal(); $withdrawal->transactionJournalMeta()->delete(); $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => '', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(0, $withdrawal->transactionJournalMeta()->count()); $this->assertNull($result); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateExistingEmpty(): void { $withdrawal = $this->getRandomWithdrawal(); $withdrawal->transactionJournalMeta()->delete(); $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => 'SomeData', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $withdrawal->transactionJournalMeta()->count()); $this->assertNotNull($result); // overrule with empty entry: $set = [ 'journal' => $withdrawal, 'name' => 'hello', 'data' => '', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(0, $withdrawal->transactionJournalMeta()->count()); $this->assertNull($result); } }