. */ declare(strict_types=1); namespace Tests\Unit\Console\Commands\Upgrade; use Carbon\Carbon; use FireflyConfig; use FireflyIII\Factory\TransactionJournalFactory; use FireflyIII\Models\Configuration; use FireflyIII\Models\Transaction; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; use Log; use Mockery; use Tests\TestCase; /** * Class MigrateToGroupsTest */ class MigrateToGroupsTest extends TestCase { /** * */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @covers \FireflyIII\Console\Commands\Upgrade\MigrateToGroups */ public function testAlreadyExecuted(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; $this->mock(TransactionJournalFactory::class); $this->mock(JournalRepositoryInterface::class); $configObject = new Configuration; $configObject->data = true; FireflyConfig::shouldReceive('get')->withArgs(['migrated_to_groups_4780', false])->andReturn($configObject)->once(); $this->artisan('firefly-iii:migrate-to-groups') ->expectsOutput('Database already seems to be migrated.') ->assertExitCode(0); } /** * @covers \FireflyIII\Console\Commands\Upgrade\MigrateToGroups */ public function testBasic(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; $journalFactory = $this->mock(TransactionJournalFactory::class); $journalRepos = $this->mock(JournalRepositoryInterface::class); $withdrawal = $this->getRandomSplitWithdrawal(); $collection = new Collection([$withdrawal]); $date = new Carbon; $opposing = new Transaction; $opposing->account_id = 13; // not yet executed: $configObject = new Configuration; $configObject->data = false; FireflyConfig::shouldReceive('get')->withArgs(['migrated_to_groups_4780', false])->andReturn($configObject)->once(); FireflyConfig::shouldReceive('set')->withArgs(['migrated_to_groups_4780', true])->once(); // calls to repository: $journalRepos->shouldReceive('setUser')->atLeast()->once(); $journalRepos->shouldReceive('getJournalBudgetId')->atLeast()->once()->andReturn(1); $journalRepos->shouldReceive('getJournalCategoryId')->atLeast()->once()->andReturn(2); $journalRepos->shouldReceive('findOpposingTransaction')->atLeast()->once()->andReturn($opposing); $journalRepos->shouldReceive('getNoteText')->atLeast()->once()->andReturn('I am some notes.'); $journalRepos->shouldReceive('getTags')->atLeast()->once()->andReturn(['a', 'b']); $journalRepos->shouldReceive('getSplitJournals')->once()->andReturn($collection); // all meta field calls. $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'internal-reference'])->andReturn('ABC'); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-cc'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-ct-op'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-ct-id'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-db'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-country'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-ep'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-ci'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'sepa-batch-id'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'external-id'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'original-source'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'recurrence_id'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'bunq_payment_id'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'importHash'])->andReturnNull(); $journalRepos->shouldReceive('getMetaField')->atLeast()->once()->withArgs([Mockery::any(), 'importHashV2'])->andReturnNull(); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'interest_date'])->andReturn($date); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'book_date'])->andReturnNull(); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'process_date'])->andReturnNull(); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'due_date'])->andReturnNull(); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'payment_date'])->andReturnNull(); $journalRepos->shouldReceive('getMetaDate')->atLeast()->once()->withArgs([Mockery::any(), 'invoice_date'])->andReturnNull(); // calls to factory $journalFactory->shouldReceive('setUser')->atLeast()->once(); $journalFactory->shouldReceive('create')->atLeast()->once()->withAnyArgs()->andReturn(new Collection()); $this->artisan('firefly-iii:migrate-to-groups') ->expectsOutput('Going to un-split 1 transaction(s). This could take some time.') ->assertExitCode(0); } /** * @covers \FireflyIII\Console\Commands\Upgrade\MigrateToGroups */ public function testForced(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; $this->mock(TransactionJournalFactory::class); $repository = $this->mock(JournalRepositoryInterface::class); $repository->shouldReceive('getSplitJournals')->andReturn(new Collection); $configObject = new Configuration; $configObject->data = true; FireflyConfig::shouldReceive('get')->withArgs(['migrated_to_groups_4780', false])->andReturn($configObject)->once(); FireflyConfig::shouldReceive('set')->withArgs(['migrated_to_groups_4780', true])->once(); $this->artisan('firefly-iii:migrate-to-groups --force') ->expectsOutput('Forcing the migration.') ->expectsOutput('Found no split journals. Nothing to do.') ->assertExitCode(0); } /** * @covers \FireflyIII\Console\Commands\Upgrade\MigrateToGroups */ public function testNotSplit(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; $this->mock(TransactionJournalFactory::class); $repository = $this->mock(JournalRepositoryInterface::class); $withdrawal = $this->getRandomWithdrawal(); $repository->shouldReceive('getSplitJournals')->andReturn(new Collection([$withdrawal])); $configObject = new Configuration; $configObject->data = false; FireflyConfig::shouldReceive('get')->withArgs(['migrated_to_groups_4780', false])->andReturn($configObject)->once(); FireflyConfig::shouldReceive('set')->withArgs(['migrated_to_groups_4780', true])->once(); $this->artisan('firefly-iii:migrate-to-groups') ->expectsOutput('Going to un-split 1 transaction(s). This could take some time.') ->assertExitCode(0); } }