diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php
index 6802b9b235..6437e97a33 100644
--- a/app/Http/Controllers/BudgetController.php
+++ b/app/Http/Controllers/BudgetController.php
@@ -191,10 +191,11 @@ class BudgetController extends Controller
/**
* @param Request $request
+ * @param string $moment
*
* @return View
*/
- public function noBudget(Request $request, string $moment = '')
+ public function noBudget(Request $request, JournalRepositoryInterface $repository, string $moment = '')
{
// default values:
$range = Preferences::get('viewRange', '1M')->data;
@@ -205,6 +206,9 @@ class BudgetController extends Controller
// prep for "all" view.
if ($moment === 'all') {
$subTitle = trans('firefly.all_journals_without_budget');
+ $first = $repository->first();
+ $start = $first->date ?? new Carbon;
+ $end = new Carbon;
}
// prep for "specific date" view.
diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php
index b6aceb646d..c33e58cfd8 100644
--- a/resources/lang/en_US/firefly.php
+++ b/resources/lang/en_US/firefly.php
@@ -115,6 +115,7 @@ return [
'multi_select_no_selection' => 'None selected',
'multi_select_all_selected' => 'All selected',
'multi_select_filter_placeholder' => 'Find..',
+ 'all_journals_without_budget' => 'All transactions without a budget',
// repeat frequencies:
diff --git a/tests/Feature/Controllers/BudgetControllerTest.php b/tests/Feature/Controllers/BudgetControllerTest.php
index d6d0882781..fca3c8dc29 100644
--- a/tests/Feature/Controllers/BudgetControllerTest.php
+++ b/tests/Feature/Controllers/BudgetControllerTest.php
@@ -142,6 +142,7 @@ class BudgetControllerTest extends TestCase
/**
* @covers \FireflyIII\Http\Controllers\BudgetController::noBudget
+ * @covers \FireflyIII\Http\Controllers\BudgetController::noBudgetPeriodEntries
* @dataProvider dateRangeProvider
*
* @param string $range
@@ -151,10 +152,11 @@ class BudgetControllerTest extends TestCase
// mock stuff
$collector = $this->mock(JournalCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
- $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal);
+ $journalRepos->shouldReceive('first')->andReturn(new TransactionJournal);
$collector->shouldReceive('setAllAssetAccounts')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
+ $collector->shouldReceive('getJournals')->andReturn(new Collection);
$collector->shouldReceive('setLimit')->andReturnSelf();
$collector->shouldReceive('setPage')->andReturnSelf();
$collector->shouldReceive('withoutBudget')->andReturnSelf();
@@ -172,6 +174,73 @@ class BudgetControllerTest extends TestCase
$response->assertSee('
');
}
+ /**
+ * @covers \FireflyIII\Http\Controllers\BudgetController::noBudget
+ * @dataProvider dateRangeProvider
+ *
+ * @param string $range
+ */
+ public function testNoBudgetAll(string $range)
+ {
+ // mock stuff
+ $collector = $this->mock(JournalCollectorInterface::class);
+ $journalRepos = $this->mock(JournalRepositoryInterface::class);
+ $journalRepos->shouldReceive('first')->andReturn(new TransactionJournal);
+
+ $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf();
+ $collector->shouldReceive('setRange')->andReturnSelf();
+ $collector->shouldReceive('setLimit')->andReturnSelf();
+ $collector->shouldReceive('setPage')->andReturnSelf();
+ $collector->shouldReceive('withoutBudget')->andReturnSelf();
+ $collector->shouldReceive('withCategoryInformation')->andReturnSelf();
+ $collector->shouldReceive('getJournals')->andReturn(new Collection);
+ $collector->shouldReceive('getPaginatedJournals')->andReturn(new LengthAwarePaginator([], 0, 10));
+
+ $date = new Carbon();
+ $this->session(['start' => $date, 'end' => clone $date]);
+
+ $this->be($this->user());
+ $this->changeDateRange($this->user(), $range);
+ $response = $this->get(route('budgets.no-budget', ['all']));
+ $response->assertStatus(200);
+ // has bread crumb
+ $response->assertSee('');
+ }
+
+ /**
+ * @covers \FireflyIII\Http\Controllers\BudgetController::noBudget
+ * @covers \FireflyIII\Http\Controllers\BudgetController::noBudgetPeriodEntries
+ * @dataProvider dateRangeProvider
+ *
+ * @param string $range
+ */
+ public function testNoBudgetDate(string $range)
+ {
+ // mock stuff
+ $collector = $this->mock(JournalCollectorInterface::class);
+ $journalRepos = $this->mock(JournalRepositoryInterface::class);
+ $journalRepos->shouldReceive('first')->andReturn(new TransactionJournal);
+
+ $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf();
+ $collector->shouldReceive('setRange')->andReturnSelf();
+ $collector->shouldReceive('getJournals')->andReturn(new Collection);
+ $collector->shouldReceive('setLimit')->andReturnSelf();
+ $collector->shouldReceive('setPage')->andReturnSelf();
+ $collector->shouldReceive('withoutBudget')->andReturnSelf();
+ $collector->shouldReceive('withCategoryInformation')->andReturnSelf();
+ $collector->shouldReceive('getPaginatedJournals')->andReturn(new LengthAwarePaginator([], 0, 10));
+
+ $date = new Carbon();
+ $this->session(['start' => $date, 'end' => clone $date]);
+
+ $this->be($this->user());
+ $this->changeDateRange($this->user(), $range);
+ $response = $this->get(route('budgets.no-budget', ['2016-01-01']));
+ $response->assertStatus(200);
+ // has bread crumb
+ $response->assertSee('');
+ }
+
/**
* @covers \FireflyIII\Http\Controllers\BudgetController::postUpdateIncome
*/