mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-12-23 03:31:25 +00:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b4bc23815 | ||
|
|
274dba7408 | ||
|
|
31708ca29e | ||
|
|
671b025588 | ||
|
|
a7956e4856 | ||
|
|
355862025a | ||
|
|
a2a39ee0f8 | ||
|
|
ec8e39c16f | ||
|
|
88f714999e | ||
|
|
c0c2aa3be0 | ||
|
|
822044820e | ||
|
|
6ffc182142 | ||
|
|
3d54a78573 | ||
|
|
8ddf7d953a | ||
|
|
8b9e9ad103 | ||
|
|
5737224c40 | ||
|
|
ec9aacbcae | ||
|
|
9395454997 | ||
|
|
66198a8d98 | ||
|
|
96ed9a4256 | ||
|
|
10e54b2263 | ||
|
|
cf00922ad2 | ||
|
|
84e8e007a5 | ||
|
|
d07b2e773b | ||
|
|
506ef7b0b9 | ||
|
|
2cd5dae8e2 | ||
|
|
a1cd49c111 | ||
|
|
aca2973aef | ||
|
|
0a7a691c95 | ||
|
|
72906a7afd | ||
|
|
d1a4a83570 | ||
|
|
e0396b29e8 | ||
|
|
536833cfe0 | ||
|
|
317b02d1b9 | ||
|
|
75e279ea0d | ||
|
|
dc2ad21f4c | ||
|
|
484d49aae1 | ||
|
|
ca39438ad4 | ||
|
|
49a65ebff4 | ||
|
|
befdc05084 | ||
|
|
1fbffe761b |
@@ -15,4 +15,5 @@ EMAIL_SMTP=
|
||||
EMAIL_DRIVER=smtp
|
||||
EMAIL_USERNAME=
|
||||
EMAIL_PASSWORD=
|
||||
ANALYTICS_ID=
|
||||
ANALYTICS_ID=
|
||||
EMAIL_PRETEND=false
|
||||
@@ -14,4 +14,5 @@ SESSION_DRIVER=array
|
||||
EMAIL_SMTP=
|
||||
EMAIL_USERNAME=
|
||||
EMAIL_PASSWORD=
|
||||
ANALYTICS_ID=ABC
|
||||
ANALYTICS_ID=ABC
|
||||
EMAIL_PRETEND=true
|
||||
92
README.md
92
README.md
@@ -1,46 +1,62 @@
|
||||
Firefly III (v3.4.0.3)
|
||||
===========
|
||||
# Firefly III
|
||||
#### v3.4.0.5
|
||||
|
||||
[](https://travis-ci.org/JC5/firefly-iii)
|
||||
[](http://stillmaintained.com/JC5/firefly-iii)
|
||||
[](https://insight.sensiolabs.com/projects/d44c7012-5f50-41ad-add8-8445330e4102)
|
||||
[](https://codeclimate.com/github/JC5/firefly-iii)
|
||||
[](https://coveralls.io/r/JC5/firefly-iii?branch=master)
|
||||
[](https://coveralls.io/r/JC5/firefly-iii?branch=develop)
|
||||
|
||||
[](https://packagist.org/packages/grumpydictator/firefly-iii)
|
||||
[](https://packagist.org/packages/grumpydictator/firefly-iii)
|
||||
[](https://packagist.org/packages/grumpydictator/firefly-iii)
|
||||
[](https://packagist.org/packages/grumpydictator/firefly-iii)
|
||||

|
||||
## About
|
||||
|
||||
Firefly III is a tool to help you manage your finances. Please read the full description [in the wiki](https://github.com/JC5/firefly-iii/wiki/full-description).
|
||||
|
||||
Firefly Mark III is a new version of Firefly built upon best practices and lessons learned
|
||||
from building [Firefly](https://github.com/JC5/Firefly). It's Mark III since the original Firefly never made it outside of my
|
||||
laptop and [Firefly II](https://github.com/JC5/Firefly) is live.
|
||||
|
||||
If you're not sure if this tool is for you, please read the [full description](https://github.com/JC5/firefly-iii/wiki/full-description).
|
||||
|
||||
To install and use Firefly III, please read [the installation guide](https://github.com/JC5/firefly-iii/wiki/Installation),
|
||||
[the upgrade guide](https://github.com/JC5/firefly-iii/wiki/Upgrade-instructions) (if applicable) and the **[first use guide](https://github.com/JC5/firefly-iii/wiki/First-use)**.
|
||||
"Firefly III" is a financial manager. It can help you keep track of expenses, income, budgets and everything in between. It even supports credit cards, shared
|
||||
household accounts and savings accounts! It's pretty fancy. You should use it to save and organise money.
|
||||
|
||||
If you want to try out Firefly III, you can do so on [this dedicated website](https://geld.nder.be/). This site always runs the latest version of Firefly III. If you want to use it, please read the [privacy considerations](https://github.com/JC5/firefly-iii/wiki/Privacy-on-demo-site) for this demo-site.
|
||||
Firefly is a system you'll have install yourself on webhosting of your choosing.
|
||||
|
||||
Personal financial management is pretty difficult, and everybody has their own approach to it. Some people
|
||||
make budgets, other people limit their cashflow by throwing away their credit cards, others get a better job.
|
||||
There are tons of ways to save and earn money.
|
||||
|
||||
|
||||
To get to know Firefly, and to see if it fits you, check out these resources:
|
||||
|
||||
- The screenshots below on this very page.
|
||||
- The featurelist below, also on this very page.
|
||||
- The [full description](https://github.com/JC5/firefly-iii/wiki/full-description), which will tell you how Firefly works,
|
||||
and the philosophy behind it.
|
||||
|
||||
|
||||
### About the name (if you care)
|
||||
|
||||
It's III, or 3, because [version 2](https://github.com/JC5/Firefly) and version 1 (not online) preceded it. It has been growing steadily ever since.
|
||||
|
||||
## Running and installing
|
||||
|
||||
If you're still interested please read [the installation guide](https://github.com/JC5/firefly-iii/wiki/Installation),
|
||||
[the upgrade guide](https://github.com/JC5/firefly-iii/wiki/Upgrade-instructions) (if applicable)
|
||||
and the **[first use guide](https://github.com/JC5/firefly-iii/wiki/First-use)**.
|
||||
|
||||
If you want to try out Firefly III, you can do so on [this dedicated website](https://geld.nder.be/).
|
||||
This site always runs the latest version of Firefly III. If you want to use it, please read the [privacy considerations](https://github.com/JC5/firefly-iii/wiki/Privacy-on-demo-site) for this demo-site.
|
||||
|
||||
## Current features
|
||||
|
||||
- [A double-entry bookkeeping system](https://en.wikipedia.org/wiki/Double-entry_bookkeeping_system);
|
||||
- You can store, edit and remove withdrawals, deposits and transfers. This allows you full financial management;
|
||||
- You can store, edit and remove [withdrawals, deposits and transfers](https://en.wikipedia.org/wiki/Financial_transaction). This allows you full financial management;
|
||||
- You can manage different types of accounts
|
||||
- Asset accounts
|
||||
- Shared asset accounts (household accounts)
|
||||
- [Asset](https://en.wikipedia.org/wiki/Asset) accounts
|
||||
- Shared [asset accounts](https://en.wikipedia.org/wiki/Asset) ([household accounts](https://en.wikipedia.org/wiki/Household))
|
||||
- Saving accounts
|
||||
- Credit cards
|
||||
- It's possible to create, change and manage money using _[budgets](https://en.wikipedia.org/wiki/Envelope_system)_;
|
||||
- Organize transactions using categories;
|
||||
- Save towards a goal using piggy banks;
|
||||
- Predict and anticipate bills;
|
||||
- View income / expense reports;
|
||||
- Lots of help text in case you don't get it;
|
||||
- Save towards a goal using [piggy banks](https://en.wikipedia.org/wiki/Piggy_bank);
|
||||
- Predict and anticipate [bills](https://en.wikipedia.org/wiki/Invoice);
|
||||
- View income / expense [reports](https://en.wikipedia.org/wiki/Financial_statement);
|
||||
- Organize expenses using tags;
|
||||
- Lots of help text in case you don't get it.
|
||||
|
||||
Everything is organised:
|
||||
|
||||
@@ -50,24 +66,10 @@ Everything is organised:
|
||||
- Lots of charts because we all love them.
|
||||
- Financial reporting showing you how well you are doing;
|
||||
|
||||
## Changes
|
||||
|
||||
Firefly III will feature, but does not feature yet:
|
||||
|
||||
|
||||
- More control over other resources outside of personal finance
|
||||
- Debts
|
||||
- More test-coverage;
|
||||
- Firefly will be able to split transactions; a single purchase can be split in multiple entries, for more fine-grained control.
|
||||
- Firefly will be able to join transactions.
|
||||
- Any other features I might not have thought of.
|
||||
|
||||
Some stuff has been removed:
|
||||
|
||||
- The nesting of budgets, categories and beneficiaries is removed because it was pretty pointless.
|
||||
|
||||
## Screenshots
|
||||
|
||||
_Please note that everything in these screenshots is fictional and may not be realistic._
|
||||
|
||||

|
||||
|
||||

|
||||
@@ -83,6 +85,10 @@ Some stuff has been removed:
|
||||

|
||||
|
||||
## Current state
|
||||
I have the basics up and running. Test coverage is currently coming, slowly.
|
||||
|
||||
Questions, ideas or other things to contribute? [Let me know](https://github.com/JC5/firefly-iii/issues/new)!
|
||||
Firefly III is pretty much all grown up. Full test coverage (nerd alert!) is coming. One of the things on the todo-list
|
||||
is adding translations.
|
||||
|
||||
Questions, ideas, bugs or other things to contribute? [Let me know](https://github.com/JC5/firefly-iii/issues/new)!
|
||||
|
||||
If you like this tool, feel free to [donate me some beer money](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2ZMV952UUSCLU&lc=NL&item_name=Development%20of%20Firefly¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted).
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* Class Command
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Commands
|
||||
*/
|
||||
abstract class Command
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
/**
|
||||
* Class Kernel
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Console
|
||||
*/
|
||||
class Kernel extends ConsoleKernel
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/**
|
||||
* Class Event
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Events
|
||||
*/
|
||||
abstract class Event
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Queue\SerializesModels;
|
||||
/**
|
||||
* Class JournalCreated
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Events
|
||||
*/
|
||||
class JournalCreated extends Event
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Queue\SerializesModels;
|
||||
/**
|
||||
* Class JournalDeleted
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Events
|
||||
*/
|
||||
class JournalDeleted extends Event
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Queue\SerializesModels;
|
||||
/**
|
||||
* Class JournalSaved
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Events
|
||||
*/
|
||||
class JournalSaved extends Event
|
||||
|
||||
@@ -6,6 +6,7 @@ namespace FireflyIII\Exceptions;
|
||||
/**
|
||||
* Class FireflyException
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Exceptions
|
||||
*/
|
||||
class FireflyException extends \Exception
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
/**
|
||||
* Class Handler
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Exceptions
|
||||
*/
|
||||
class Handler extends ExceptionHandler
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace FireflyIII\Exceptions;
|
||||
/**
|
||||
* Class NotImplementedException
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Exceptions
|
||||
*/
|
||||
class NotImplementedException extends \Exception
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace FireflyIII\Exceptions;
|
||||
/**
|
||||
* Class ValidationExceptions
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Exception
|
||||
*/
|
||||
class ValidationException extends \Exception
|
||||
|
||||
@@ -5,6 +5,7 @@ use FireflyIII\Events\JournalDeleted;
|
||||
/**
|
||||
* Class JournalDeletedHandler
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Handlers\Events
|
||||
*/
|
||||
class JournalDeletedHandler
|
||||
|
||||
@@ -38,6 +38,7 @@ class AuthController extends Controller
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\Guard $auth
|
||||
* @param \Illuminate\Contracts\Auth\Registrar $registrar
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
*/
|
||||
public function __construct(Guard $auth, Registrar $registrar)
|
||||
@@ -51,7 +52,9 @@ class AuthController extends Controller
|
||||
/**
|
||||
* Show the application login form.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Http\Response
|
||||
*
|
||||
*/
|
||||
public function getLogin()
|
||||
{
|
||||
@@ -73,7 +76,9 @@ class AuthController extends Controller
|
||||
$this->throwValidationException(
|
||||
$request, $validator
|
||||
);
|
||||
// @codeCoverageIgnoreStart
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
$data = $request->all();
|
||||
$data['password'] = bcrypt($data['password']);
|
||||
|
||||
@@ -7,7 +7,7 @@ use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Class PasswordController
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Controllers\Auth
|
||||
*/
|
||||
class PasswordController extends Controller
|
||||
|
||||
@@ -149,6 +149,7 @@ class GoogleChartController extends Controller
|
||||
{
|
||||
$chart->addColumn('Budget', 'string');
|
||||
$chart->addColumn('Left', 'number');
|
||||
$chart->addColumn('Spent', 'number');
|
||||
$chart->addColumn('Overspent', 'number');
|
||||
|
||||
$budgets = $repository->getBudgets();
|
||||
@@ -160,30 +161,31 @@ class GoogleChartController extends Controller
|
||||
$repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end);
|
||||
if ($repetitions->count() == 0) {
|
||||
$expenses = $repository->sumBudgetExpensesInPeriod($budget, $start, $end);
|
||||
$allEntries->push([$budget->name, 0, $expenses]);
|
||||
$allEntries->push([$budget->name, 0, 0, $expenses]);
|
||||
continue;
|
||||
}
|
||||
/** @var LimitRepetition $repetition */
|
||||
foreach ($repetitions as $repetition) {
|
||||
$expenses = $repository->sumBudgetExpensesInPeriod($budget, $repetition->startdate, $repetition->enddate);
|
||||
$allEntries->push([$budget->name . ' (' . $repetition->startdate->format('j M Y') . ')', floatval($repetition->amount), $expenses]);
|
||||
$expenses = $repository->sumBudgetExpensesInPeriod($budget, $repetition->startdate, $repetition->enddate);
|
||||
$left = $expenses < floatval($repetition->amount) ? floatval($repetition->amount) - $expenses : 0;
|
||||
$spent = $expenses > floatval($repetition->amount) ? 0 : $expenses;
|
||||
$overspent = $expenses > floatval($repetition->amount) ? $expenses - floatval($repetition->amount) : 0;
|
||||
$allEntries->push(
|
||||
[$budget->name . ' (' . $repetition->startdate->format('j M Y') . ')',
|
||||
$left,
|
||||
$spent,
|
||||
$overspent
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$noBudgetExpenses = $repository->getWithoutBudgetSum($start, $end);
|
||||
$allEntries->push(['(no budget)', 0, $noBudgetExpenses]);
|
||||
$allEntries->push(['(no budget)', 0, 0, $noBudgetExpenses]);
|
||||
|
||||
foreach ($allEntries as $entry) {
|
||||
if ($entry[2] > 0) {
|
||||
$left = $entry[1] - $entry[2];
|
||||
if ($left > 0) {
|
||||
$chart->addRow($entry[0], $left, null);
|
||||
} else {
|
||||
if ($left < 0) {
|
||||
$chart->addRow($entry[0], null, $left);
|
||||
}
|
||||
}
|
||||
|
||||
if ($entry[1] != 0 || $entry[2] != 0 || $entry[3] != 0) {
|
||||
$chart->addRow($entry[0], $entry[1], $entry[2], $entry[3]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
||||
/**
|
||||
* Class Authenticate
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Middleware
|
||||
*/
|
||||
class Authenticate
|
||||
|
||||
@@ -8,6 +8,7 @@ use Illuminate\Http\Request;
|
||||
/**
|
||||
* Class RedirectIfAuthenticated
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Middleware
|
||||
*/
|
||||
class RedirectIfAuthenticated
|
||||
|
||||
@@ -10,6 +10,7 @@ use Log;
|
||||
/**
|
||||
* Class ReplaceTestVars
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Middleware
|
||||
*/
|
||||
class ReplaceTestVars
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
|
||||
/**
|
||||
* Class VerifyCsrfToken
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Middleware
|
||||
*/
|
||||
class VerifyCsrfToken extends BaseVerifier
|
||||
|
||||
@@ -10,6 +10,7 @@ use Input;
|
||||
/**
|
||||
* Class AccountFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class AccountFormRequest extends Request
|
||||
|
||||
@@ -9,6 +9,7 @@ use Input;
|
||||
/**
|
||||
* Class BillFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class BillFormRequest extends Request
|
||||
|
||||
@@ -9,6 +9,7 @@ use Input;
|
||||
/**
|
||||
* Class BudgetFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class BudgetFormRequest extends Request
|
||||
|
||||
@@ -9,6 +9,7 @@ use Input;
|
||||
/**
|
||||
* Class CategoryFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class CategoryFormRequest extends Request
|
||||
|
||||
@@ -8,6 +8,7 @@ use Input;
|
||||
/**
|
||||
* Class BillFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class CurrencyFormRequest extends Request
|
||||
|
||||
@@ -7,6 +7,7 @@ use Auth;
|
||||
/**
|
||||
* Class DeleteAccountFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class DeleteAccountFormRequest extends Request
|
||||
|
||||
@@ -10,6 +10,7 @@ use Input;
|
||||
/**
|
||||
* Class JournalFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class JournalFormRequest extends Request
|
||||
|
||||
@@ -8,6 +8,7 @@ use Input;
|
||||
/**
|
||||
* Class PiggyBankFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class PiggyBankFormRequest extends Request
|
||||
|
||||
@@ -7,6 +7,7 @@ use Auth;
|
||||
/**
|
||||
* Class ProfileFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class ProfileFormRequest extends Request
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Foundation\Http\FormRequest;
|
||||
/**
|
||||
* Class Request
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
abstract class Request extends FormRequest
|
||||
|
||||
@@ -15,6 +15,7 @@ use Input;
|
||||
/**
|
||||
* Class TagFormRequest
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Http\Requests
|
||||
*/
|
||||
class TagFormRequest extends Request
|
||||
|
||||
@@ -319,7 +319,7 @@ Breadcrumbs::register(
|
||||
|
||||
Breadcrumbs::register(
|
||||
'reports.month', function (Generator $breadcrumbs, Carbon $date) {
|
||||
$breadcrumbs->parent('reports.index');
|
||||
$breadcrumbs->parent('reports.year', $date);
|
||||
$breadcrumbs->push('Monthly report for ' . $date->format('F Y'), route('reports.month', [$date->year, $date->month]));
|
||||
}
|
||||
);
|
||||
|
||||
@@ -29,6 +29,7 @@ class Account extends Model
|
||||
/**
|
||||
* @param array $fields
|
||||
*
|
||||
*
|
||||
* @return Account|null
|
||||
*/
|
||||
public static function firstOrCreateEncrypted(array $fields)
|
||||
@@ -86,6 +87,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function accountMeta()
|
||||
@@ -94,6 +96,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function accountType()
|
||||
@@ -102,6 +105,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -110,6 +114,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param $fieldName
|
||||
*
|
||||
* @return string|null
|
||||
@@ -127,6 +132,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -144,6 +150,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function piggyBanks()
|
||||
@@ -152,6 +159,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param array $types
|
||||
*/
|
||||
@@ -165,6 +173,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
@@ -181,6 +190,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
@@ -190,6 +200,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function transactions()
|
||||
@@ -198,6 +209,7 @@ class Account extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user()
|
||||
|
||||
@@ -6,6 +6,7 @@ use Watson\Validating\ValidatingTrait;
|
||||
/**
|
||||
* Class AccountMeta
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class AccountMeta extends Model
|
||||
@@ -22,6 +23,7 @@ class AccountMeta extends Model
|
||||
protected $table = 'account_meta';
|
||||
|
||||
/**
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function account()
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class AccountType
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class AccountType extends Model
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
/**
|
||||
* Class Budget
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class Budget extends Model
|
||||
@@ -17,6 +18,7 @@ class Budget extends Model
|
||||
protected $fillable = ['user_id', 'name'];
|
||||
|
||||
/**
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function budgetlimits()
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class BudgetLimit
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class BudgetLimit extends Model
|
||||
|
||||
@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
/**
|
||||
* Class Category
|
||||
*
|
||||
*
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class Category extends Model
|
||||
@@ -17,6 +18,7 @@ class Category extends Model
|
||||
protected $fillable = ['user_id', 'name'];
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -25,6 +27,7 @@ class Category extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function transactionjournals()
|
||||
@@ -66,6 +69,7 @@ class Category extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user()
|
||||
@@ -74,6 +78,7 @@ class Category extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
@@ -83,6 +88,7 @@ class Category extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -94,9 +100,7 @@ class Category extends Model
|
||||
return Crypt::decrypt($value);
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
return $value;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
/**
|
||||
* Class Component
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class Component extends Model
|
||||
|
||||
@@ -13,6 +13,7 @@ class LimitRepetition extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function budgetLimit()
|
||||
@@ -21,6 +22,7 @@ class LimitRepetition extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
|
||||
@@ -17,6 +17,7 @@ class PiggyBank extends Model
|
||||
= ['name', 'account_id', 'order', 'reminder_skip', 'targetamount', 'startdate', 'targetdate', 'reminder', 'remind_me'];
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function account()
|
||||
@@ -44,6 +45,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function piggyBankRepetitions()
|
||||
@@ -52,6 +54,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -60,6 +63,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return int
|
||||
@@ -70,6 +74,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function piggyBankEvents()
|
||||
@@ -78,6 +83,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
|
||||
*/
|
||||
public function reminders()
|
||||
@@ -86,6 +92,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
@@ -95,6 +102,7 @@ class PiggyBank extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class PiggyBankEvent
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class PiggyBankEvent extends Model
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class PiggyBankRepetition
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class PiggyBankRepetition extends Model
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class Preference
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class Preference extends Model
|
||||
|
||||
@@ -17,6 +17,7 @@ class Reminder extends Model
|
||||
protected $fillable = ['user_id', 'startdate', 'metadata', 'enddate', 'active', 'notnow', 'remindersable_id', 'remindersable_type',];
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return int
|
||||
@@ -27,6 +28,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -35,6 +37,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return mixed
|
||||
@@ -49,6 +52,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return bool
|
||||
@@ -59,6 +63,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
||||
*/
|
||||
public function remindersable()
|
||||
@@ -67,6 +72,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $start
|
||||
* @param Carbon $end
|
||||
@@ -79,6 +85,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
*
|
||||
* @return $this
|
||||
@@ -92,6 +99,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setMetadataAttribute($value)
|
||||
@@ -101,6 +109,7 @@ class Reminder extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user()
|
||||
|
||||
@@ -67,6 +67,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -75,6 +76,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -85,6 +87,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -95,6 +98,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setDescriptionAttribute($value)
|
||||
@@ -103,6 +107,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setTagAttribute($value)
|
||||
@@ -111,6 +116,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function transactionjournals()
|
||||
@@ -119,6 +125,7 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user()
|
||||
|
||||
@@ -9,6 +9,7 @@ use Watson\Validating\ValidatingTrait;
|
||||
/**
|
||||
* Class Transaction
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class Transaction extends Model
|
||||
|
||||
@@ -4,8 +4,10 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
/**
|
||||
*
|
||||
* Class TransactionCurrency
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class TransactionCurrency extends Model
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
/**
|
||||
* Class TransactionGroup
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class TransactionGroup extends Model
|
||||
|
||||
@@ -32,6 +32,7 @@ class TransactionJournal extends Model
|
||||
];
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function bill()
|
||||
@@ -40,6 +41,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function budgets()
|
||||
@@ -48,6 +50,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function categories()
|
||||
@@ -94,6 +97,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function transactions()
|
||||
@@ -102,6 +106,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
*/
|
||||
public function getDates()
|
||||
@@ -110,6 +115,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -120,12 +126,11 @@ class TransactionJournal extends Model
|
||||
return Crypt::decrypt($value);
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
return $value;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function piggyBankEvents()
|
||||
@@ -134,6 +139,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param Account $account
|
||||
*/
|
||||
@@ -147,6 +153,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -158,6 +165,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -169,6 +177,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param $amount
|
||||
*/
|
||||
@@ -185,6 +194,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -196,6 +206,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param EloquentBuilder $query
|
||||
* @param array $types
|
||||
*/
|
||||
@@ -211,6 +222,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* Automatically includes the 'with' parameters to get relevant related
|
||||
* objects.
|
||||
*
|
||||
@@ -226,6 +238,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param $value
|
||||
*/
|
||||
public function setDescriptionAttribute($value)
|
||||
@@ -235,6 +248,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function tags()
|
||||
@@ -243,6 +257,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function transactionCurrency()
|
||||
@@ -251,6 +266,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function transactionType()
|
||||
@@ -259,6 +275,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||
*/
|
||||
public function transactiongroups()
|
||||
@@ -267,6 +284,7 @@ class TransactionJournal extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user()
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
/**
|
||||
* Class TransactionRelation
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class TransactionRelation extends Model
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
/**
|
||||
* Class TransactionType
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Models
|
||||
*/
|
||||
class TransactionType extends Model
|
||||
|
||||
@@ -10,6 +10,7 @@ use FireflyIII\Support\Preferences;
|
||||
use FireflyIII\Support\Steam;
|
||||
use FireflyIII\Support\Twig\Budget;
|
||||
use FireflyIII\Support\Twig\General;
|
||||
use FireflyIII\Support\Twig\Translation;
|
||||
use FireflyIII\Support\Twig\Journal;
|
||||
use FireflyIII\Support\Twig\PiggyBank;
|
||||
use FireflyIII\Validation\FireflyValidator;
|
||||
@@ -42,6 +43,7 @@ class FireflyServiceProvider extends ServiceProvider
|
||||
Twig::addExtension(new General);
|
||||
Twig::addExtension(new Journal);
|
||||
Twig::addExtension(new Budget);
|
||||
Twig::addExtension(new Translation);
|
||||
}
|
||||
|
||||
public function register()
|
||||
|
||||
@@ -25,21 +25,6 @@ class BudgetRepository implements BudgetRepositoryInterface
|
||||
*/
|
||||
public function cleanupBudgets()
|
||||
{
|
||||
$limits = BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id')->get(['budget_limits.*']);
|
||||
|
||||
// loop budget limits:
|
||||
$found = [];
|
||||
/** @var BudgetLimit $limit */
|
||||
foreach ($limits as $limit) {
|
||||
$key = $limit->budget_id . '-' . $limit->startdate;
|
||||
if (isset($found[$key])) {
|
||||
$limit->delete();
|
||||
} else {
|
||||
$found[$key] = true;
|
||||
}
|
||||
unset($key);
|
||||
}
|
||||
|
||||
// delete limits with amount 0:
|
||||
BudgetLimit::where('amount', 0)->delete();
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ class JournalRepository implements JournalRepositoryInterface
|
||||
*/
|
||||
public function getWithDate($id, Carbon $date)
|
||||
{
|
||||
return Auth::user()->transactionjournals()->where('id', $id)->where('date', $date->format('Y-m-d'))->first();
|
||||
return Auth::user()->transactionjournals()->where('id', $id)->where('date', $date->format('Y-m-d 00:00:00'))->first();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -379,14 +379,19 @@ class JournalRepository implements JournalRepositoryInterface
|
||||
$to = Account::find($data['account_to_id']);
|
||||
break;
|
||||
}
|
||||
if (is_null($to->id)) {
|
||||
if (is_null($to) || (!is_null($to) && is_null($to->id))) {
|
||||
Log::error('"to"-account is null, so we cannot continue!');
|
||||
App::abort(500, '"to"-account is null, so we cannot continue!');
|
||||
// @codeCoverageIgnoreStart
|
||||
}
|
||||
if (is_null($from->id)) {
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
if (is_null($from) || (!is_null($from) && is_null($from->id))) {
|
||||
Log::error('"from"-account is null, so we cannot continue!');
|
||||
App::abort(500, '"from"-account is null, so we cannot continue!');
|
||||
// @codeCoverageIgnoreStart
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return [$from, $to];
|
||||
}
|
||||
|
||||
@@ -145,14 +145,20 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
||||
/**
|
||||
* Set all piggy banks to order 0.
|
||||
*
|
||||
* @return void
|
||||
* @return boolean
|
||||
*/
|
||||
public function reset()
|
||||
{
|
||||
DB::table('piggy_banks')
|
||||
->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.id')
|
||||
->where('accounts.user_id', Auth::user()->id)
|
||||
->update(['order' => 0, 'piggy_banks.updated_at' => DB::Raw('NOW()')]);
|
||||
// split query to make it work in sqlite:
|
||||
$set = PiggyBank::
|
||||
leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.id')
|
||||
->where('accounts.user_id', Auth::user()->id)->get(['piggy_banks.*']);
|
||||
foreach ($set as $e) {
|
||||
$e->order = 0;
|
||||
$e->save();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,6 +9,7 @@ use FireflyIII\Models\Reminder;
|
||||
/**
|
||||
* Class PiggyBankPart
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Collection
|
||||
*/
|
||||
class PiggyBankPart
|
||||
|
||||
@@ -20,7 +20,7 @@ class ReminderRepository implements ReminderRepositoryInterface
|
||||
protected $helper;
|
||||
|
||||
/**
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
@@ -52,6 +52,7 @@ class TagRepository implements TagRepositoryInterface
|
||||
|
||||
$withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count();
|
||||
$transfers = $tag->transactionjournals()->where('transaction_type_id', $transfer->id)->count();
|
||||
$deposits = $tag->transactionjournals()->where('transaction_type_id', $deposit->id)->count();
|
||||
|
||||
if ($tag->tagMode == 'balancingAct') {
|
||||
|
||||
@@ -73,39 +74,47 @@ class TagRepository implements TagRepositoryInterface
|
||||
}
|
||||
if ($tag->tagMode == 'advancePayment') {
|
||||
|
||||
// advance payments cannot accept transfers:
|
||||
if ($journal->transaction_type_id == $transfer->id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// only if this is the only withdrawal
|
||||
if ($journal->transaction_type_id == $withdrawal->id && $withdrawals < 1) {
|
||||
// the first transaction to be attached to this
|
||||
// tag is attached just like that:
|
||||
if ($withdrawals < 1 && $deposits < 1) {
|
||||
$journal->tags()->save($tag);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// only if this is a deposit.
|
||||
if ($journal->transaction_type_id == $deposit->id) {
|
||||
// if withdrawal and already has a withdrawal, return false:
|
||||
if ($journal->transaction_type_id == $withdrawal->id && $withdrawals == 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// if this is a deposit, account must match the current only journal
|
||||
// (if already present):
|
||||
$currentWithdrawal = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->first();
|
||||
|
||||
if ($currentWithdrawal && $currentWithdrawal->assetAccount->id == $journal->assetAccount->id) {
|
||||
// if already has transaction journals, must match ALL asset account id's:
|
||||
if ($deposits > 0 || $withdrawals == 1) {
|
||||
$match = true;
|
||||
/** @var TransactionJournal $check */
|
||||
foreach ($tag->transactionjournals as $check) {
|
||||
if ($check->assetAccount->id != $journal->assetAccount->id) {
|
||||
$match = false;
|
||||
}
|
||||
}
|
||||
if ($match) {
|
||||
$journal->tags()->save($tag);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
if (is_null($currentWithdrawal)) {
|
||||
$journal->tags()->save($tag);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
return false;
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
/**
|
||||
* @param Tag $tag
|
||||
|
||||
@@ -7,6 +7,7 @@ use Validator;
|
||||
/**
|
||||
* Class Registrar
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Services
|
||||
*/
|
||||
class Registrar implements RegistrarContract
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace FireflyIII\Support;
|
||||
|
||||
use Cache;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Facade;
|
||||
/**
|
||||
* Class Amount
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Support\Facades
|
||||
*/
|
||||
class Amount extends Facade
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Facade;
|
||||
/**
|
||||
* Class Amount
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Support\Facades
|
||||
*/
|
||||
class ExpandedForm extends Facade
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Facade;
|
||||
/**
|
||||
* Class Navigation
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Support\Facades
|
||||
*/
|
||||
class Navigation extends Facade
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Facade;
|
||||
/**
|
||||
* Class Preferences
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Support\Facades
|
||||
*/
|
||||
class Preferences extends Facade
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Facade;
|
||||
/**
|
||||
* Class Steam
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @package FireflyIII\Support\Facades
|
||||
*/
|
||||
class Steam extends Facade
|
||||
|
||||
42
app/Support/Twig/Translation.php
Normal file
42
app/Support/Twig/Translation.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace FireflyIII\Support\Twig;
|
||||
|
||||
use FireflyIII\Models\LimitRepetition;
|
||||
use Twig_Extension;
|
||||
use Twig_SimpleFilter;
|
||||
|
||||
/**
|
||||
* Class Budget
|
||||
*
|
||||
* @package FireflyIII\Support\Twig
|
||||
*/
|
||||
class Translation extends Twig_Extension
|
||||
{
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFilters()
|
||||
{
|
||||
$filters = [];
|
||||
|
||||
$filters[] = new Twig_SimpleFilter(
|
||||
'_', function ($name) {
|
||||
|
||||
return trans('firefly.'.$name);
|
||||
|
||||
}, ['is_safe' => ['html']]
|
||||
);
|
||||
|
||||
return $filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'FireflyIII\Support\Twig\Translation';
|
||||
}
|
||||
}
|
||||
@@ -119,6 +119,6 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'pretend' => false,
|
||||
'pretend' => env('EMAIL_PRETEND', false),
|
||||
|
||||
];
|
||||
|
||||
@@ -3,7 +3,8 @@ google.setOnLoadCallback(drawChart);
|
||||
|
||||
function drawChart() {
|
||||
googleLineChart('chart/home/account', 'accounts-chart');
|
||||
googleColumnChart('chart/home/budgets', 'budgets-chart');
|
||||
//googleColumnChart('chart/home/budgets', 'budgets-chart');
|
||||
googleStackedColumnChart('chart/home/budgets', 'budgets-chart');
|
||||
googleColumnChart('chart/home/categories', 'categories-chart');
|
||||
googlePieChart('chart/home/bills', 'bills-chart');
|
||||
getBoxAmounts();
|
||||
|
||||
12
resources/lang/en/firefly.php
Normal file
12
resources/lang/en/firefly.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
return [
|
||||
'welcome' => 'Welcome to Firefly!',
|
||||
'mainTitle' => 'What\'s playing?',
|
||||
'close' => 'Clone',
|
||||
'pleaseHold' => 'Please hold...',
|
||||
'mandatoryFields' => 'Mandatory fields',
|
||||
'optionalFields' => 'Optional fields',
|
||||
'options' => 'Options',
|
||||
'something' => 'Something!'
|
||||
|
||||
];
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa {{ subTitleIcon }}"></i> Mandatory fields
|
||||
<i class="fa {{ subTitleIcon }}"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -22,7 +22,7 @@
|
||||
{% if what == 'asset' %}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
@@ -34,11 +34,10 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- panel for options -->
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','account') }}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa {{ subTitleIcon }}"></i> Mandatory fields
|
||||
<i class="fa {{ subTitleIcon }}"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{% if account.accounttype.type == 'Default account' or account.accounttype.type == 'Asset account' %}
|
||||
@@ -50,7 +50,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','account') }}
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<!-- panel for mandatory fields -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation-circle"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation-circle"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -22,10 +21,9 @@
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<!-- panel for optional fields -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.integer('skip',0) }}
|
||||
@@ -37,7 +35,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','bill') }}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation-circle"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation-circle"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -26,7 +26,7 @@
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.integer('skip') }}
|
||||
@@ -37,7 +37,7 @@
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','bill') }}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -17,7 +17,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','budget') }}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-fw fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.checkbox('active') }}
|
||||
@@ -26,7 +26,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','budget') }}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -20,7 +20,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','category') }}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name') }}
|
||||
@@ -21,7 +21,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','category') }}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa {{ subTitleIcon }}"></i> Mandatory fields
|
||||
<i class="fa {{ subTitleIcon }}"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }}
|
||||
@@ -22,7 +22,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','currency') }}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa {{ subTitleIcon }}"></i> Mandatory fields
|
||||
<i class="fa {{ subTitleIcon }}"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }}
|
||||
@@ -23,7 +23,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','currency') }}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{% if count == 0 %}
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<p class="lead">Welcome to Firefly III.</p>
|
||||
<p class="lead">{{ 'welcome'|_ }}</p>
|
||||
|
||||
<p>
|
||||
Create a new asset account to get started.
|
||||
|
||||
@@ -89,15 +89,15 @@
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span>
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">{{ 'close'|_ }}</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="helpTitle">Please hold...</h4>
|
||||
<h4 class="modal-title" id="helpTitle">{{ 'pleaseHold'|_ }}</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="helpBody">
|
||||
<i class="fa fa-refresh fa-spin"></i>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-fw fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
@@ -20,10 +20,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for optional fields -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.date('targetdate') }}
|
||||
@@ -35,7 +34,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','piggy bank') }}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<div class="col-lg-6 col-md-12 col-sm-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-exclamation"></i> Mandatory fields
|
||||
<i class="fa fa-fw fa-exclamation"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
@@ -23,10 +23,9 @@
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for optional fields -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.date('targetdate') }}
|
||||
@@ -38,7 +37,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','piggy bank') }}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="col-lg-5 col-md-5 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-tag"></i> Mandatory fields
|
||||
<i class="fa fa-tag"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('tag') }}
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.date('date') }}
|
||||
@@ -32,7 +32,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','tag') }}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="col-lg-5 col-md-5 col-sm-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-tag"></i> Mandatory fields
|
||||
<i class="fa fa-tag"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.text('tag') }}
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.date('date') }}
|
||||
@@ -34,7 +34,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','tag') }}
|
||||
|
||||
@@ -6,10 +6,9 @@
|
||||
<input type="hidden" name="what" value="{{ what }}" />
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for mandatory fields -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation-circle"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation-circle"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<!-- DESCRIPTION ALWAYS AVAILABLE -->
|
||||
@@ -46,10 +45,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for optional fields -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<!-- BUDGET ONLY WHEN CREATING A WITHDRAWAL -->
|
||||
@@ -73,7 +71,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('create','transaction') }}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<!-- panel for mandatory fields -->
|
||||
<div class="panel panel-danger">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation-circle"></i> Destroy "{{ journal.description }}"
|
||||
|
||||
@@ -8,10 +8,9 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for mandatory fields -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exclamation-circle"></i> Mandatory fields
|
||||
<i class="fa fa-exclamation-circle"></i> {{ 'mandatoryFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<!-- ALWAYS AVAILABLE -->
|
||||
@@ -48,10 +47,9 @@
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-12">
|
||||
<!-- panel for optional fields -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-smile-o"></i> Optional fields
|
||||
<i class="fa fa-smile-o"></i> {{ 'optionalFields'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<!-- BUDGET ONLY WHEN CREATING A WITHDRAWAL -->
|
||||
@@ -76,7 +74,7 @@
|
||||
<!-- panel for options -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bolt"></i> Options
|
||||
<i class="fa fa-bolt"></i> {{ 'options'|_ }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{ ExpandedForm.optionsList('update','transaction') }}
|
||||
|
||||
@@ -42,7 +42,7 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
|
||||
Log::debug('Created new database.');
|
||||
touch($original);
|
||||
Artisan::call('migrate');
|
||||
copy($original, $copy);
|
||||
|
||||
|
||||
// create EUR currency
|
||||
/** @var TransactionCurrency $currency */
|
||||
@@ -50,8 +50,11 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
|
||||
$currency->code = 'EUR';
|
||||
$currency->save();
|
||||
Log::debug('Created new EUR currency.');
|
||||
copy($original, $copy);
|
||||
} else {
|
||||
|
||||
if (file_exists($copy)) {
|
||||
Log::debug('Copied copy back over original.');
|
||||
copy($copy, $original);
|
||||
}
|
||||
}
|
||||
|
||||
68
tests/controllers/AuthControllerTest.php
Normal file
68
tests/controllers/AuthControllerTest.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Class AuthControllerTest
|
||||
*/
|
||||
class AuthControllerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Sets up the fixture, for example, opens a network connection.
|
||||
* This method is called before a test is executed.
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
FactoryMuffin::create('FireflyIII\User');
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called before the first test of this test class is run.
|
||||
*
|
||||
* @since Method available since Release 3.4.0
|
||||
*/
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
public function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function testPostRegister()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'email' => 'test@example.com',
|
||||
'password' => 'onetwothree',
|
||||
'password_confirmation' => 'onetwothree',
|
||||
'_token' => 'replaceMe'
|
||||
];
|
||||
$this->call('POST', '/auth/register', $data);
|
||||
$this->assertResponseStatus(302);
|
||||
$this->assertSessionHas('success');
|
||||
}
|
||||
|
||||
public function testPostRegisterFails()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'email' => 'test@example.com',
|
||||
'password' => 'onetwothree',
|
||||
'password_confirmation' => 'onetwofour',
|
||||
'_token' => 'replaceMe'
|
||||
];
|
||||
$this->call('POST', '/auth/register', $data);
|
||||
$this->assertResponseStatus(302);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -115,6 +115,28 @@ class TagControllerTest extends TestCase
|
||||
$this->assertResponseOk();
|
||||
}
|
||||
|
||||
public function testMultipleDeposits()
|
||||
{
|
||||
$tag = FactoryMuffin::create('FireflyIII\Models\Tag');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$type = FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$journal->transaction_type_id = $type->id;
|
||||
$journal->save();
|
||||
$tag->transactionJournals()->save($journal);
|
||||
}
|
||||
|
||||
|
||||
$tag->tagMode = 'nothing';
|
||||
$tag->save();
|
||||
$this->be($tag->user);
|
||||
|
||||
$this->call('GET', '/tags/edit/' . $tag->id);
|
||||
$this->assertResponseOk();
|
||||
}
|
||||
|
||||
|
||||
public function testHideTagHelp()
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
|
||||
if (!class_exists('RandomString')) {
|
||||
/**
|
||||
* Class RandomString
|
||||
@@ -140,7 +139,9 @@ FactoryMuffin::define(
|
||||
'budget_limit_id' => 'factory|FireflyIII\Models\BudgetLimit',
|
||||
'startdate' => 'date',
|
||||
'enddate' => 'date',
|
||||
'amount' => 'integer',
|
||||
'amount' => function () {
|
||||
return rand(1, 100);
|
||||
},
|
||||
]
|
||||
);
|
||||
|
||||
@@ -149,7 +150,9 @@ FactoryMuffin::define(
|
||||
[
|
||||
'budget_id' => 'factory|FireflyIII\Models\Budget',
|
||||
'startdate' => 'date',
|
||||
'amount' => 'integer',
|
||||
'amount' => function () {
|
||||
return rand(1, 100);
|
||||
},
|
||||
'repeats' => 'false',
|
||||
'repeat_freq' => 'monthly',
|
||||
|
||||
@@ -170,9 +173,9 @@ FactoryMuffin::define(
|
||||
'FireflyIII\Models\AccountType',
|
||||
[
|
||||
'type' => function () {
|
||||
$types = ['Expense account', 'Revenue account', 'Asset account'];
|
||||
$types = ['Expense account', 'Revenue account', 'Asset account','Cash account'];
|
||||
$count = DB::table('account_types')->count();
|
||||
if ($count < 3) {
|
||||
if ($count < 4) {
|
||||
return $types[$count];
|
||||
} else {
|
||||
return RandomString::generateRandomString(10);
|
||||
@@ -220,7 +223,9 @@ FactoryMuffin::define(
|
||||
[
|
||||
'account_id' => 'factory|FireflyIII\Models\Account',
|
||||
'name' => 'sentence',
|
||||
'targetamount' => 'integer',
|
||||
'targetamount' => function () {
|
||||
return rand(1, 100);
|
||||
},
|
||||
'startdate' => 'date',
|
||||
'targetdate' => 'date',
|
||||
'reminder_skip' => 0,
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<?php
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Models\Budget;
|
||||
use FireflyIII\Models\BudgetLimit;
|
||||
use FireflyIII\Repositories\Budget\BudgetRepository;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:16:07.
|
||||
@@ -32,14 +37,23 @@ class BudgetRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::cleanupBudgets
|
||||
* @todo Implement testCleanupBudgets().
|
||||
*/
|
||||
public function testCleanupBudgets()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
// create some budgets:
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$limit = FactoryMuffin::create('FireflyIII\Models\BudgetLimit');
|
||||
$limit->budget_id = $budget->id;
|
||||
$limit->amount = 0;
|
||||
$limit->save();
|
||||
}
|
||||
|
||||
|
||||
$this->object->cleanupBudgets();
|
||||
|
||||
$this->assertCount(0, BudgetLimit::get());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,10 +62,11 @@ class BudgetRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testDestroy()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$this->object->destroy($budget);
|
||||
|
||||
$this->assertCount(0, Budget::where('id', $budget->id)->whereNull('deleted_at')->get());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,213 +75,311 @@ class BudgetRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testExpensesOnDay()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$result = $this->object->expensesOnDay($budget, new Carbon);
|
||||
|
||||
$this->assertEquals(0, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getActiveBudgets
|
||||
* @todo Implement testGetActiveBudgets().
|
||||
*/
|
||||
public function testGetActiveBudgets()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget1 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget2 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget1->active = 1;
|
||||
$budget2->active = 0;
|
||||
$budget2->user_id = $budget1->user_id;
|
||||
$budget1->save();
|
||||
$budget2->save();
|
||||
$this->be($budget1->user);
|
||||
|
||||
$set = $this->object->getActiveBudgets();
|
||||
|
||||
$this->assertCount(1, $set);
|
||||
$this->assertEquals($set->first()->id, $budget1->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getBudgetLimitRepetitions
|
||||
* @todo Implement testGetBudgetLimitRepetitions().
|
||||
*/
|
||||
public function testGetBudgetLimitRepetitions()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$rep = FactoryMuffin::create('FireflyIII\Models\LimitRepetition');
|
||||
$limit = $rep->budgetlimit;
|
||||
$limit->startdate = new Carbon('2015-02-02');
|
||||
$rep->startdate = new Carbon('2015-02-02');
|
||||
$rep->enddate = new Carbon('2015-02-28');
|
||||
$limit->save();
|
||||
$rep->save();
|
||||
|
||||
$set = $this->object->getBudgetLimitRepetitions($rep->budgetlimit->budget, new Carbon('2015-02-01'), new Carbon('2015-02-28'));
|
||||
$this->assertCount(2, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getBudgetLimits
|
||||
* @todo Implement testGetBudgetLimits().
|
||||
*/
|
||||
public function testGetBudgetLimits()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
/** @var Budget $budget */
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$set = $this->object->getBudgetLimits($budget);
|
||||
|
||||
$this->assertCount(0, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getBudgets
|
||||
* @todo Implement testGetBudgets().
|
||||
*/
|
||||
public function testGetBudgets()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget1 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget2 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget1->active = 1;
|
||||
$budget2->active = 0;
|
||||
$budget2->user_id = $budget1->user_id;
|
||||
$budget1->save();
|
||||
$budget2->save();
|
||||
$this->be($budget1->user);
|
||||
|
||||
$set = $this->object->getBudgets();
|
||||
|
||||
$this->assertCount(2, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getCurrentRepetition
|
||||
* @todo Implement testGetCurrentRepetition().
|
||||
*/
|
||||
public function testGetCurrentRepetition()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
/** @var Budget $budget */
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$rep = $this->object->getCurrentRepetition($budget, new Carbon);
|
||||
$this->assertNull($rep);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getFirstBudgetLimitDate
|
||||
* @todo Implement testGetFirstBudgetLimitDate().
|
||||
*/
|
||||
public function testGetFirstBudgetLimitDate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
/** @var BudgetLimit $budget */
|
||||
$limit = FactoryMuffin::create('FireflyIII\Models\BudgetLimit');
|
||||
$date = $this->object->getFirstBudgetLimitDate($limit->budget);
|
||||
$this->assertEquals($date->format('Y-m-d'), $limit->startdate->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getFirstBudgetLimitDate
|
||||
*/
|
||||
public function testGetFirstBudgetLimitDateNull()
|
||||
{
|
||||
/** @var Budget $budget */
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$date = $this->object->getFirstBudgetLimitDate($budget);
|
||||
$ownDate = Carbon::now()->startOfYear();
|
||||
$this->assertEquals($date->format('Y-m-d'), $ownDate->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getInactiveBudgets
|
||||
* @todo Implement testGetInactiveBudgets().
|
||||
*/
|
||||
public function testGetInactiveBudgets()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget1 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget2 = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$budget1->active = 1;
|
||||
$budget2->active = 0;
|
||||
$budget2->user_id = $budget1->user_id;
|
||||
$budget1->save();
|
||||
$budget2->save();
|
||||
$this->be($budget1->user);
|
||||
|
||||
$set = $this->object->getInactiveBudgets();
|
||||
|
||||
$this->assertCount(1, $set);
|
||||
$this->assertEquals($set->first()->id, $budget2->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getJournals
|
||||
* @todo Implement testGetJournals().
|
||||
*/
|
||||
public function testGetJournals()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$repetition = FactoryMuffin::create('FireflyIII\Models\LimitRepetition');
|
||||
|
||||
$set = $this->object->getJournals($repetition->budgetlimit->budget, $repetition);
|
||||
$this->assertTrue($set instanceof LengthAwarePaginator);
|
||||
$this->assertCount(0, $set);
|
||||
$this->assertEquals(1, $set->currentPage());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getLastBudgetLimitDate
|
||||
* @todo Implement testGetLastBudgetLimitDate().
|
||||
*/
|
||||
public function testGetLastBudgetLimitDate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
/** @var BudgetLimit $budget */
|
||||
$limit = FactoryMuffin::create('FireflyIII\Models\BudgetLimit');
|
||||
$date = $this->object->getLastBudgetLimitDate($limit->budget);
|
||||
$this->assertEquals($date->format('Y-m-d'), $limit->startdate->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getLastBudgetLimitDate
|
||||
*/
|
||||
public function testGetLastBudgetLimitDateNull()
|
||||
{
|
||||
|
||||
/** @var Budget $budget */
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$date = $this->object->getLastBudgetLimitDate($budget);
|
||||
$ownDate = Carbon::now()->startOfYear();
|
||||
$this->assertEquals($date->format('Y-m-d'), $ownDate->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getLimitAmountOnDate
|
||||
* @todo Implement testGetLimitAmountOnDate().
|
||||
*/
|
||||
public function testGetLimitAmountOnDate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$rep = FactoryMuffin::create('FireflyIII\Models\LimitRepetition');
|
||||
|
||||
$amount = $this->object->getLimitAmountOnDate($rep->budgetlimit->budget, $rep->startdate);
|
||||
|
||||
$this->assertEquals($rep->amount, $amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getLimitAmountOnDate
|
||||
*/
|
||||
public function testGetLimitAmountOnDateNull()
|
||||
{
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$amount = $this->object->getLimitAmountOnDate($budget, new Carbon);
|
||||
|
||||
$this->assertNull($amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getWithoutBudget
|
||||
* @todo Implement testGetWithoutBudget().
|
||||
*/
|
||||
public function testGetWithoutBudget()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$this->be($user);
|
||||
$set = $this->object->getWithoutBudget(new Carbon, new Carbon);
|
||||
$this->assertCount(0, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::getWithoutBudgetSum
|
||||
* @todo Implement testGetWithoutBudgetSum().
|
||||
*/
|
||||
public function testGetWithoutBudgetSum()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$this->be($user);
|
||||
$sum = $this->object->getWithoutBudgetSum(new Carbon, new Carbon);
|
||||
$this->assertEquals(0, $sum);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::spentInMonth
|
||||
* @todo Implement testSpentInMonth().
|
||||
*/
|
||||
public function testSpentInMonth()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$amount = $this->object->spentInMonth($budget, new Carbon);
|
||||
$this->assertEquals(0, $amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::store
|
||||
* @todo Implement testStore().
|
||||
*/
|
||||
public function testStore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
|
||||
$data = [
|
||||
'name' => 'new budget ' . rand(1, 100),
|
||||
'user' => $user->id
|
||||
];
|
||||
$result = $this->object->store($data);
|
||||
|
||||
$this->assertTrue($result instanceof Budget);
|
||||
$this->assertEquals($result->name, $data['name']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::sumBudgetExpensesInPeriod
|
||||
* @todo Implement testSumBudgetExpensesInPeriod().
|
||||
*/
|
||||
public function testSumBudgetExpensesInPeriod()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$result = $this->object->sumBudgetExpensesInPeriod($budget, new Carbon, new Carbon);
|
||||
$this->assertEquals(0, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::update
|
||||
* @todo Implement testUpdate().
|
||||
*/
|
||||
public function testUpdate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$data = [
|
||||
'name' => 'update budget ' . rand(1, 100),
|
||||
'active' => true
|
||||
];
|
||||
$result = $this->object->update($budget, $data);
|
||||
|
||||
$this->assertTrue($result instanceof Budget);
|
||||
$this->assertEquals($result->name, $data['name']);
|
||||
$this->assertEquals($result->id, $budget->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::updateLimitAmount
|
||||
* @todo Implement testUpdateLimitAmount().
|
||||
*/
|
||||
public function testUpdateLimitAmount()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
|
||||
$result = $this->object->updateLimitAmount($budget, new Carbon, 100);
|
||||
|
||||
$this->assertTrue($result instanceof BudgetLimit);
|
||||
$this->assertEquals($result->amount, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::updateLimitAmount
|
||||
*/
|
||||
public function testUpdateLimitAmountExisting()
|
||||
{
|
||||
$budgetLimit= FactoryMuffin::create('FireflyIII\Models\BudgetLimit');
|
||||
|
||||
$result = $this->object->updateLimitAmount($budgetLimit->budget, $budgetLimit->startdate, 100);
|
||||
|
||||
$this->assertTrue($result instanceof BudgetLimit);
|
||||
$this->assertEquals($result->amount, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Budget\BudgetRepository::updateLimitAmount
|
||||
*/
|
||||
public function testUpdateLimitAmountZero()
|
||||
{
|
||||
$budgetLimit= FactoryMuffin::create('FireflyIII\Models\BudgetLimit');
|
||||
|
||||
$result = $this->object->updateLimitAmount($budgetLimit->budget, $budgetLimit->startdate, 0);
|
||||
|
||||
$this->assertTrue($result instanceof BudgetLimit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<?php
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Repositories\Category\CategoryRepository;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:19:32.
|
||||
@@ -32,14 +35,13 @@ class CategoryRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::countJournals
|
||||
* @todo Implement testCountJournals().
|
||||
*/
|
||||
public function testCountJournals()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$result = $this->object->countJournals($category);
|
||||
|
||||
$this->assertEquals(0, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,129 +50,204 @@ class CategoryRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testDestroy()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$this->object->destroy($category);
|
||||
|
||||
$count = Category::where('id', $category->id)->whereNull('deleted_at')->count();
|
||||
$this->assertEquals(0, $count);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getCategories
|
||||
* @todo Implement testGetCategories().
|
||||
*/
|
||||
public function testGetCategories()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$cat1 = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$cat2 = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$cat1->name = 'BBBBB';
|
||||
$cat2->name = 'AAAAA';
|
||||
$cat1->user_id = $user->id;
|
||||
$cat2->user_id = $user->id;
|
||||
$cat1->save();
|
||||
$cat2->save();
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getCategories();
|
||||
$this->assertEquals('AAAAA', $set->first()->name);
|
||||
$this->assertCount(2, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getCategoriesAndExpenses
|
||||
* @todo Implement testGetCategoriesAndExpenses().
|
||||
*/
|
||||
public function testGetCategoriesAndExpenses()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$type = FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
// some journals and categories:
|
||||
for ($i = 0; $i < 5; $i++) {
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$journal->user_id = $user->id;
|
||||
$journal->date = new Carbon('2015-02-11');
|
||||
$journal->transaction_type_id = $type->id;
|
||||
$category->user_id = $user->id;
|
||||
$category->transactionjournals()->save($journal);
|
||||
$journal->save();
|
||||
$category->save();
|
||||
}
|
||||
|
||||
$this->be($user);
|
||||
$set = $this->object->getCategoriesAndExpenses(new Carbon('2015-02-01'), new Carbon('2015-02-28'));
|
||||
$this->assertCount(5, $set);
|
||||
$this->assertEquals(0, $set->first()->sum);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getFirstActivityDate
|
||||
* @todo Implement testGetFirstActivityDate().
|
||||
*/
|
||||
public function testGetFirstActivityDate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$journal->user_id = $user->id;
|
||||
$journal->date = new Carbon('2015-02-11');
|
||||
$category->user_id = $user->id;
|
||||
$category->transactionjournals()->save($journal);
|
||||
$journal->save();
|
||||
$category->save();
|
||||
|
||||
$this->be($user);
|
||||
|
||||
$date = $this->object->getFirstActivityDate($category);
|
||||
$this->assertEquals('2015-02-11', $date->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getFirstActivityDate
|
||||
*/
|
||||
public function testGetFirstActivityDateNull()
|
||||
{
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$this->be($category->user);
|
||||
|
||||
$date = $this->object->getFirstActivityDate($category);
|
||||
$this->assertEquals(Carbon::now()->format('Y-m-d'), $date->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getJournals
|
||||
* @todo Implement testGetJournals().
|
||||
*/
|
||||
public function testGetJournals()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$this->be($category->user);
|
||||
$set = $this->object->getJournals($category, 1);
|
||||
|
||||
$this->assertEquals(0, $set->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getLatestActivity
|
||||
* @todo Implement testGetLatestActivity().
|
||||
*/
|
||||
public function testGetLatestActivity()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$journal->user_id = $user->id;
|
||||
$journal->date = new Carbon('2015-02-11');
|
||||
$category->user_id = $user->id;
|
||||
$category->transactionjournals()->save($journal);
|
||||
$journal->save();
|
||||
$category->save();
|
||||
|
||||
$this->be($user);
|
||||
|
||||
$date = $this->object->getLatestActivity($category);
|
||||
$this->assertEquals('2015-02-11', $date->format('Y-m-d'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::getWithoutCategory
|
||||
* @todo Implement testGetWithoutCategory().
|
||||
*/
|
||||
public function testGetWithoutCategory()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getWithoutCategory(new Carbon, new Carbon);
|
||||
$this->assertCount(0, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::spentInPeriodSum
|
||||
* @todo Implement testSpentInPeriodSum().
|
||||
*/
|
||||
public function testSpentInPeriodSum()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$sum = $this->object->spentInPeriodSum($category, new Carbon, new Carbon);
|
||||
|
||||
$this->assertEquals(0, $sum);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::spentOnDaySum
|
||||
* @todo Implement testSpentOnDaySum().
|
||||
*/
|
||||
public function testSpentOnDaySum()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$sum = $this->object->spentOnDaySum($category, new Carbon);
|
||||
|
||||
$this->assertEquals(0, $sum);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::store
|
||||
* @todo Implement testStore().
|
||||
*/
|
||||
public function testStore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'name' => 'New category' . rand(1, 100),
|
||||
'user' => $user->id
|
||||
];
|
||||
$newCategory = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['name'], $newCategory->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Category\CategoryRepository::update
|
||||
* @todo Implement testUpdate().
|
||||
*/
|
||||
public function testUpdate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$data = [
|
||||
'name' => 'New category' . rand(1, 100),
|
||||
];
|
||||
$newCategory = $this->object->update($category, $data);
|
||||
|
||||
$this->assertEquals($data['name'], $newCategory->name);
|
||||
}
|
||||
|
||||
public function testgetLatestActivityNull()
|
||||
{
|
||||
/** @var Category $category */
|
||||
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||
$this->be($category->user);
|
||||
|
||||
$date = $this->object->getLatestActivity($category);
|
||||
$this->assertNull($date);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepository;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:19:32.
|
||||
@@ -32,61 +33,82 @@ class CurrencyRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::countJournals
|
||||
* @todo Implement testCountJournals().
|
||||
*/
|
||||
public function testCountJournals()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$count = $this->object->countJournals($currency);
|
||||
$this->assertEquals(0, $count);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::get
|
||||
* @todo Implement testGet().
|
||||
*/
|
||||
public function testGet()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
|
||||
$set = $this->object->get();
|
||||
$this->assertCount(3, $set); // EUR is already present.
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::getCurrencyByPreference
|
||||
* @todo Implement testGetCurrencyByPreference().
|
||||
*/
|
||||
public function testGetCurrencyByPreference()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$preference = FactoryMuffin::create('FireflyIII\Models\Preference');
|
||||
$preference->data = $currency->code;
|
||||
$preference->save();
|
||||
$found = $this->object->getCurrencyByPreference($preference);
|
||||
$this->assertEquals($currency->id, $found->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::getCurrencyByPreference
|
||||
*/
|
||||
public function testGetCurrencyByPreferenceNull()
|
||||
{
|
||||
$first = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$preference = FactoryMuffin::create('FireflyIII\Models\Preference');
|
||||
$preference->data = 'ABC';
|
||||
$preference->save();
|
||||
$found = $this->object->getCurrencyByPreference($preference);
|
||||
$this->assertEquals(1, $found->id); // EUR is first and will be set.
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::store
|
||||
* @todo Implement testStore().
|
||||
*/
|
||||
public function testStore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$data = [
|
||||
'name' => 'Some Currency',
|
||||
'code' => 'ABC',
|
||||
'symbol' => 'S'
|
||||
];
|
||||
|
||||
$currency = $this->object->store($data);
|
||||
$this->assertEquals($data['name'], $currency->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Currency\CurrencyRepository::update
|
||||
* @todo Implement testUpdate().
|
||||
*/
|
||||
public function testUpdate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
|
||||
$data = [
|
||||
'name' => 'Some Currency',
|
||||
'code' => 'ABC',
|
||||
'symbol' => 'S'
|
||||
];
|
||||
|
||||
$newCurrency = $this->object->update($currency, $data);
|
||||
$this->assertEquals($data['name'], $newCurrency->name);
|
||||
$this->assertEquals($currency->id, $newCurrency->id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<?php
|
||||
use FireflyIII\Models\Reminder;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Journal\JournalRepository;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:19:32.
|
||||
@@ -32,145 +37,502 @@ class JournalRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::deactivateReminder
|
||||
* @todo Implement testDeactivateReminder().
|
||||
*/
|
||||
public function testDeactivateReminder()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 1;
|
||||
$reminder->save();
|
||||
$this->be($reminder->user);
|
||||
|
||||
$this->object->deactivateReminder($reminder->id);
|
||||
|
||||
$this->assertEquals(1, Reminder::where('id', $reminder->id)->where('active', 0)->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::delete
|
||||
* @todo Implement testDelete().
|
||||
*/
|
||||
public function testDelete()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$account = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$transaction = Transaction::create(
|
||||
[
|
||||
'account_id' => $account->id,
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'amount' => 100,
|
||||
]
|
||||
);
|
||||
|
||||
$this->object->delete($journal);
|
||||
|
||||
$this->assertEquals(0, TransactionJournal::where('id', $journal->id)->whereNull('deleted_at')->count());
|
||||
$this->assertEquals(0, Transaction::where('id', $transaction->id)->whereNull('deleted_at')->count());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::first
|
||||
* @todo Implement testFirst().
|
||||
*/
|
||||
public function testFirst()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$this->be($journal->user);
|
||||
|
||||
$first = $this->object->first();
|
||||
|
||||
$this->assertEquals($journal->id, $first->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::getAmountBefore
|
||||
* @todo Implement testGetAmountBefore().
|
||||
*/
|
||||
public function testGetAmountBefore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$transaction = FactoryMuffin::create('FireflyIII\Models\Transaction');
|
||||
$before = $this->object->getAmountBefore($transaction->transactionjournal, $transaction);
|
||||
|
||||
$this->assertEquals(0, $before);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::getJournalsOfType
|
||||
* @todo Implement testGetJournalsOfType().
|
||||
*/
|
||||
public function testGetJournalsOfType()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$type = FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$this->be($user);
|
||||
$result = $this->object->getJournalsOfType($type);
|
||||
$this->assertCount(0, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::getJournalsOfTypes
|
||||
* @todo Implement testGetJournalsOfTypes().
|
||||
*/
|
||||
public function testGetJournalsOfTypes()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$this->be($user);
|
||||
$types = ['Withdrawal', 'Expense'];
|
||||
$set = $this->object->getJournalsOfTypes($types, 0, 1);
|
||||
|
||||
$this->assertTrue($set instanceof LengthAwarePaginator);
|
||||
$this->assertEquals(1, $set->currentPage());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::getTransactionType
|
||||
* @todo Implement testGetTransactionType().
|
||||
*/
|
||||
public function testGetTransactionType()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$type = FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$otherType = $this->object->getTransactionType($type->type);
|
||||
$this->assertEquals($type->id, $otherType->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::getWithDate
|
||||
* @todo Implement testGetWithDate().
|
||||
*/
|
||||
public function testGetWithDate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$this->be($journal->user);
|
||||
|
||||
$found = $this->object->getWithDate($journal->id, $journal->date);
|
||||
|
||||
$this->assertEquals($journal->id, $found->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::saveTags
|
||||
* @todo Implement testSaveTags().
|
||||
*/
|
||||
public function testSaveTags()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$tags = ['one', 'two', 'three'];
|
||||
$this->be($journal->user);
|
||||
|
||||
$this->object->saveTags($journal, $tags);
|
||||
|
||||
$this->assertCount(3, $journal->tags()->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @todo Implement testStore().
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
*/
|
||||
public function testStore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'withdrawal',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_id' => $account1->id,
|
||||
'expense_account' => 'Some expense account',
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
*/
|
||||
public function testStoreDeposit()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'deposit',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_id' => $account1->id,
|
||||
'revenue_account' => 'Some revenue account',
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
*/
|
||||
public function testStoreExpenseWithCash()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'withdrawal',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_id' => $account1->id,
|
||||
'expense_account' => '',
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some other category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
* @expectedException Symfony\Component\HttpKernel\Exception\HttpException
|
||||
*/
|
||||
public function testStoreInvalidFromAccount()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'transfer',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_from_id' => $account1->id,
|
||||
'account_to_id' => 17,
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some other category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
* @expectedException Symfony\Component\HttpKernel\Exception\HttpException
|
||||
*/
|
||||
public function testStoreInvalidToAccount()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'transfer',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_from_id' => 17,
|
||||
'account_to_id' => $account1->id,
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some other category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
*/
|
||||
public function testStoreRevenueWithCash()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'deposit',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_id' => $account1->id,
|
||||
'revenue_account' => '',
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some other category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::store
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::storeAccounts
|
||||
*/
|
||||
public function testStoreTransfer()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$account2 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
$data = [
|
||||
'description' => 'Some journal ' . rand(1, 100),
|
||||
'user' => $user->id,
|
||||
'what' => 'transfer',
|
||||
'amount_currency_id' => $currency->id,
|
||||
'account_from_id' => $account1->id,
|
||||
'account_to_id' => $account2->id,
|
||||
'date' => '2014-01-01',
|
||||
'category' => 'Some other category',
|
||||
'budget_id' => $budget->id,
|
||||
'amount' => 100,
|
||||
'tags' => ['one', 'two', 'three']
|
||||
|
||||
|
||||
];
|
||||
|
||||
$journal = $this->object->store($data);
|
||||
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::update
|
||||
* @todo Implement testUpdate().
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::updateTags
|
||||
*/
|
||||
public function testUpdate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$account2 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
|
||||
// two transactions
|
||||
Transaction::create(
|
||||
[
|
||||
'account_id' => $account1->id,
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'amount' => 100,
|
||||
]
|
||||
);
|
||||
Transaction::create(
|
||||
[
|
||||
'account_id' => $account1->id,
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'amount' => -100,
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
$data = [
|
||||
'amount_currency_id' => $currency->id,
|
||||
'description' => 'New description ' . rand(1, 100),
|
||||
'date' => '2015-01-01',
|
||||
'category' => 'SomenewCat',
|
||||
'amount' => 50,
|
||||
'user' => $journal->user_id,
|
||||
'budget_id' => $budget->id,
|
||||
'account_from_id' => $account1->id,
|
||||
'account_to_id' => $account2->id,
|
||||
'revenue_account' => 'Some revenue account',
|
||||
'expense_account' => 'Some expense account',
|
||||
'tags' => ['a', 'b', 'c']
|
||||
|
||||
];
|
||||
|
||||
$result = $this->object->update($journal, $data);
|
||||
|
||||
$this->assertEquals($result->description, $data['description']);
|
||||
$this->assertEquals($result->amount, 50);
|
||||
}
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::update
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::updateTags
|
||||
*/
|
||||
public function testUpdateNoTags()
|
||||
{
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
FactoryMuffin::create('FireflyIII\Models\AccountType');
|
||||
}
|
||||
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
FactoryMuffin::create('FireflyIII\Models\TransactionType');
|
||||
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||
$currency = FactoryMuffin::create('FireflyIII\Models\TransactionCurrency');
|
||||
$budget = FactoryMuffin::create('FireflyIII\Models\Budget');
|
||||
$account1 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
$account2 = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
|
||||
// two transactions
|
||||
Transaction::create(
|
||||
[
|
||||
'account_id' => $account1->id,
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'amount' => 100,
|
||||
]
|
||||
);
|
||||
Transaction::create(
|
||||
[
|
||||
'account_id' => $account1->id,
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'amount' => -100,
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
$data = [
|
||||
'amount_currency_id' => $currency->id,
|
||||
'description' => 'New description ' . rand(1, 100),
|
||||
'date' => '2015-01-01',
|
||||
'category' => 'SomenewCat',
|
||||
'amount' => 50,
|
||||
'user' => $journal->user_id,
|
||||
'budget_id' => $budget->id,
|
||||
'account_from_id' => $account1->id,
|
||||
'account_to_id' => $account2->id,
|
||||
'revenue_account' => 'Some revenue account',
|
||||
'expense_account' => 'Some expense account',
|
||||
'tags' => []
|
||||
|
||||
];
|
||||
|
||||
$result = $this->object->update($journal, $data);
|
||||
|
||||
$this->assertEquals($result->description, $data['description']);
|
||||
$this->assertEquals($result->amount, 50);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Journal\JournalRepository::updateTags
|
||||
* @todo Implement testUpdateTags().
|
||||
*/
|
||||
public function testUpdateTags()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<?php
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepository;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:19:32.
|
||||
@@ -32,62 +36,98 @@ class PiggyBankRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::calculateParts
|
||||
* @todo Implement testCalculateParts().
|
||||
*/
|
||||
public function testCalculateParts()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
/** @var PiggyBankRepetition $repetition */
|
||||
$repetition = FactoryMuffin::create('FireflyIII\Models\PiggyBankRepetition');
|
||||
$repetition->startdate = new Carbon('2014-01-01');
|
||||
$repetition->targetdate = new Carbon('2014-12-31');
|
||||
$repetition->save();
|
||||
|
||||
$parts = $this->object->calculateParts($repetition);
|
||||
|
||||
$this->assertCount(1, $parts);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::calculateParts
|
||||
*/
|
||||
public function testCalculatePartsWithReminder()
|
||||
{
|
||||
/** @var PiggyBankRepetition $repetition */
|
||||
$repetition = FactoryMuffin::create('FireflyIII\Models\PiggyBankRepetition');
|
||||
/** @var PiggyBank $piggyBank */
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$piggyBank->startdate = new Carbon('2014-01-01');
|
||||
$piggyBank->targetdate = new Carbon('2014-12-31');
|
||||
$piggyBank->remind_me = 1;
|
||||
$piggyBank->reminder = 'monthly';
|
||||
$repetition->startdate = new Carbon('2014-01-01');
|
||||
$repetition->targetdate = new Carbon('2014-12-31');
|
||||
$repetition->piggy_bank_id = $piggyBank->id;
|
||||
$repetition->save();
|
||||
$piggyBank->save();
|
||||
|
||||
$parts = $this->object->calculateParts($repetition);
|
||||
$this->assertCount(12, $parts);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::createEvent
|
||||
* @todo Implement testCreateEvent().
|
||||
*/
|
||||
public function testCreateEvent()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$this->object->createEvent($piggyBank, 100);
|
||||
|
||||
$this->assertCount(1, $piggyBank->piggybankevents()->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::createPiggyBankPart
|
||||
* @todo Implement testCreatePiggyBankPart().
|
||||
*/
|
||||
public function testCreatePiggyBankPart()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$repetition = FactoryMuffin::create('FireflyIII\Models\PiggyBankRepetition');
|
||||
$data = [
|
||||
'repetition' => $repetition,
|
||||
'amountPerBar' => 100,
|
||||
'currentAmount' => 100,
|
||||
'cumulativeAmount' => 100,
|
||||
'startDate' => new Carbon,
|
||||
'targetDate' => new Carbon,
|
||||
];
|
||||
$part = $this->object->createPiggyBankPart($data);
|
||||
$this->assertEquals($data['amountPerBar'], $part->getAmountPerBar());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::destroy
|
||||
* @todo Implement testDestroy().
|
||||
*/
|
||||
public function testDestroy()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
|
||||
$this->object->destroy($piggyBank);
|
||||
|
||||
$this->assertCount(0, PiggyBank::where('id', $piggyBank->id)->whereNull('deleted_at')->get());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::getEventSummarySet
|
||||
* @todo Implement testGetEventSummarySet().
|
||||
*/
|
||||
public function testGetEventSummarySet()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$set = $this->object->getEventSummarySet($piggyBank);
|
||||
|
||||
$this->assertCount(0, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,46 +136,51 @@ class PiggyBankRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testGetEvents()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$set = $this->object->getEvents($piggyBank);
|
||||
|
||||
$this->assertCount(0, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::getPiggyBanks
|
||||
* @todo Implement testGetPiggyBanks().
|
||||
*/
|
||||
public function testGetPiggyBanks()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$this->be($piggyBank->account->user);
|
||||
$set = $this->object->getPiggyBanks();
|
||||
|
||||
$this->assertCount(1, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::reset
|
||||
* @todo Implement testReset().
|
||||
*/
|
||||
public function testReset()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$piggyBank->order = 4;
|
||||
$piggyBank->save();
|
||||
$this->be($piggyBank->account->user);
|
||||
$this->object->reset();
|
||||
|
||||
$this->assertCount(1, PiggyBank::where('order', 0)->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\PiggyBank\PiggyBankRepository::setOrder
|
||||
* @todo Implement testSetOrder().
|
||||
*/
|
||||
public function testSetOrder()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
$piggyBank->order = 4;
|
||||
$this->be($piggyBank->account->user);
|
||||
$piggyBank->save();
|
||||
|
||||
$this->object->setOrder($piggyBank->id, 3);
|
||||
$newPiggy = PiggyBank::find($piggyBank->id);
|
||||
$this->assertEquals(3, $newPiggy->order);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,10 +189,21 @@ class PiggyBankRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testStore()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$account = FactoryMuffin::create('FireflyIII\Models\Account');
|
||||
|
||||
$data = [
|
||||
'remind_me' => 1,
|
||||
'account_id' => $account->id,
|
||||
'name' => 'Some piggy',
|
||||
'targetamount' => 100,
|
||||
'reminder_skip' => 0,
|
||||
'order' => 1,
|
||||
|
||||
];
|
||||
|
||||
$piggyBank = $this->object->store($data);
|
||||
|
||||
$this->assertEquals(1, $piggyBank->id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,9 +212,21 @@ class PiggyBankRepositoryTest extends TestCase
|
||||
*/
|
||||
public function testUpdate()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$piggyBank = FactoryMuffin::create('FireflyIII\Models\PiggyBank');
|
||||
|
||||
$data = [
|
||||
'name' => 'Update piggy ' . rand(1, 100),
|
||||
'account_id' => $piggyBank->account_id,
|
||||
'targetamount' => 101,
|
||||
'targetdate' => new Carbon,
|
||||
'reminder' => null,
|
||||
'startdate' => new Carbon,
|
||||
'remind_me' => '1'
|
||||
];
|
||||
|
||||
$new = $this->object->update($piggyBank, $data);
|
||||
|
||||
$this->assertEquals($data['name'], $new->name);
|
||||
$this->assertEquals($piggyBank->id, $new->id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Repositories\Reminder\ReminderRepository;
|
||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||
|
||||
/**
|
||||
* Generated by PHPUnit_SkeletonGenerator on 2015-05-05 at 19:19:32.
|
||||
@@ -18,6 +20,8 @@ class ReminderRepositoryTest extends TestCase
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$helper = $this->mock('FireflyIII\Helpers\Reminders\ReminderHelperInterface');
|
||||
$helper->shouldReceive('getReminderText')->andReturn('Hello!');
|
||||
$this->object = new ReminderRepository;
|
||||
|
||||
}
|
||||
@@ -33,49 +37,116 @@ class ReminderRepositoryTest extends TestCase
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Reminder\ReminderRepository::getActiveReminders
|
||||
* @todo Implement testGetActiveReminders().
|
||||
*/
|
||||
public function testGetActiveReminders()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$yesterday = Carbon::now()->subDay();
|
||||
$tomorrow = Carbon::now()->addDay();
|
||||
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 1;
|
||||
$reminder->notnow = 0;
|
||||
$reminder->startdate = $yesterday;
|
||||
$reminder->enddate = $tomorrow;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
|
||||
}
|
||||
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 0;
|
||||
$reminder->notnow = 0;
|
||||
$reminder->startdate = $yesterday;
|
||||
$reminder->enddate = $tomorrow;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getActiveReminders();
|
||||
$this->assertCount(3, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Reminder\ReminderRepository::getDismissedReminders
|
||||
* @todo Implement testGetDismissedReminders().
|
||||
*/
|
||||
public function testGetDismissedReminders()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->notnow = 1;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
|
||||
}
|
||||
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->notnow = 0;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getDismissedReminders();
|
||||
$this->assertCount(3, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Reminder\ReminderRepository::getExpiredReminders
|
||||
* @todo Implement testGetExpiredReminders().
|
||||
*/
|
||||
public function testGetExpiredReminders()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$yesterday = Carbon::now()->subDay();
|
||||
$tomorrow = Carbon::now()->addDay();
|
||||
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 1;
|
||||
$reminder->notnow = 0;
|
||||
$reminder->startdate = $tomorrow;
|
||||
$reminder->enddate = $yesterday;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
|
||||
}
|
||||
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 0;
|
||||
$reminder->notnow = 0;
|
||||
$reminder->startdate = $tomorrow;
|
||||
$reminder->enddate = $yesterday;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getExpiredReminders();
|
||||
$this->assertCount(3, $set);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FireflyIII\Repositories\Reminder\ReminderRepository::getInactiveReminders
|
||||
* @todo Implement testGetInactiveReminders().
|
||||
*/
|
||||
public function testGetInactiveReminders()
|
||||
{
|
||||
// Remove the following lines when you implement this test.
|
||||
$this->markTestIncomplete(
|
||||
'This test has not been implemented yet.'
|
||||
);
|
||||
$user = FactoryMuffin::create('FireflyIII\User');
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 0;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
|
||||
}
|
||||
|
||||
$reminder = FactoryMuffin::create('FireflyIII\Models\Reminder');
|
||||
$reminder->active = 1;
|
||||
$reminder->user_id = $user->id;
|
||||
$reminder->save();
|
||||
$this->be($user);
|
||||
|
||||
$set = $this->object->getInactiveReminders();
|
||||
$this->assertCount(3, $set);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user