. */ declare(strict_types=1); namespace Tests\Unit\Factory; use Carbon\Carbon; use FireflyIII\Factory\TransactionJournalMetaFactory; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournalMeta; use Tests\TestCase; /** * Class TransactionJournalMetaFactoryTest */ class TransactionJournalMetaFactoryTest extends TestCase { /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateBasic() { /** @var TransactionJournal $journal */ $journal = $this->user()->transactionJournals()->inRandomOrder()->first(); $journal->transactionJournalMeta()->delete(); $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => 'bye!', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $journal->transactionJournalMeta()->count()); $this->assertEquals($set['data'], $result->data); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateDate() { /** @var TransactionJournal $journal */ $journal = $this->user()->transactionJournals()->inRandomOrder()->first(); $journal->transactionJournalMeta()->delete(); $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => new Carbon('2012-01-01'), ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $journal->transactionJournalMeta()->count()); $this->assertEquals($set['data']->toW3cString(), $result->data); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateDeleteExisting() { /** @var TransactionJournal $journal */ $journal = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first(); $meta = TransactionJournalMeta::create( [ 'transaction_journal_id' => $journal->id, 'name' => 'hello', 'data' => 'bye!', ] ); $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => null, ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $factory->updateOrCreate($set); $this->assertEquals(0, $journal->transactionJournalMeta()->count()); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateEmpty() { /** @var TransactionJournal $journal */ $journal = $this->user()->transactionJournals()->inRandomOrder()->first(); $journal->transactionJournalMeta()->delete(); $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => '', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(0, $journal->transactionJournalMeta()->count()); $this->assertNull($result); } /** * @covers \FireflyIII\Factory\TransactionJournalMetaFactory */ public function testUpdateOrCreateExistingEmpty() { /** @var TransactionJournal $journal */ $journal = $this->user()->transactionJournals()->inRandomOrder()->first(); $journal->transactionJournalMeta()->delete(); $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => 'SomeData', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(1, $journal->transactionJournalMeta()->count()); $this->assertNotNull($result); // overrule with empty entry: $set = [ 'journal' => $journal, 'name' => 'hello', 'data' => '', ]; /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $result = $factory->updateOrCreate($set); $this->assertEquals(0, $journal->transactionJournalMeta()->count()); $this->assertNull($result); } }