mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
New tests for the repeated expenses.
This commit is contained in:
@@ -194,6 +194,41 @@ class TestContentSeeder extends Seeder
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// recurring transaction
|
||||||
|
$recurring = PiggyBank::create(
|
||||||
|
[
|
||||||
|
'account_id' => $savings->id,
|
||||||
|
'name' => 'Nieuwe kleding',
|
||||||
|
'targetamount' => 1000,
|
||||||
|
'startdate' => Carbon::now()->subMonth()->format('Y-m-d'),
|
||||||
|
'targetdate' => Carbon::now()->format('Y-m-d'),
|
||||||
|
'repeats' => 1,
|
||||||
|
'rep_length' => 'month',
|
||||||
|
'rep_every' => 0,
|
||||||
|
'rep_times' => 0,
|
||||||
|
'reminder' => 'month',
|
||||||
|
'reminder_skip' => 0,
|
||||||
|
'remind_me' => 1,
|
||||||
|
'order' => 0,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
PiggyBankRepetition::create(
|
||||||
|
[
|
||||||
|
'piggy_bank_id' => $recurring->id,
|
||||||
|
'startdate' => Carbon::now()->format('Y-m-d'),
|
||||||
|
'targetdate' => Carbon::now()->addMonth()->format('Y-m-d'),
|
||||||
|
'currentamount' => 0
|
||||||
|
]
|
||||||
|
);
|
||||||
|
PiggyBankRepetition::create(
|
||||||
|
[
|
||||||
|
'piggy_bank_id' => $recurring->id,
|
||||||
|
'startdate' => Carbon::now()->subMonth()->format('Y-m-d'),
|
||||||
|
'targetdate' => Carbon::now()->format('Y-m-d'),
|
||||||
|
'currentamount' => 0
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// bill
|
// bill
|
||||||
$firstBill = \Bill::create(
|
$firstBill = \Bill::create(
|
||||||
[
|
[
|
||||||
|
@@ -9,6 +9,9 @@ use Watson\Validating\ValidatingTrait;
|
|||||||
class PiggyBank extends Eloquent
|
class PiggyBank extends Eloquent
|
||||||
{
|
{
|
||||||
use ValidatingTrait;
|
use ValidatingTrait;
|
||||||
|
public $fillable
|
||||||
|
= ['account_id', 'name', 'targetamount', 'startdate', 'targetdate', 'repeats', 'rep_length', 'rep_every', 'rep_times', 'reminder', 'reminder_skip',
|
||||||
|
'remind_me', 'order'];
|
||||||
protected $rules
|
protected $rules
|
||||||
= ['account_id' => 'required|exists:accounts,id', // link to Account
|
= ['account_id' => 'required|exists:accounts,id', // link to Account
|
||||||
'name' => 'required|between:1,255', // name
|
'name' => 'required|between:1,255', // name
|
||||||
@@ -23,9 +26,6 @@ class PiggyBank extends Eloquent
|
|||||||
'reminder_skip' => 'required|min:0|max:100', // every week? every 2 months?
|
'reminder_skip' => 'required|min:0|max:100', // every week? every 2 months?
|
||||||
'remind_me' => 'required|boolean', 'order' => 'required:min:1', // not yet used.
|
'remind_me' => 'required|boolean', 'order' => 'required:min:1', // not yet used.
|
||||||
];
|
];
|
||||||
public $fillable
|
|
||||||
= ['account_id', 'name', 'targetamount', 'startdate', 'targetdate', 'repeats', 'rep_length', 'rep_every', 'rep_times', 'reminder', 'reminder_skip',
|
|
||||||
'remind_me', 'order'];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||||
@@ -95,7 +95,7 @@ class PiggyBank extends Eloquent
|
|||||||
|
|
||||||
return $rep;
|
return $rep;
|
||||||
} else {
|
} else {
|
||||||
$query = $this->piggyBankRepetitions()->where(
|
$query = $this->piggyBankRepetitions()->where(
|
||||||
function ($q) {
|
function ($q) {
|
||||||
|
|
||||||
$q->where(
|
$q->where(
|
||||||
@@ -105,28 +105,28 @@ class PiggyBank extends Eloquent
|
|||||||
function ($q) {
|
function ($q) {
|
||||||
$today = new Carbon;
|
$today = new Carbon;
|
||||||
$q->whereNull('startdate');
|
$q->whereNull('startdate');
|
||||||
$q->orWhere('startdate', '<=', $today->format('Y-m-d'));
|
$q->orWhere('startdate', '<=', $today->format('Y-m-d 00:00:00'));
|
||||||
}
|
}
|
||||||
)->where(
|
)->where(
|
||||||
function ($q) {
|
function ($q) {
|
||||||
$today = new Carbon;
|
$today = new Carbon;
|
||||||
$q->whereNull('targetdate');
|
$q->whereNull('targetdate');
|
||||||
$q->orWhere('targetdate', '>=', $today->format('Y-m-d'));
|
$q->orWhere('targetdate', '>=', $today->format('Y-m-d 00:00:00'));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
)->orWhere(
|
)->orWhere(
|
||||||
function ($q) {
|
function ($q) {
|
||||||
$today = new Carbon;
|
$today = new Carbon;
|
||||||
$q->where('startdate', '>=', $today->format('Y-m-d'));
|
$q->where('startdate', '>=', $today->format('Y-m-d 00:00:00'));
|
||||||
$q->where('targetdate', '>=', $today->format('Y-m-d'));
|
$q->where('targetdate', '>=', $today->format('Y-m-d 00:00:00'));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
)->orderBy('startdate', 'ASC');
|
||||||
->orderBy('startdate', 'ASC');
|
$result = $query->first(['piggy_bank_repetitions.*']);
|
||||||
$result = $query->first(['piggy_bank_repetitions.*']);
|
\Log::debug('Result is null: ' . boolstr(is_null($result)));
|
||||||
$this->currentRep = $result;
|
$this->currentRep = $result;
|
||||||
\Log::debug('Found relevant rep in currentRelevantRep(): ' . $result->id);
|
\Log::debug('Found relevant rep in currentRelevantRep(): ' . $result->id);
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
@extends('layouts.default')
|
@extends('layouts.default')
|
||||||
@section('content')
|
@section('content')
|
||||||
{{ Breadcrumbs::renderIfExists(Route::getCurrentRoute()->getName()) }}
|
{{ Breadcrumbs::renderIfExists(Route::getCurrentRoute()->getName()) }}
|
||||||
{{Form::open(['class' => 'form-horizontal','url' => route('repeated.store')])}}
|
{{Form::open(['class' => 'form-horizontal','id' => 'store','url' => route('repeated.store')])}}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class RepeatedExpenseCest
|
|
||||||
*/
|
|
||||||
class RepeatedExpenseCest {
|
|
||||||
/**
|
|
||||||
* @param FunctionalTester $I
|
|
||||||
*/
|
|
||||||
public function _after(FunctionalTester $I)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param FunctionalTester $I
|
|
||||||
*/
|
|
||||||
public function _before(FunctionalTester $I)
|
|
||||||
{
|
|
||||||
$I->amLoggedAs(['email' => 'thegrumpydictator@gmail.com', 'password' => 'james']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
151
tests/functional/RepeatedExpenseControllerCest.php
Normal file
151
tests/functional/RepeatedExpenseControllerCest.php
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class RepeatedExpenseControllerCest
|
||||||
|
*/
|
||||||
|
class RepeatedExpenseControllerCest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param FunctionalTester $I
|
||||||
|
*/
|
||||||
|
public function _after(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param FunctionalTester $I
|
||||||
|
*/
|
||||||
|
public function _before(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->amLoggedAs(['email' => 'thegrumpydictator@gmail.com', 'password' => 'james']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('create a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/create');
|
||||||
|
$I->see('Create new repeated expense');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('delete a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/delete/4');
|
||||||
|
$I->see('Delete "Nieuwe kleding"');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('destroy a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/delete/4');
|
||||||
|
$I->submitForm('#destroy', []);
|
||||||
|
$I->dontSeeInDatabase('piggy_banks', ['id' => 5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('edit a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/edit/4');
|
||||||
|
$I->see('Edit repeated expense "Nieuwe kleding"');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('see all recurring transactions');
|
||||||
|
$I->amOnPage('/repeatedexpenses');
|
||||||
|
$I->see('Overview');
|
||||||
|
$I->see('Nieuwe kleding');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('view a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/show/4');
|
||||||
|
$I->see('Nieuwe kleding');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('store a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/create');
|
||||||
|
$I->submitForm(
|
||||||
|
'#store', [
|
||||||
|
'name' => 'TestRepeatedExpense',
|
||||||
|
'account_id' => 1,
|
||||||
|
'targetamount' => 1000,
|
||||||
|
'targetdate' => '2014-05-01',
|
||||||
|
'rep_length' => 'month',
|
||||||
|
'rep_every' => 0,
|
||||||
|
'rep_times' => 0,
|
||||||
|
'remind_me' => 1,
|
||||||
|
'reminder' => 'month',
|
||||||
|
'post_submit_action' => 'store',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$I->see('Piggy bank "TestRepeatedExpense" stored.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('update a recurring transaction');
|
||||||
|
$I->amOnPage('/repeatedexpenses/edit/4');
|
||||||
|
$I->submitForm(
|
||||||
|
'#update', [
|
||||||
|
'name' => 'Nieuwe kleding!',
|
||||||
|
'account_id' => 2,
|
||||||
|
'targetamount' => 1000.00,
|
||||||
|
'targetdate' => '2014-12-30',
|
||||||
|
'rep_length' => 'month',
|
||||||
|
'rep_every' => 0,
|
||||||
|
'rep_times' => 0,
|
||||||
|
'remind_me' => 1,
|
||||||
|
'reminder' => 'month',
|
||||||
|
'post_submit_action' => 'update',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$I->see('Repeated expense "Nieuwe kleding!" updated.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAndReturnToEdit(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('update a recurring transaction and return to edit screen');
|
||||||
|
$I->amOnPage('/repeatedexpenses/edit/4');
|
||||||
|
$I->submitForm(
|
||||||
|
'#update', [
|
||||||
|
'name' => 'Nieuwe kleding!',
|
||||||
|
'account_id' => 2,
|
||||||
|
'targetamount' => 1000.00,
|
||||||
|
'targetdate' => '2014-12-30',
|
||||||
|
'rep_length' => 'month',
|
||||||
|
'rep_every' => 0,
|
||||||
|
'rep_times' => 0,
|
||||||
|
'remind_me' => 1,
|
||||||
|
'reminder' => 'month',
|
||||||
|
'post_submit_action' => 'return_to_edit',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$I->see('Repeated expense "Nieuwe kleding!" updated.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateFail(FunctionalTester $I)
|
||||||
|
{
|
||||||
|
$I->wantTo('try to update a recurring transaction and fail');
|
||||||
|
$I->amOnPage('/repeatedexpenses/edit/4');
|
||||||
|
$I->submitForm(
|
||||||
|
'#update', [
|
||||||
|
'name' => '',
|
||||||
|
'account_id' => 2,
|
||||||
|
'targetamount' => 1000.00,
|
||||||
|
'targetdate' => '2014-12-30',
|
||||||
|
'rep_length' => 'month',
|
||||||
|
'rep_every' => 0,
|
||||||
|
'rep_times' => 0,
|
||||||
|
'remind_me' => 1,
|
||||||
|
'reminder' => 'month',
|
||||||
|
'post_submit_action' => 'update',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$I->see('The name field is required.');
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user