mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Included tests for the category controller.
This commit is contained in:
parent
9136e592d3
commit
22ab9ebb2f
@ -155,7 +155,7 @@ class BudgetController extends Controller
|
|||||||
$start = Session::get('start', Carbon::now()->startOfMonth());
|
$start = Session::get('start', Carbon::now()->startOfMonth());
|
||||||
$end = Session::get('end', Carbon::now()->startOfMonth());
|
$end = Session::get('end', Carbon::now()->startOfMonth());
|
||||||
$list = $repository->getWithoutBudget($start, $end);
|
$list = $repository->getWithoutBudget($start, $end);
|
||||||
$subTitle = 'Transactions without a budget in ' . $start->format('F Y');
|
$subTitle = 'Transactions without a budget between ' . $start->format('jS F Y') . ' and ' . $end->format('jS F Y');
|
||||||
|
|
||||||
return view('budgets.noBudget', compact('list', 'subTitle'));
|
return view('budgets.noBudget', compact('list', 'subTitle'));
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ use Illuminate\Pagination\LengthAwarePaginator;
|
|||||||
use Input;
|
use Input;
|
||||||
use Redirect;
|
use Redirect;
|
||||||
use Session;
|
use Session;
|
||||||
use View;
|
|
||||||
use URL;
|
use URL;
|
||||||
|
use View;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CategoryController
|
* Class CategoryController
|
||||||
@ -96,21 +96,15 @@ class CategoryController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return $this
|
* @return $this
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index(CategoryRepositoryInterface $repository)
|
||||||
{
|
{
|
||||||
$categories = Auth::user()->categories()->orderBy('name', 'ASC')->get();
|
$categories = $repository->getCategories();
|
||||||
|
|
||||||
$categories->each(
|
$categories->each(
|
||||||
function (Category $category) {
|
function (Category $category) use ($repository) {
|
||||||
$latest = $category->transactionjournals()
|
$category->lastActivity = $repository->getLatestActivity($category);
|
||||||
->orderBy('transaction_journals.date', 'DESC')
|
|
||||||
->orderBy('transaction_journals.order', 'ASC')
|
|
||||||
->orderBy('transaction_journals.id', 'DESC')
|
|
||||||
->first();
|
|
||||||
if ($latest) {
|
|
||||||
$category->lastActivity = $latest->date;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -120,21 +114,11 @@ class CategoryController extends Controller
|
|||||||
/**
|
/**
|
||||||
* @return \Illuminate\View\View
|
* @return \Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function noCategory()
|
public function noCategory(CategoryRepositoryInterface $repository)
|
||||||
{
|
{
|
||||||
$start = Session::get('start', Carbon::now()->startOfMonth());
|
$start = Session::get('start', Carbon::now()->startOfMonth());
|
||||||
$end = Session::get('end', Carbon::now()->startOfMonth());
|
$end = Session::get('end', Carbon::now()->startOfMonth());
|
||||||
$list = Auth::user()
|
$list = $repository->getWithoutCategory($start, $end);
|
||||||
->transactionjournals()
|
|
||||||
->leftJoin('category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
|
|
||||||
->whereNull('category_transaction_journal.id')
|
|
||||||
->before($end)
|
|
||||||
->after($start)
|
|
||||||
->orderBy('transaction_journals.date', 'DESC')
|
|
||||||
->orderBy('transaction_journals.order', 'ASC')
|
|
||||||
->orderBy('transaction_journals.id', 'DESC')
|
|
||||||
->get(['transaction_journals.*']);
|
|
||||||
|
|
||||||
$subTitle = 'Transactions without a category between ' . $start->format('jS F Y') . ' and ' . $end->format('jS F Y');
|
$subTitle = 'Transactions without a category between ' . $start->format('jS F Y') . ' and ' . $end->format('jS F Y');
|
||||||
|
|
||||||
return view('categories.noCategory', compact('list', 'subTitle'));
|
return view('categories.noCategory', compact('list', 'subTitle'));
|
||||||
@ -149,16 +133,8 @@ class CategoryController extends Controller
|
|||||||
{
|
{
|
||||||
$hideCategory = true; // used in list.
|
$hideCategory = true; // used in list.
|
||||||
$page = intval(Input::get('page'));
|
$page = intval(Input::get('page'));
|
||||||
$offset = $page > 0 ? $page * 50 : 0;
|
$set = $repository->getJournals($category, $page);
|
||||||
$set = $category->transactionJournals()->withRelevantData()->take(50)->offset($offset)
|
$count = $repository->countJournals($category);
|
||||||
->orderBy('transaction_journals.date', 'DESC')
|
|
||||||
->orderBy('transaction_journals.order', 'ASC')
|
|
||||||
->orderBy('transaction_journals.id', 'DESC')
|
|
||||||
->get(
|
|
||||||
['transaction_journals.*']
|
|
||||||
);
|
|
||||||
$count = $category->transactionJournals()->count();
|
|
||||||
|
|
||||||
$journals = new LengthAwarePaginator($set, $count, 50, $page);
|
$journals = new LengthAwarePaginator($set, $count, 50, $page);
|
||||||
|
|
||||||
return view('categories.show', compact('category', 'journals', 'hideCategory'));
|
return view('categories.show', compact('category', 'journals', 'hideCategory'));
|
||||||
@ -182,11 +158,8 @@ class CategoryController extends Controller
|
|||||||
|
|
||||||
if (intval(Input::get('create_another')) === 1) {
|
if (intval(Input::get('create_another')) === 1) {
|
||||||
Session::put('categories.create.fromStore', true);
|
Session::put('categories.create.fromStore', true);
|
||||||
return Redirect::route('categories.create')->withInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intval(Input::get('create_another')) === 1) {
|
return Redirect::route('categories.create')->withInput();
|
||||||
return Redirect::route('categories.create');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Redirect::route('categories.index');
|
return Redirect::route('categories.index');
|
||||||
@ -212,6 +185,7 @@ class CategoryController extends Controller
|
|||||||
|
|
||||||
if (intval(Input::get('return_to_edit')) === 1) {
|
if (intval(Input::get('return_to_edit')) === 1) {
|
||||||
Session::put('categories.edit.fromUpdate', true);
|
Session::put('categories.edit.fromUpdate', true);
|
||||||
|
|
||||||
return Redirect::route('categories.edit', $category->id);
|
return Redirect::route('categories.edit', $category->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\Category;
|
namespace FireflyIII\Repositories\Category;
|
||||||
|
|
||||||
|
use Auth;
|
||||||
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CategoryRepository
|
* Class CategoryRepository
|
||||||
@ -12,6 +15,17 @@ use FireflyIII\Models\Category;
|
|||||||
class CategoryRepository implements CategoryRepositoryInterface
|
class CategoryRepository implements CategoryRepositoryInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function countJournals(Category $category)
|
||||||
|
{
|
||||||
|
return $category->transactionJournals()->count();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Category $category
|
* @param Category $category
|
||||||
*
|
*
|
||||||
@ -24,6 +38,72 @@ class CategoryRepository implements CategoryRepositoryInterface
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getCategories()
|
||||||
|
{
|
||||||
|
return Auth::user()->categories()->orderBy('name', 'ASC')->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
* @param int $page
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getJournals(Category $category, $page)
|
||||||
|
{
|
||||||
|
$offset = $page > 0 ? $page * 50 : 0;
|
||||||
|
|
||||||
|
return $category->transactionJournals()->withRelevantData()->take(50)->offset($offset)
|
||||||
|
->orderBy('transaction_journals.date', 'DESC')
|
||||||
|
->orderBy('transaction_journals.order', 'ASC')
|
||||||
|
->orderBy('transaction_journals.id', 'DESC')
|
||||||
|
->get(
|
||||||
|
['transaction_journals.*']
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
*
|
||||||
|
* @return Carbon|null
|
||||||
|
*/
|
||||||
|
public function getLatestActivity(Category $category)
|
||||||
|
{
|
||||||
|
$latest = $category->transactionjournals()
|
||||||
|
->orderBy('transaction_journals.date', 'DESC')
|
||||||
|
->orderBy('transaction_journals.order', 'ASC')
|
||||||
|
->orderBy('transaction_journals.id', 'DESC')
|
||||||
|
->first();
|
||||||
|
if ($latest) {
|
||||||
|
return $latest->date;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getWithoutCategory(Carbon $start, Carbon $end)
|
||||||
|
{
|
||||||
|
return Auth::user()
|
||||||
|
->transactionjournals()
|
||||||
|
->leftJoin('category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
|
->whereNull('category_transaction_journal.id')
|
||||||
|
->before($end)
|
||||||
|
->after($start)
|
||||||
|
->orderBy('transaction_journals.date', 'DESC')
|
||||||
|
->orderBy('transaction_journals.order', 'ASC')
|
||||||
|
->orderBy('transaction_journals.id', 'DESC')
|
||||||
|
->get(['transaction_journals.*']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $data
|
* @param array $data
|
||||||
@ -57,5 +137,4 @@ class CategoryRepository implements CategoryRepositoryInterface
|
|||||||
|
|
||||||
return $category;
|
return $category;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\Category;
|
namespace FireflyIII\Repositories\Category;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface CategoryRepositoryInterface
|
* Interface CategoryRepositoryInterface
|
||||||
@ -11,6 +13,13 @@ use FireflyIII\Models\Category;
|
|||||||
*/
|
*/
|
||||||
interface CategoryRepositoryInterface
|
interface CategoryRepositoryInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function countJournals(Category $category);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Category $category
|
* @param Category $category
|
||||||
*
|
*
|
||||||
@ -18,6 +27,34 @@ interface CategoryRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function destroy(Category $category);
|
public function destroy(Category $category);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getCategories();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
* @param int $page
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getJournals(Category $category, $page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
*
|
||||||
|
* @return Carbon|null
|
||||||
|
*/
|
||||||
|
public function getLatestActivity(Category $category);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function getWithoutCategory(Carbon $start, Carbon $end);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $data
|
* @param array $data
|
||||||
*
|
*
|
||||||
|
199
tests/controllers/CategoryControllerTest.php
Normal file
199
tests/controllers/CategoryControllerTest.php
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use League\FactoryMuffin\Facade as FactoryMuffin;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class CategoryControllerTest
|
||||||
|
*/
|
||||||
|
class CategoryControllerTest 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 testCreate()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('GET', '/categories/create');
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('subTitle', 'Create a new category');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDelete()
|
||||||
|
{
|
||||||
|
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('GET', '/categories/delete/' . $category->id);
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('subTitle', 'Delete category' . e($category->name) . '"');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDestroy()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
$repository->shouldReceive('destroy');
|
||||||
|
|
||||||
|
$this->call('POST', '/categories/destroy/' . $category->id, ['_token' => 'replaceMe']);
|
||||||
|
$this->assertResponseStatus(302);
|
||||||
|
$this->assertSessionHas('success', 'The category "' . e($category->name) . '" was deleted.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEdit()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('GET', '/categories/edit/' . $category->id);
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('subTitle', 'Edit category "' . e($category->name) . '"');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$collection = new Collection;
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$this->be($category->user);
|
||||||
|
$collection->push($category);
|
||||||
|
|
||||||
|
Amount::shouldReceive('getCurrencyCode')->andReturn('xx');
|
||||||
|
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
$repository->shouldReceive('getCategories')->andReturn($collection);
|
||||||
|
$repository->shouldReceive('getLatestActivity')->andReturn(new Carbon);
|
||||||
|
|
||||||
|
$this->call('GET', '/categories');
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('categories');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoCategory()
|
||||||
|
{
|
||||||
|
$collection = new Collection;
|
||||||
|
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||||
|
$this->be($journal->user);
|
||||||
|
$collection->push($journal);
|
||||||
|
|
||||||
|
Amount::shouldReceive('format')->andReturn('xx');
|
||||||
|
Amount::shouldReceive('getCurrencyCode')->andReturn('xx');
|
||||||
|
|
||||||
|
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
$repository->shouldReceive('getWithoutCategory')->andReturn($repository);
|
||||||
|
|
||||||
|
$this->call('GET', '/categories/list/noCategory');
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('subTitle');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testShow()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$collection = new Collection;
|
||||||
|
$journal = FactoryMuffin::create('FireflyIII\Models\TransactionJournal');
|
||||||
|
$this->be($category->user);
|
||||||
|
$collection->push($journal);
|
||||||
|
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
|
||||||
|
$repository->shouldReceive('getJournals')->andReturn($collection);
|
||||||
|
$repository->shouldReceive('countJournals')->andReturn(1);
|
||||||
|
|
||||||
|
Amount::shouldReceive('format')->andReturn('xx');
|
||||||
|
Amount::shouldReceive('getCurrencyCode')->andReturn('xx');
|
||||||
|
|
||||||
|
$this->call('GET', '/categories/show/' . $category->id);
|
||||||
|
$this->assertResponseOk();
|
||||||
|
$this->assertViewHas('hideCategory', true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStore()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
|
||||||
|
$repository->shouldReceive('store')->andReturn($category);
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('POST', '/categories/store', ['_token' => 'replaceMe', 'name' => 'Bla bla #' . rand(1, 1000)]);
|
||||||
|
$this->assertResponseStatus(302);
|
||||||
|
$this->assertSessionHas('success', 'New category "' . $category->name . '" stored!');
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
public function testStoreAndRedirect()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
|
||||||
|
$repository->shouldReceive('store')->andReturn($category);
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('POST', '/categories/store', ['_token' => 'replaceMe', 'create_another' => 1, 'name' => 'Bla bla #' . rand(1, 1000)]);
|
||||||
|
$this->assertResponseStatus(302);
|
||||||
|
$this->assertSessionHas('success', 'New category "' . $category->name . '" stored!');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUpdate()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
|
||||||
|
$repository->shouldReceive('update')->andReturn($category);
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('POST', '/categories/update/' . $category->id, ['_token' => 'replaceMe', 'name' => 'Bla bla #' . rand(1, 1000)]);
|
||||||
|
$this->assertResponseStatus(302);
|
||||||
|
$this->assertSessionHas('success', 'Category "' . $category->name . '" updated.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUpdateAndRedirect()
|
||||||
|
{
|
||||||
|
$category = FactoryMuffin::create('FireflyIII\Models\Category');
|
||||||
|
$repository = $this->mock('FireflyIII\Repositories\Category\CategoryRepositoryInterface');
|
||||||
|
|
||||||
|
$repository->shouldReceive('update')->andReturn($category);
|
||||||
|
$this->be($category->user);
|
||||||
|
|
||||||
|
$this->call('POST', '/categories/update/' . $category->id, ['_token' => 'replaceMe', 'return_to_edit' => 1, 'name' => 'Bla bla #' . rand(1, 1000)]);
|
||||||
|
$this->assertResponseStatus(302);
|
||||||
|
$this->assertSessionHas('success', 'Category "' . $category->name . '" updated.');
|
||||||
|
}
|
||||||
|
}
|
@ -76,6 +76,15 @@ FactoryMuffin::define(
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
FactoryMuffin::define(
|
||||||
|
'FireflyIII\Models\Category',
|
||||||
|
[
|
||||||
|
'user_id' => 'factory|FireflyIII\User',
|
||||||
|
'name' => 'sentence',
|
||||||
|
'encrypted' => 1,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
FactoryMuffin::define(
|
FactoryMuffin::define(
|
||||||
'FireflyIII\Models\LimitRepetition',
|
'FireflyIII\Models\LimitRepetition',
|
||||||
[
|
[
|
||||||
|
Loading…
Reference in New Issue
Block a user