diff --git a/README.md b/README.md index 13382ea244..7ff58eb737 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,62 @@ -Firefly III (v3.4.0.3) -=========== +# Firefly III +#### v3.4.0.4 [![Build Status](https://travis-ci.org/JC5/firefly-iii.svg?branch=develop)](https://travis-ci.org/JC5/firefly-iii) [![Project Status](http://stillmaintained.com/JC5/firefly-iii.png?a=b)](http://stillmaintained.com/JC5/firefly-iii) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/d44c7012-5f50-41ad-add8-8445330e4102/mini.png)](https://insight.sensiolabs.com/projects/d44c7012-5f50-41ad-add8-8445330e4102) [![Code Climate](https://codeclimate.com/github/JC5/firefly-iii/badges/gpa.svg)](https://codeclimate.com/github/JC5/firefly-iii) [![Coverage Status](https://coveralls.io/repos/JC5/firefly-iii/badge.svg?branch=master)](https://coveralls.io/r/JC5/firefly-iii?branch=master) -[![Coverage Status](https://coveralls.io/repos/JC5/firefly-iii/badge.svg?branch=develop)](https://coveralls.io/r/JC5/firefly-iii?branch=develop) - [![Latest Stable Version](https://poser.pugx.org/grumpydictator/firefly-iii/v/stable.svg)](https://packagist.org/packages/grumpydictator/firefly-iii) -[![Total Downloads](https://poser.pugx.org/grumpydictator/firefly-iii/downloads.svg)](https://packagist.org/packages/grumpydictator/firefly-iii) -[![Latest Unstable Version](https://poser.pugx.org/grumpydictator/firefly-iii/v/unstable.svg)](https://packagist.org/packages/grumpydictator/firefly-iii) -[![License](https://poser.pugx.org/grumpydictator/firefly-iii/license.svg)](https://packagist.org/packages/grumpydictator/firefly-iii) +![GA](https://ga-beacon.appspot.com/UA-58172398-6/firefly-iii/readme) +## 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._ + ![Index](https://i.nder.be/c09vfw90) ![Accounts](https://i.nder.be/hkn0vhcg) @@ -83,6 +85,10 @@ Some stuff has been removed: ![Piggy banks](https://i.nder.be/hkud0h53) ## 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). diff --git a/app/Http/Controllers/GoogleChartController.php b/app/Http/Controllers/GoogleChartController.php index ffb8a5439e..0c7b0f218e 100644 --- a/app/Http/Controllers/GoogleChartController.php +++ b/app/Http/Controllers/GoogleChartController.php @@ -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,31 +161,43 @@ 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]); } + // 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); + // } + // } + // + // } } $chart->generate(); diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 42133ba6fb..d66ebb30f4 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -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(); diff --git a/public/js/index.js b/public/js/index.js index 6663b8a7d3..1af5c9199e 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -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(); diff --git a/resources/lang/en/firefly.php b/resources/lang/en/firefly.php new file mode 100644 index 0000000000..fba918f94d --- /dev/null +++ b/resources/lang/en/firefly.php @@ -0,0 +1,10 @@ + 'Welcome to Firefly!', + 'mainTitle' => 'What\'s playing?', + 'close' => 'Clone', + 'pleaseHold' => 'Please hold...', + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options' +]; \ No newline at end of file diff --git a/resources/twig/accounts/create.twig b/resources/twig/accounts/create.twig index 0314aa8892..4e50f1dfbb 100644 --- a/resources/twig/accounts/create.twig +++ b/resources/twig/accounts/create.twig @@ -9,7 +9,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -22,7 +22,7 @@ {% if what == 'asset' %}
- Optional fields + {{ trans('firefly.optionalFields') }}
@@ -34,11 +34,10 @@
{% endif %} - - +
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','account') }} diff --git a/resources/twig/accounts/edit.twig b/resources/twig/accounts/edit.twig index 19968766f8..0bfe9e258b 100644 --- a/resources/twig/accounts/edit.twig +++ b/resources/twig/accounts/edit.twig @@ -9,7 +9,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -20,7 +20,7 @@
- Optional fields + {{ trans('firefly.optionalFields') }}
{% if account.accounttype.type == 'Default account' or account.accounttype.type == 'Asset account' %} @@ -50,7 +50,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','account') }} diff --git a/resources/twig/bills/create.twig b/resources/twig/bills/create.twig index f7719b3214..cd6938771b 100644 --- a/resources/twig/bills/create.twig +++ b/resources/twig/bills/create.twig @@ -5,10 +5,9 @@
-
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -22,10 +21,9 @@
-
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.integer('skip',0) }} @@ -37,7 +35,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','bill') }} diff --git a/resources/twig/bills/edit.twig b/resources/twig/bills/edit.twig index 5fd7e02a0e..9eb5f05892 100644 --- a/resources/twig/bills/edit.twig +++ b/resources/twig/bills/edit.twig @@ -9,7 +9,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -26,7 +26,7 @@
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.integer('skip') }} @@ -37,7 +37,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','bill') }} diff --git a/resources/twig/budgets/create.twig b/resources/twig/budgets/create.twig index fc4d4a5429..ee5c2b338e 100644 --- a/resources/twig/budgets/create.twig +++ b/resources/twig/budgets/create.twig @@ -6,7 +6,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -17,7 +17,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','budget') }} diff --git a/resources/twig/budgets/edit.twig b/resources/twig/budgets/edit.twig index edb967500f..cdb62233b9 100644 --- a/resources/twig/budgets/edit.twig +++ b/resources/twig/budgets/edit.twig @@ -13,7 +13,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.checkbox('active') }} @@ -26,7 +26,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','budget') }} diff --git a/resources/twig/categories/create.twig b/resources/twig/categories/create.twig index 90ea9c57a5..3ae6089566 100644 --- a/resources/twig/categories/create.twig +++ b/resources/twig/categories/create.twig @@ -7,7 +7,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -20,7 +20,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','category') }} diff --git a/resources/twig/categories/edit.twig b/resources/twig/categories/edit.twig index b35cfbe9ff..5c1f623685 100644 --- a/resources/twig/categories/edit.twig +++ b/resources/twig/categories/edit.twig @@ -7,7 +7,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name') }} @@ -21,7 +21,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','category') }} diff --git a/resources/twig/currency/create.twig b/resources/twig/currency/create.twig index 810826f79a..01cc6c131e 100644 --- a/resources/twig/currency/create.twig +++ b/resources/twig/currency/create.twig @@ -6,7 +6,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }} @@ -22,7 +22,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','currency') }} diff --git a/resources/twig/currency/edit.twig b/resources/twig/currency/edit.twig index 11b33708df..dc4720d1f6 100644 --- a/resources/twig/currency/edit.twig +++ b/resources/twig/currency/edit.twig @@ -8,7 +8,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }} @@ -23,7 +23,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','currency') }} diff --git a/resources/twig/index.twig b/resources/twig/index.twig index 990aa88fdc..24097c2b09 100644 --- a/resources/twig/index.twig +++ b/resources/twig/index.twig @@ -5,7 +5,7 @@ {% if count == 0 %}
-

Welcome to Firefly III.

+

{{ trans('firefly.welcome') }}

Create a new asset account to get started. diff --git a/resources/twig/layout/default.twig b/resources/twig/layout/default.twig index cfe1190903..2bf12e7cc0 100644 --- a/resources/twig/layout/default.twig +++ b/resources/twig/layout/default.twig @@ -89,15 +89,15 @@

diff --git a/resources/twig/piggy-banks/create.twig b/resources/twig/piggy-banks/create.twig index 3c67f3ad8a..46214c5f2c 100644 --- a/resources/twig/piggy-banks/create.twig +++ b/resources/twig/piggy-banks/create.twig @@ -8,7 +8,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
@@ -20,10 +20,9 @@
-
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.date('targetdate') }} @@ -35,7 +34,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','piggy bank') }} diff --git a/resources/twig/piggy-banks/edit.twig b/resources/twig/piggy-banks/edit.twig index a14bd2112a..db6fa3eafb 100644 --- a/resources/twig/piggy-banks/edit.twig +++ b/resources/twig/piggy-banks/edit.twig @@ -10,7 +10,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
@@ -23,10 +23,9 @@
-
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.date('targetdate') }} @@ -38,7 +37,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','piggy bank') }} diff --git a/resources/twig/tags/create.twig b/resources/twig/tags/create.twig index 7c79e29cb5..36cc5e03d0 100644 --- a/resources/twig/tags/create.twig +++ b/resources/twig/tags/create.twig @@ -7,7 +7,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('tag') }} @@ -20,7 +20,7 @@
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.date('date') }} @@ -32,7 +32,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','tag') }} diff --git a/resources/twig/tags/edit.twig b/resources/twig/tags/edit.twig index 6ad950374c..2d92e75ba9 100644 --- a/resources/twig/tags/edit.twig +++ b/resources/twig/tags/edit.twig @@ -9,7 +9,7 @@
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
{{ ExpandedForm.text('tag') }} @@ -22,7 +22,7 @@
- Optional fields + {{ trans('firefly.optionalFields') }}
{{ ExpandedForm.date('date') }} @@ -34,7 +34,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','tag') }} diff --git a/resources/twig/transactions/create.twig b/resources/twig/transactions/create.twig index 01ef307391..f356aaf7c4 100644 --- a/resources/twig/transactions/create.twig +++ b/resources/twig/transactions/create.twig @@ -6,10 +6,9 @@
-
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
@@ -46,10 +45,9 @@
-
- Optional fields + {{ trans('firefly.optionalFields') }}
@@ -73,7 +71,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('create','transaction') }} diff --git a/resources/twig/transactions/delete.twig b/resources/twig/transactions/delete.twig index b10a9a83a0..1e3a1f5087 100644 --- a/resources/twig/transactions/delete.twig +++ b/resources/twig/transactions/delete.twig @@ -5,7 +5,6 @@
-
Destroy "{{ journal.description }}" diff --git a/resources/twig/transactions/edit.twig b/resources/twig/transactions/edit.twig index 5ac5f371bd..8f8587f42c 100644 --- a/resources/twig/transactions/edit.twig +++ b/resources/twig/transactions/edit.twig @@ -8,10 +8,9 @@
-
- Mandatory fields + {{ trans('firefly.mandatoryFields') }}
@@ -48,10 +47,9 @@
-
- Optional fields + {{ trans('firefly.optionalFields') }}
@@ -76,7 +74,7 @@
- Options + {{ trans('firefly.options') }}
{{ ExpandedForm.optionsList('update','transaction') }} diff --git a/tests/factories/all.php b/tests/factories/all.php index 4b9075a7cd..a060efcc07 100644 --- a/tests/factories/all.php +++ b/tests/factories/all.php @@ -1,7 +1,6 @@ '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', @@ -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, diff --git a/tests/repositories/BudgetRepositoryTest.php b/tests/repositories/BudgetRepositoryTest.php index 5eb3ce86d3..104920040e 100644 --- a/tests/repositories/BudgetRepositoryTest.php +++ b/tests/repositories/BudgetRepositoryTest.php @@ -1,5 +1,10 @@ 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); } } diff --git a/tests/repositories/CategoryRepositoryTest.php b/tests/repositories/CategoryRepositoryTest.php index e5288656c4..e17bcae14f 100644 --- a/tests/repositories/CategoryRepositoryTest.php +++ b/tests/repositories/CategoryRepositoryTest.php @@ -1,5 +1,8 @@ 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); } } diff --git a/tests/repositories/CurrencyRepositoryTest.php b/tests/repositories/CurrencyRepositoryTest.php index 756991dd3d..221ea6ec15 100644 --- a/tests/repositories/CurrencyRepositoryTest.php +++ b/tests/repositories/CurrencyRepositoryTest.php @@ -1,5 +1,6 @@ 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(2, $set); } /** * @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($first->id, $found->id); } /** * @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); } }