. */ namespace Tests\Unit\Console\Commands\Correction; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Log; use Tests\TestCase; /** * Class DeleteEmptyJournalsTest * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.TooManyPublicMethods) */ class DeleteEmptyJournalsTest extends TestCase { /** * */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @covers \FireflyIII\Console\Commands\Correction\DeleteEmptyJournals */ public function testHandle(): void { // assume there are no empty journals or uneven journals $this->artisan('firefly-iii:delete-empty-journals') ->expectsOutput('No uneven transaction journals.') ->expectsOutput('No empty transaction journals.') ->assertExitCode(0); } /** * @covers \FireflyIII\Console\Commands\Correction\DeleteEmptyJournals */ public function testHandleEmptyJournals(): void { // create empty journal: $journal = TransactionJournal::create( [ 'user_id' => 1, 'transaction_currency_id' => 1, 'transaction_type_id' => 1, 'description' => 'Hello', 'tag_count' => 0, 'date' => '2019-01-01', ] ); $this->artisan('firefly-iii:delete-empty-journals') ->expectsOutput('No uneven transaction journals.') ->expectsOutput(sprintf('Deleted empty transaction journal #%d', $journal->id)) ->assertExitCode(0); // verify its indeed gone $this->assertCount(0, TransactionJournal::where('id', $journal->id)->whereNull('deleted_at')->get()); } /** * @covers \FireflyIII\Console\Commands\Correction\DeleteEmptyJournals */ public function testHandleUnevenJournals(): void { // create empty journal: $journal = TransactionJournal::create( [ 'user_id' => 1, 'transaction_currency_id' => 1, 'transaction_type_id' => 1, 'description' => 'Hello', 'tag_count' => 0, 'date' => '2019-01-01', ] ); // link empty transaction $transaction = Transaction::create( [ 'transaction_journal_id' => $journal->id, 'account_id' => 1, 'amount' => '5', ] ); $this->artisan('firefly-iii:delete-empty-journals') ->expectsOutput(sprintf('Deleted transaction journal #%d because it had an uneven number of transactions.', $journal->id)) ->expectsOutput('No empty transaction journals.') ->assertExitCode(0); // verify both are gone $this->assertCount(0, TransactionJournal::where('id', $journal->id)->whereNull('deleted_at')->get()); $this->assertCount(0, Transaction::where('id', $transaction->id)->whereNull('deleted_at')->get()); } }