. */ declare(strict_types=1); namespace Tests\Unit\Services\Internal\Update; use FireflyIII\Factory\BudgetFactory; use FireflyIII\Factory\CategoryFactory; use FireflyIII\Models\Transaction; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Services\Internal\Update\TransactionUpdateService; use Log; use Tests\TestCase; /** * Class TransactionUpdateServiceTest */ class TransactionUpdateServiceTest extends TestCase { /** * */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService */ public function testReconcile(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; $transaction = $this->user()->transactions()->inRandomOrder()->first(); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->reconcile($transaction->id); $this->assertEquals($result->id, $transaction->id); $this->assertEquals(true, $result->reconciled); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testReconcileNull(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->reconcile(-1); $this->assertNull($result); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testUpdateBudget(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var Transaction $source */ $source = $this->user()->transactions()->where('amount', '>', 0)->inRandomOrder()->first(); $budget = $this->user()->budgets()->inRandomOrder()->first(); $factory = $this->mock(BudgetFactory::class); $factory->shouldReceive('setUser'); $factory->shouldReceive('find')->andReturn($budget); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->updateBudget($source, $budget->id); $this->assertEquals(1, $result->budgets()->count()); $this->assertEquals($budget->name, $result->budgets()->first()->name); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testUpdateCategory(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var Transaction $source */ $source = $this->user()->transactions()->where('amount', '>', 0)->inRandomOrder()->first(); $category = $this->user()->categories()->inRandomOrder()->first(); $factory = $this->mock(CategoryFactory::class); $factory->shouldReceive('setUser'); $factory->shouldReceive('findOrCreate')->andReturn($category); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->updateCategory($source, $category->name); $this->assertEquals(1, $result->categories()->count()); $this->assertEquals($category->name, $result->categories()->first()->name); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testUpdateDestinationBasic(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var Transaction $source */ $source = $this->user()->transactions()->where('amount', '>', 0)->inRandomOrder()->first(); $data = [ 'currency_id' => 1, 'currency_code' => null, 'description' => 'Some new description', 'reconciled' => false, 'foreign_amount' => null, 'budget_id' => null, 'budget_name' => null, 'destination_id' => (int)$source->account_id, 'destination_name' => null, 'category_id' => null, 'category_name' => null, 'amount' => $source->amount, 'foreign_currency_id' => null, 'foreign_currency_code' => null, ]; // mock repository: $accountRepos = $this->mock(AccountRepositoryInterface::class); $accountRepos->shouldReceive('setUser'); $accountRepos->shouldReceive('findNull')->andReturn($source->account); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->update($source, $data); $this->assertEquals($source->id, $result->id); $this->assertEquals($result->description, $data['description']); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testUpdateDestinationForeign(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var Transaction $source */ $source = $this->user()->transactions()->where('amount', '>', 0)->inRandomOrder()->first(); $data = [ 'currency_id' => 1, 'currency_code' => null, 'description' => 'Some new description', 'reconciled' => false, 'foreign_amount' => '12.34', 'budget_id' => null, 'budget_name' => null, 'destination_id' => (int)$source->account_id, 'destination_name' => null, 'category_id' => null, 'category_name' => null, 'amount' => $source->amount, 'foreign_currency_id' => 2, 'foreign_currency_code' => null, ]; // mock repository: $accountRepos = $this->mock(AccountRepositoryInterface::class); $accountRepos->shouldReceive('setUser'); $accountRepos->shouldReceive('findNull')->andReturn($source->account); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->update($source, $data); $this->assertEquals($source->id, $result->id); $this->assertEquals($result->description, $data['description']); $this->assertEquals($data['foreign_amount'], $result->foreign_amount); $this->assertEquals($data['foreign_currency_id'], $result->foreign_currency_id); } /** * @covers \FireflyIII\Services\Internal\Update\TransactionUpdateService * @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait */ public function testUpdateSourceBasic(): void { $this->markTestIncomplete('Needs to be rewritten for v4.8.0'); return; /** @var Transaction $source */ $source = $this->user()->transactions()->where('amount', '<', 0)->inRandomOrder()->first(); $data = [ 'currency_id' => 1, 'currency_code' => null, 'description' => 'Some new description', 'reconciled' => false, 'foreign_amount' => null, 'budget_id' => null, 'budget_name' => null, 'source_id' => (int)$source->account_id, 'source_name' => null, 'category_id' => null, 'category_name' => null, 'amount' => $source->amount, 'foreign_currency_id' => null, 'foreign_currency_code' => null, ]; // mock repository: $accountRepos = $this->mock(AccountRepositoryInterface::class); $accountRepos->shouldReceive('setUser'); $accountRepos->shouldReceive('findNull')->andReturn($source->account); /** @var TransactionUpdateService $service */ $service = app(TransactionUpdateService::class); $service->setUser($this->user()); $result = $service->update($source, $data); $this->assertEquals($source->id, $result->id); $this->assertEquals($result->description, $data['description']); } }