diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php
index 28f0eb040e..ae111b3827 100644
--- a/app/Http/Controllers/Transaction/SplitController.php
+++ b/app/Http/Controllers/Transaction/SplitController.php
@@ -63,6 +63,9 @@ class SplitController extends Controller
/** @var JournalTaskerInterface */
private $tasker;
+ /** @var JournalRepositoryInterface */
+ private $repository;
+
/**
*
*/
@@ -78,6 +81,7 @@ class SplitController extends Controller
$this->tasker = app(JournalTaskerInterface::class);
$this->attachments = app(AttachmentHelperInterface::class);
$this->currencies = app(CurrencyRepositoryInterface::class);
+ $this->repository = app(JournalRepositoryInterface::class);
app('view')->share('mainTitleIcon', 'fa-share-alt');
app('view')->share('title', trans('firefly.split-transactions'));
@@ -142,18 +146,17 @@ class SplitController extends Controller
/**
* @param SplitJournalFormRequest $request
- * @param JournalRepositoryInterface $repository
* @param TransactionJournal $journal
*
* @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
- public function update(SplitJournalFormRequest $request, JournalRepositoryInterface $repository, TransactionJournal $journal)
+ public function update(SplitJournalFormRequest $request, TransactionJournal $journal)
{
if ($this->isOpeningBalance($journal)) {
return $this->redirectToAccount($journal);
}
$data = $this->arrayFromInput($request);
- $journal = $repository->updateSplitJournal($journal, $data);
+ $journal = $this->repository->updateSplitJournal($journal, $data);
/** @var array $files */
$files = $request->hasFile('attachments') ? $request->file('attachments') : null;
// save attachments:
@@ -229,7 +232,8 @@ class SplitController extends Controller
$destinationAccounts = $journal->destinationAccountList();
$notes = '';
/** @var Note $note */
- $note = $journal->notes()->first();
+
+ $note = $this->repository->getNote($journal);
if (null !== $note) {
$notes = $note->text;
}
@@ -259,6 +263,7 @@ class SplitController extends Controller
'transactions' => $this->getTransactionDataFromJournal($journal),
];
// update transactions array with old request data.
+
$array['transactions'] = $this->updateWithPrevious($array['transactions'], $request->old());
return $array;
@@ -346,6 +351,7 @@ class SplitController extends Controller
return $array;
}
$old = $old['transactions'];
+
foreach ($old as $index => $row) {
if (isset($array[$index])) {
$array[$index] = array_merge($array[$index], $row);
diff --git a/app/Models/Tag.php b/app/Models/Tag.php
index 5a50dfe1a0..a9d674bb18 100644
--- a/app/Models/Tag.php
+++ b/app/Models/Tag.php
@@ -108,7 +108,7 @@ class Tag extends Model
*
* @throws \FireflyIII\Exceptions\FireflyException
*/
- public static function tagSum(self $tag): string
+ public static function tagSum(Tag $tag): string
{
$sum = '0';
/** @var TransactionJournal $journal */
diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php
index 2cb261e214..4bc95b9ef6 100644
--- a/app/Models/TransactionCurrency.php
+++ b/app/Models/TransactionCurrency.php
@@ -55,7 +55,7 @@ class TransactionCurrency extends Model
*
* @return TransactionCurrency
*/
- public static function routeBinder(self $currency)
+ public static function routeBinder(TransactionCurrency $currency)
{
if (auth()->check()) {
return $currency;
diff --git a/tests/Feature/Controllers/Transaction/SplitControllerTest.php b/tests/Feature/Controllers/Transaction/SplitControllerTest.php
index a193a90ab6..b66b932c3e 100644
--- a/tests/Feature/Controllers/Transaction/SplitControllerTest.php
+++ b/tests/Feature/Controllers/Transaction/SplitControllerTest.php
@@ -24,6 +24,7 @@ namespace Tests\Feature\Controllers\Transaction;
use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
use FireflyIII\Models\AccountType;
+use FireflyIII\Models\Note;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@@ -48,6 +49,7 @@ class SplitControllerTest extends TestCase
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::edit
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::__construct
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::arrayFromJournal
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::updateWithPrevious
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::getTransactionDataFromJournal
*/
public function testEdit()
@@ -74,6 +76,90 @@ class SplitControllerTest extends TestCase
$response->assertSee('
');
}
+ /**
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::edit
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::__construct
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::arrayFromJournal
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::updateWithPrevious
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::getTransactionDataFromJournal
+ */
+ public function testEditOldInput()
+ {
+ $currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
+ $accountRepository = $this->mock(AccountRepositoryInterface::class);
+ $budgetRepository = $this->mock(BudgetRepositoryInterface::class);
+ $deposit = TransactionJournal::where('transaction_type_id', 2)->where('user_id', $this->user()->id)->first();
+ $destination = $deposit->transactions()->where('amount', '>', 0)->first();
+ $account = $destination->account;
+ $transactions = factory(Transaction::class, 3)->make();
+ $tasker = $this->mock(JournalTaskerInterface::class);
+
+ $currencyRepository->shouldReceive('get')->once()->andReturn(new Collection);
+ $accountRepository->shouldReceive('getAccountsByType')->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])
+ ->andReturn(new Collection([$account]))->once();
+ $budgetRepository->shouldReceive('getActiveBudgets')->andReturn(new Collection);
+ $tasker->shouldReceive('getTransactionsOverview')->andReturn($transactions->toArray());
+
+ $old = [
+ 'transactions' => [
+ [
+ 'transaction_currency_id' => 1,
+ 'transaction_currency_code' => 'AB',
+ 'transaction_currency_symbol' => 'X',
+ 'foreign_amount' => '0',
+ 'foreign_currency_id' => 2,
+ 'foreign_currency_code' => 'CD',
+ 'foreign_currency_symbol' => 'Y',
+ ],
+ [
+ 'transaction_currency_id' => 1,
+ 'transaction_currency_code' => 'AB',
+ 'transaction_currency_symbol' => 'X',
+ 'foreign_amount' => '0',
+ 'foreign_currency_id' => 2,
+ 'foreign_currency_code' => 'CD',
+ 'foreign_currency_symbol' => 'Y',
+ ],
+ [
+ 'transaction_currency_id' => 1,
+ 'transaction_currency_code' => 'AB',
+ 'transaction_currency_symbol' => 'X',
+ 'foreign_amount' => '0',
+ 'foreign_currency_id' => 2,
+ 'foreign_currency_code' => 'CD',
+ 'foreign_currency_symbol' => 'Y',
+ ],
+ [
+ 'transaction_currency_id' => 1,
+ 'transaction_currency_code' => 'AB',
+ 'transaction_currency_symbol' => 'X',
+ 'foreign_amount' => '0',
+ 'foreign_currency_id' => 2,
+ 'foreign_currency_code' => 'CD',
+ 'foreign_currency_symbol' => 'Y',
+ ],
+ [
+ 'transaction_currency_id' => 1,
+ 'transaction_currency_code' => 'AB',
+ 'transaction_currency_symbol' => 'X',
+ 'foreign_amount' => '0',
+ 'foreign_currency_id' => 2,
+ 'foreign_currency_code' => 'CD',
+ 'foreign_currency_symbol' => 'Y',
+ ],
+
+ ],
+ ];
+ $this->session(['_old_input' => $old]);
+
+ $this->be($this->user());
+ $response = $this->get(route('transactions.split.edit', [$deposit->id]));
+ $response->assertStatus(200);
+ // has bread crumb
+ $response->assertSee('');
+ }
+
+
/**
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::edit
*/
@@ -89,6 +175,7 @@ class SplitControllerTest extends TestCase
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::edit
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::__construct
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::arrayFromJournal
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::updateWithPrevious
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::getTransactionDataFromJournal
*/
public function testEditSingle()
@@ -96,12 +183,19 @@ class SplitControllerTest extends TestCase
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepository = $this->mock(AccountRepositoryInterface::class);
$budgetRepository = $this->mock(BudgetRepositoryInterface::class);
+ $repository = $this->mock(JournalRepositoryInterface::class);
+ $note = new Note();
+ $note->id = 1;
+ $note->text = 'Hallo';
$transactions = factory(Transaction::class, 1)->make();
$tasker = $this->mock(JournalTaskerInterface::class);
$deposit = TransactionJournal::where('transaction_type_id', 2)->where('user_id', $this->user()->id)->first();
$destination = $deposit->transactions()->where('amount', '>', 0)->first();
$account = $destination->account;
+ $repository->shouldReceive('getNote')->andReturn($note);
+ $repository->shouldReceive('first')->once()->andReturn(new TransactionJournal);
+
$currencyRepository->shouldReceive('get')->once()->andReturn(new Collection);
$accountRepository->shouldReceive('getAccountsByType')->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])
->andReturn(new Collection([$account]))->once();
@@ -122,8 +216,6 @@ class SplitControllerTest extends TestCase
*/
public function testUpdate()
{
- //$this->markTestIncomplete('Mockery cannot yet handle PHP7.1 null argument method things.');
-
$this->session(['transactions.edit-split.uri' => 'http://localhost']);
$deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
$data = [
@@ -171,13 +263,30 @@ class SplitControllerTest extends TestCase
/**
* @covers \FireflyIII\Http\Controllers\Transaction\SplitController::update
+ * @covers \FireflyIII\Http\Controllers\Transaction\SplitController::isOpeningBalance
*/
public function testUpdateOpeningBalance()
{
$this->session(['transactions.edit-split.uri' => 'http://localhost']);
$opening = TransactionJournal::where('transaction_type_id', 4)->where('user_id', $this->user()->id)->first();
$data = [
- 'id' => $opening->id,
+ 'id' => $opening->id,
+ 'what' => 'deposit',
+ 'journal_description' => 'Updated salary',
+ 'journal_currency_id' => 1,
+ 'journal_destination_account_id' => 1,
+ 'journal_amount' => 1591,
+ 'date' => '2014-01-24',
+ 'tags' => '',
+ 'transactions' => [
+ [
+ 'description' => 'Split #1',
+ 'source_account_name' => 'Job',
+ 'transaction_currency_id' => 1,
+ 'amount' => 1591,
+ 'category' => '',
+ ],
+ ],
];
$this->be($this->user());
$response = $this->post(route('transactions.split.update', [$opening->id]), $data);