Improve test coverage.

This commit is contained in:
James Cole 2018-12-12 20:30:25 +01:00
parent 159fffef2e
commit 2a30293905
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
87 changed files with 1897 additions and 840 deletions

View File

@ -27,11 +27,8 @@ namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Support\Http\Api\TransactionFilter;
use FireflyIII\Transformers\BudgetLimitTransformer;
use FireflyIII\Transformers\TransactionTransformer;
@ -203,7 +200,7 @@ class BudgetLimitController extends Controller
$paginator = $collector->getPaginatedTransactions();
$paginator->setPath(route('api.v1.budget_limits.transactions', [$budgetLimit->id]) . $this->buildParams());
$transactions = $paginator->getCollection();
$resource = new FractalCollection($transactions, new TransactionTransformer($this->parameters), 'transactions');
$resource = new FractalCollection($transactions, new TransactionTransformer($this->parameters), 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
@ -219,12 +216,8 @@ class BudgetLimitController extends Controller
*/
public function update(BudgetLimitRequest $request, BudgetLimit $budgetLimit): JsonResponse
{
$data = $request->getAll();
$budget = $this->repository->findNull($data['budget_id']);
if (null === $budget) {
$budget = $budgetLimit->budget;
}
$data['budget'] = $budget;
$data = $request->getAll();
$data['budget'] = $budgetLimit->budget;
$budgetLimit = $this->repository->updateBudgetLimit($budgetLimit, $data);
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';

View File

@ -28,7 +28,6 @@ use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Support\Http\Api\TransactionFilter;
use FireflyIII\Transformers\TagTransformer;
@ -39,10 +38,10 @@ use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use League\Fractal\Resource\Collection as FractalCollection;
/**
* Class TagController
*/
@ -124,11 +123,11 @@ class TagController extends Controller
* List single resource.
*
* @param Request $request
* @param Tag $tag
* @param Tag $tag
*
* @return JsonResponse
*/
public function show(Request $request, Tag $tag): JsonResponse
public function show(Request $request, Tag $tag): JsonResponse
{
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
@ -140,6 +139,24 @@ class TagController extends Controller
}
/**
* Store new object.
*
* @param TagRequest $request
*
* @return JsonResponse
*/
public function store(TagRequest $request): JsonResponse
{
$rule = $this->repository->store($request->getAll());
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($rule, new TagTransformer($this->parameters), 'tags');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Show all transactions.
@ -188,31 +205,11 @@ class TagController extends Controller
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Store new object.
*
* @param TagRequest $request
*
* @return JsonResponse
*/
public function store(TagRequest $request): JsonResponse
{
$rule = $this->repository->store($request->getAll());
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($rule, new TagTransformer($this->parameters), 'tags');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Update a rule.
*
* @param TagRequest $request
* @param Tag $tag
* @param Tag $tag
*
* @return JsonResponse
*/

View File

@ -91,32 +91,13 @@ class TransactionController extends Controller
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$attachments = $transaction->transactionJournal->attachments()->get();
$attachments = $this->repository->getAttachmentsByTr($transaction);
$resource = new FractalCollection($attachments, new AttachmentTransformer($this->parameters), 'attachments');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param Request $request
* @param Transaction $transaction
*
* @return JsonResponse
*/
public function piggyBankEvents(Request $request, Transaction $transaction): JsonResponse
{
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$events= $transaction->transactionJournal->piggyBankEvents()->get();
$resource = new FractalCollection($events, new PiggyBankEventTransformer($this->parameters), 'piggy_bank_events');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Remove the specified resource from storage.
*
@ -177,6 +158,25 @@ class TransactionController extends Controller
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param Request $request
* @param Transaction $transaction
*
* @return JsonResponse
*/
public function piggyBankEvents(Request $request, Transaction $transaction): JsonResponse
{
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$events = $this->repository->getPiggyBankEventsByTr($transaction);
$resource = new FractalCollection($events, new PiggyBankEventTransformer($this->parameters), 'piggy_bank_events');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Show a single transaction.
*

View File

@ -59,7 +59,7 @@ class ConfigurationRequest extends Request
return ['value' => $this->integer('value')];
}
return ['value' => $this->string('value')];
return ['value' => $this->string('value')]; // @codeCoverageIgnore
}
/**
@ -78,6 +78,6 @@ class ConfigurationRequest extends Request
return ['value' => 'required|numeric|between:-1,1'];
}
return ['value' => 'required'];
return ['value' => 'required']; // @codeCoverageIgnore
}
}

View File

@ -25,7 +25,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Tag;
use Illuminate\Validation\Validator;
/**
* Class TagRequest
@ -57,7 +56,7 @@ class TagRequest extends Request
'description' => $this->string('description'),
'latitude' => '' === $this->string('latitude') ? null : $this->string('latitude'),
'longitude' => '' === $this->string('longitude') ? null : $this->string('longitude'),
'zoom_level' => $this->integer('zoom_level'),
'zoom_level' => $this->integer('zoom_level'),
];
return $data;
@ -76,7 +75,7 @@ class TagRequest extends Request
'date' => 'date|nullable',
'latitude' => 'numeric|min:-90|max:90|nullable|required_with:longitude',
'longitude' => 'numeric|min:-90|max:90|nullable|required_with:latitude',
'zoomLevel' => 'numeric|min:0|max:80|nullable',
'zoom_level' => 'numeric|min:0|max:80|nullable',
];
switch ($this->method()) {
default:
@ -91,25 +90,4 @@ class TagRequest extends Request
return $rules;
}
/**
* Configure the validator instance.
*
* @param Validator $validator
*
* @return void
*/
public function withValidator(Validator $validator): void
{
$validator->after(
function (Validator $validator) {
$data = $validator->getData();
$min = (float)($data['amount_min'] ?? 0);
$max = (float)($data['amount_max'] ?? 0);
if ($min > $max) {
$validator->errors()->add('amount_min', (string)trans('validation.amount_min_over_max'));
}
}
);
}
}

View File

@ -19,6 +19,7 @@ use Illuminate\Support\Collection;
/**
*
* Class ApplyRules
* @codeCoverageIgnore
*/
class ApplyRules extends Command
{

View File

@ -72,7 +72,7 @@ class TransactionFactory
throw new FireflyException('Amount is an empty string, which Firefly III cannot handle. Apologies.');
}
if (null === $currencyId) {
throw new FireflyException('Cannot store transaction without currency information.');
throw new FireflyException('Cannot store transaction without currency information.'); // @codeCoverageIgnore
}
$data['foreign_amount'] = '' === (string)$data['foreign_amount'] ? null : $data['foreign_amount'];
Log::debug(sprintf('Create transaction for account #%d ("%s") with amount %s', $data['account']->id, $data['account']->name, $data['amount']));

View File

@ -48,7 +48,7 @@ class AutomationHandler
$sendReport = envNonEmpty('SEND_REPORT_JOURNALS', true);
if (false === $sendReport) {
return true;
return true; // @codeCoverageIgnore
}
Log::debug('In reportJournals.');

View File

@ -31,6 +31,8 @@ use Illuminate\Support\Collection;
*
* Used when the final collection contains double transactions, which can happen when viewing the tag report.
* Class DoubleTransactionFilter
*
* @codeCoverageIgnore
*/
class DoubleTransactionFilter implements FilterInterface
{

View File

@ -86,9 +86,11 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider]));
return redirect(route('profile.index'));
// @codeCoverageIgnoreEnd
}
$title = auth()->user()->email;
@ -108,9 +110,11 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider]));
return redirect(route('profile.index'));
// @codeCoverageIgnoreEnd
}
$title = auth()->user()->email;
@ -150,7 +154,9 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
throw new FireflyException('Cannot confirm email change when authentication provider is not local.');
// @codeCoverageIgnoreEnd
}
// find preference with this token value.
/** @var Collection $set */
@ -187,7 +193,9 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
$request->session()->flash('warning', trans('firefly.delete_local_info_only', ['login_provider' => $loginProvider]));
// @codeCoverageIgnoreEnd
}
$title = auth()->user()->email;
$subTitle = (string)trans('firefly.delete_account');
@ -281,9 +289,11 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider]));
return redirect(route('profile.index'));
// @codeCoverageIgnoreEnd
}
/** @var User $user */
@ -333,9 +343,11 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.login_provider_local_only', ['login_provider' => $loginProvider]));
return redirect(route('profile.index'));
// @codeCoverageIgnoreEnd
}
// the request has already validated both new passwords must be equal.
@ -437,7 +449,9 @@ class ProfileController extends Controller
{
$loginProvider = config('firefly.login_provider');
if ('eloquent' !== $loginProvider) {
// @codeCoverageIgnoreStart
throw new FireflyException('Cannot confirm email change when authentication provider is not local.');
// @codeCoverageIgnoreEnd
}
// find preference with this token value.

View File

@ -40,6 +40,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property float $spent // used in category reports
* @property Carbon|null lastActivity
* @property bool encrypted
* @property User $user
* @property Carbon $created_at
* @property Carbon $updated_at
*/
class Category extends Model
{

View File

@ -44,7 +44,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property Carbon $created_at
* @property Carbon $updated_at
* @property string $title
* @property string $text
* @property int $order
* @property RuleGroup $ruleGroup
* @property int $rule_group_id

View File

@ -709,6 +709,54 @@ class BudgetRepository implements BudgetRepositoryInterface
return (string)$set->sum('transaction_amount');
}
/**
* @param Collection $budgets
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
public function spentInPeriodMc(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array
{
/** @var TransactionCollectorInterface $collector */
$collector = app(TransactionCollectorInterface::class);
$collector->setUser($this->user);
$collector->setRange($start, $end)->setBudgets($budgets)->withBudgetInformation();
if ($accounts->count() > 0) {
$collector->setAccounts($accounts);
}
if (0 === $accounts->count()) {
$collector->setAllAssetAccounts();
}
$set = $collector->getTransactions();
$return = [];
$total = [];
$currencies = [];
/** @var Transaction $transaction */
foreach ($set as $transaction) {
$code = $transaction->transaction_currency_code;
if (!isset($currencies[$code])) {
$currencies[$code] = $transaction->transactionCurrency;
}
$total[$code] = isset($total[$code]) ? bcadd($total[$code], $transaction->transaction_amount) : $transaction->transaction_amount;
}
foreach ($total as $code => $spent) {
/** @var TransactionCurrency $currency */
$currency = $currencies[$code];
$return[] = [
'currency_code' => $code,
'currency_symbol' => $currency->symbol,
'currency_dp' => $currency->decimal_places,
'amount' => round($spent, $currency->decimal_places),
];
}
return $return;
}
/**
* @param Collection $accounts
* @param Carbon $start

View File

@ -35,7 +35,6 @@ use Illuminate\Support\Collection;
*/
interface BudgetRepositoryInterface
{
/**
* A method that returns the amount of money budgeted per day for this budget,
* on average.
@ -166,13 +165,13 @@ interface BudgetRepositoryInterface
*/
public function getBudgetPeriodReport(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @return Collection
*/
public function getBudgets(): Collection;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* Get all budgets with these ID's.
*
@ -206,20 +205,19 @@ interface BudgetRepositoryInterface
*/
public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Budget $budget
* @param int $order
*/
public function setBudgetOrder(Budget $budget, int $order): void;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param User $user
*/
public function setUser(User $user);
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Collection $budgets
* @param Collection $accounts
@ -230,6 +228,20 @@ interface BudgetRepositoryInterface
*/
public function spentInPeriod(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): string;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* Return multi-currency spent information.
*
* @param Collection $budgets
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
public function spentInPeriodMc(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array;
/**
* @param Collection $accounts
* @param Carbon $start

View File

@ -274,6 +274,16 @@ class JournalRepository implements JournalRepositoryInterface
return $journal->attachments;
}
/**
* @param Transaction $transaction
*
* @return Collection
*/
public function getAttachmentsByTr(Transaction $transaction): Collection
{
return $transaction->transactionJournal->attachments()->get();
}
/**
* Returns the first positive transaction for the journal. Useful when editing journals.
*
@ -574,6 +584,16 @@ class JournalRepository implements JournalRepositoryInterface
return $events;
}
/**
* @param Transaction $transaction
*
* @return Collection
*/
public function getPiggyBankEventsbyTr(Transaction $transaction): Collection
{
return $transaction->transactionJournal->piggyBankEvents()->get();
}
/**
* Return all tags as strings in an array.
*

View File

@ -122,6 +122,13 @@ interface JournalRepositoryInterface
*/
public function getAttachments(TransactionJournal $journal): Collection;
/**
* @param Transaction $transaction
*
* @return Collection
*/
public function getAttachmentsByTr(Transaction $transaction): Collection;
/**
* Returns the first positive transaction for the journal. Useful when editing journals.
*
@ -233,6 +240,13 @@ interface JournalRepositoryInterface
*/
public function getPiggyBankEvents(TransactionJournal $journal): Collection;
/**
* @param Transaction $transaction
*
* @return Collection
*/
public function getPiggyBankEventsbyTr(Transaction $transaction): Collection;
/**
* Return all tags as strings in an array.
*

View File

@ -118,8 +118,8 @@ class AccountTransformer extends TransformerAbstract
$data = [
'id' => (int)$account->id,
'updated_at' => $account->updated_at->toAtomString(),
'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(),
'active' => 1 === (int)$account->active,
'name' => $account->name,
'type' => $type,

View File

@ -66,8 +66,8 @@ class AttachmentTransformer extends TransformerAbstract
return [
'id' => (int)$attachment->id,
'updated_at' => $attachment->updated_at->toAtomString(),
'created_at' => $attachment->created_at->toAtomString(),
'updated_at' => $attachment->updated_at->toAtomString(),
'attachable_id' => $attachment->attachable_id,
'attachable_type' => str_replace('FireflyIII\\Models\\','',$attachment->attachable_type),
'md5' => $attachment->md5,

View File

@ -25,7 +25,6 @@ namespace FireflyIII\Transformers;
use FireflyIII\Models\AvailableBudget;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
use Symfony\Component\HttpFoundation\ParameterBag;
@ -58,14 +57,19 @@ class AvailableBudgetTransformer extends TransformerAbstract
*/
public function transform(AvailableBudget $availableBudget): array
{
$data = [
'id' => (int)$availableBudget->id,
'updated_at' => $availableBudget->updated_at->toAtomString(),
'created_at' => $availableBudget->created_at->toAtomString(),
'start_date' => $availableBudget->start_date->format('Y-m-d'),
'end_date' => $availableBudget->end_date->format('Y-m-d'),
'amount' => round($availableBudget->amount, $availableBudget->transactionCurrency->decimal_places),
'links' => [
$currency = $availableBudget->transactionCurrency;
$data = [
'id' => (int)$availableBudget->id,
'created_at' => $availableBudget->created_at->toAtomString(),
'updated_at' => $availableBudget->updated_at->toAtomString(),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_dp' => $currency->decimal_places,
'start' => $availableBudget->start_date->format('Y-m-d'),
'end' => $availableBudget->end_date->format('Y-m-d'),
'amount' => round($availableBudget->amount, $currency->decimal_places),
'links' => [
[
'rel' => 'self',
'uri' => '/available_budgets/' . $availableBudget->id,

View File

@ -72,24 +72,24 @@ class BillTransformer extends TransformerAbstract
$this->repository->setUser($bill->user);
$data = [
'id' => (int)$bill->id,
'updated_at' => $bill->updated_at->toAtomString(),
'created_at' => $bill->created_at->toAtomString(),
'name' => $bill->name,
'updated_at' => $bill->updated_at->toAtomString(),
'currency_id' => $bill->transaction_currency_id,
'currency_code' => $bill->transactionCurrency->code,
'currency_symbol' => $bill->transactionCurrency->symbol,
'currency_dp' => $bill->transactionCurrency->decimal_places,
'name' => $bill->name,
'amount_min' => round((float)$bill->amount_min, 2),
'amount_max' => round((float)$bill->amount_max, 2),
'date' => $bill->date->format('Y-m-d'),
'repeat_freq' => $bill->repeat_freq,
'skip' => (int)$bill->skip,
'automatch' => $bill->automatch,
'active' => $bill->active,
'attachments_count' => $bill->attachments()->count(),
'pay_dates' => $payDates,
'notes' => $this->repository->getNoteText($bill),
'paid_dates' => $paidData['paid_dates'],
'next_expected_match' => $paidData['next_expected_match'],
'pay_dates' => $payDates,
'paid_dates' => $paidData['paid_dates'],
'links' => [
[
'rel' => 'self',

View File

@ -71,8 +71,8 @@ class BudgetLimitTransformer extends TransformerAbstract
}
$data = [
'id' => (int)$budgetLimit->id,
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'created_at' => $budgetLimit->created_at->toAtomString(),
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'start_date' => $budgetLimit->start_date->format('Y-m-d'),
'end_date' => $budgetLimit->end_date->format('Y-m-d'),
'budget_id' => $budgetLimit->budget_id,

View File

@ -24,11 +24,9 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Budget;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use Illuminate\Support\Collection;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
use Symfony\Component\HttpFoundation\ParameterBag;
@ -61,12 +59,24 @@ class BudgetTransformer extends TransformerAbstract
*/
public function transform(Budget $budget): array
{
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$spent = [];
if (null !== $start && null !== $end) {
/** @var BudgetRepositoryInterface $repository */
$repository = app(BudgetRepositoryInterface::class);
$repository->setUser($budget->user);
$spent = $repository->spentInPeriodMc(new Collection([$budget]), new Collection, $start, $end);
}
$data = [
'id' => (int)$budget->id,
'updated_at' => $budget->updated_at->toAtomString(),
'created_at' => $budget->created_at->toAtomString(),
'updated_at' => $budget->updated_at->toAtomString(),
'active' => 1 === (int)$budget->active,
'name' => $budget->name,
'spent' => $spent,
'links' => [
[
'rel' => 'self',

View File

@ -24,11 +24,12 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use Carbon\Carbon;
use FireflyIII\Models\Category;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use Illuminate\Support\Collection;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
use Symfony\Component\HttpFoundation\ParameterBag;
@ -61,11 +62,21 @@ class CategoryTransformer extends TransformerAbstract
*/
public function transform(Category $category): array
{
$spent = [];
$earned = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
if (null !== $start && null !== $end) {
$spent = $this->getSpentInformation($category, $start, $end);
$earned = $this->getEarnedInformation($category, $start, $end);
}
$data = [
'id' => (int)$category->id,
'updated_at' => $category->updated_at->toAtomString(),
'created_at' => $category->created_at->toAtomString(),
'updated_at' => $category->updated_at->toAtomString(),
'name' => $category->name,
'spent' => $spent,
'earned' => $earned,
'links' => [
[
'rel' => 'self',
@ -77,4 +88,80 @@ class CategoryTransformer extends TransformerAbstract
return $data;
}
/**
* @param Category $category
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
private function getEarnedInformation(Category $category, Carbon $start, Carbon $end): array
{
/** @var CategoryRepositoryInterface $repository */
$repository = app(CategoryRepositoryInterface::class);
$repository->setUser($category->user);
$collection = $repository->earnedInPeriodCollection(new Collection([$category]), new Collection, $start, $end);
$return = [];
$total = [];
$currencies = [];
/** @var Transaction $transaction */
foreach ($collection as $transaction) {
$code = $transaction->transaction_currency_code;
if (!isset($currencies[$code])) {
$currencies[$code] = $transaction->transactionCurrency;
}
$total[$code] = isset($total[$code]) ? bcadd($total[$code], $transaction->transaction_amount) : $transaction->transaction_amount;
}
foreach ($total as $code => $earned) {
/** @var TransactionCurrency $currency */
$currency = $currencies[$code];
$return[] = [
'currency_code' => $code,
'currency_symbol' => $currency->symbol,
'currency_dp' => $currency->decimal_places,
'amount' => round($earned, $currency->decimal_places),
];
}
return $return;
}
/**
* @param Category $category
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
private function getSpentInformation(Category $category, Carbon $start, Carbon $end): array
{
/** @var CategoryRepositoryInterface $repository */
$repository = app(CategoryRepositoryInterface::class);
$repository->setUser($category->user);
$collection = $repository->spentInPeriodCollection(new Collection([$category]), new Collection, $start, $end);
$return = [];
$total = [];
$currencies = [];
/** @var Transaction $transaction */
foreach ($collection as $transaction) {
$code = $transaction->transaction_currency_code;
if (!isset($currencies[$code])) {
$currencies[$code] = $transaction->transactionCurrency;
}
$total[$code] = isset($total[$code]) ? bcadd($total[$code], $transaction->transaction_amount) : $transaction->transaction_amount;
}
foreach ($total as $code => $spent) {
/** @var TransactionCurrency $currency */
$currency = $currencies[$code];
$return[] = [
'currency_code' => $code,
'currency_symbol' => $currency->symbol,
'currency_dp' => $currency->decimal_places,
'amount' => round($spent, $currency->decimal_places),
];
}
return $return;
}
}

View File

@ -59,8 +59,8 @@ class CurrencyExchangeRateTransformer extends TransformerAbstract
$result = 0.0 === $result ? null : $result;
$data = [
'id' => (int)$rate->id,
'updated_at' => $rate->updated_at->toAtomString(),
'created_at' => $rate->created_at->toAtomString(),
'updated_at' => $rate->updated_at->toAtomString(),
'from_currency_id' => $rate->fromCurrency->id,
'from_currency_name' => $rate->fromCurrency->name,
'from_currency_code' => $rate->fromCurrency->code,

View File

@ -63,14 +63,14 @@ class CurrencyTransformer extends TransformerAbstract
}
$data = [
'id' => (int)$currency->id,
'updated_at' => $currency->updated_at->toAtomString(),
'created_at' => $currency->created_at->toAtomString(),
'updated_at' => $currency->updated_at->toAtomString(),
'default' => $isDefault,
'enabled' => $currency->enabled,
'name' => $currency->name,
'code' => $currency->code,
'symbol' => $currency->symbol,
'decimal_places' => (int)$currency->decimal_places,
'default' => $isDefault,
'enabled' => $currency->enabled,
'links' => [
[
'rel' => 'self',

View File

@ -67,8 +67,10 @@ class ImportJobTransformer extends TransformerAbstract
}
$data = [
'id' => (int)$importJob->id,
'updated_at' => $importJob->updated_at->toAtomString(),
'created_at' => $importJob->created_at->toAtomString(),
'updated_at' => $importJob->updated_at->toAtomString(),
'tag_id' => $tagId,
'tag_tag' => $tagTag,
'key' => $importJob->key,
'file_type' => $importJob->file_type,
'provider' => $importJob->provider,
@ -78,8 +80,7 @@ class ImportJobTransformer extends TransformerAbstract
'extended_status' => $importJob->extended_status,
'transactions' => $importJob->transactions,
'errors' => $importJob->errors,
'tag_id' => $tagId,
'tag_tag' => $tagTag,
'links' => [
[
'rel' => 'self',

View File

@ -66,8 +66,8 @@ class JournalLinkTransformer extends TransformerAbstract
$data = [
'id' => (int)$link->id,
'updated_at' => $link->updated_at->toAtomString(),
'created_at' => $link->created_at->toAtomString(),
'updated_at' => $link->updated_at->toAtomString(),
'inward_id' => $link->source_id,
'outward_id' => $link->destination_id,
'notes' => $notes,

View File

@ -62,8 +62,8 @@ class JournalMetaTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$meta->id,
'updated_at' => $meta->updated_at->toAtomString(),
'created_at' => $meta->created_at->toAtomString(),
'updated_at' => $meta->updated_at->toAtomString(),
'name' => $meta->name,
'data' => $meta->data,
'hash' => $meta->hash,

View File

@ -74,8 +74,8 @@ class LinkTypeTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$linkType->id,
'updated_at' => $linkType->updated_at->toAtomString(),
'created_at' => $linkType->created_at->toAtomString(),
'updated_at' => $linkType->updated_at->toAtomString(),
'name' => $linkType->name,
'inward' => $linkType->inward,
'outward' => $linkType->outward,

View File

@ -74,8 +74,8 @@ class NoteTransformer extends TransformerAbstract
$converter = new CommonMarkConverter;
$data = [
'id' => (int)$note->id,
'updated_at' => $note->updated_at->toAtomString(),
'created_at' => $note->created_at->toAtomString(),
'updated_at' => $note->updated_at->toAtomString(),
'title' => $note->title,
'text' => $note->text,
'markdown' => $converter->convertToHtml($note->text),

View File

@ -85,8 +85,8 @@ class PiggyBankEventTransformer extends TransformerAbstract
$data = [
'id' => (int)$event->id,
'updated_at' => $event->updated_at->toAtomString(),
'created_at' => $event->created_at->toAtomString(),
'updated_at' => $event->updated_at->toAtomString(),
'amount' => round($event->amount, $decimalPlaces),
'currency_id' => $currency->id,
'currency_code' => $currency->code,

View File

@ -102,8 +102,8 @@ class PiggyBankTransformer extends TransformerAbstract
$percentage = (int)(0 !== bccomp('0', $currentAmountStr) ? $currentAmount / $targetAmount * 100 : 0);
$data = [
'id' => (int)$piggyBank->id,
'updated_at' => $piggyBank->updated_at->toAtomString(),
'created_at' => $piggyBank->created_at->toAtomString(),
'updated_at' => $piggyBank->updated_at->toAtomString(),
'name' => $piggyBank->name,
'currency_id' => $currency->id,
'currency_code' => $currency->code,

View File

@ -57,8 +57,8 @@ class PreferenceTransformer extends TransformerAbstract
{
return [
'id' => (int)$preference->id,
'updated_at' => $preference->updated_at->toAtomString(),
'created_at' => $preference->created_at->toAtomString(),
'updated_at' => $preference->updated_at->toAtomString(),
'name' => $preference->name,
'data' => $preference->data,
];

View File

@ -36,7 +36,6 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use League\Fractal\Resource\Item;
use League\Fractal\TransformerAbstract;
use Symfony\Component\HttpFoundation\ParameterBag;
@ -78,8 +77,8 @@ class RecurrenceTransformer extends TransformerAbstract
// basic data.
$return = [
'id' => (int)$recurrence->id,
'updated_at' => $recurrence->updated_at->toAtomString(),
'created_at' => $recurrence->created_at->toAtomString(),
'updated_at' => $recurrence->updated_at->toAtomString(),
'transaction_type_id' => $recurrence->transaction_type_id,
'transaction_type' => $recurrence->transactionType->type,
'title' => $recurrence->title,
@ -172,15 +171,15 @@ class RecurrenceTransformer extends TransformerAbstract
/** @var RecurrenceRepetition $repetition */
foreach ($recurrence->recurrenceRepetitions as $repetition) {
$repetitionArray = [
'id' => $repetition->id,
'updated_at' => $repetition->updated_at->toAtomString(),
'created_at' => $repetition->created_at->toAtomString(),
'repetition_type' => $repetition->repetition_type,
'repetition_moment' => $repetition->repetition_moment,
'repetition_skip' => (int)$repetition->repetition_skip,
'weekend' => (int)$repetition->weekend,
'description' => $this->repository->repetitionDescription($repetition),
'occurrences' => [],
'id' => $repetition->id,
'created_at' => $repetition->created_at->toAtomString(),
'updated_at' => $repetition->updated_at->toAtomString(),
'type' => $repetition->repetition_type,
'moment' => $repetition->repetition_moment,
'skip' => (int)$repetition->repetition_skip,
'weekend' => (int)$repetition->weekend,
'description' => $this->repository->repetitionDescription($repetition),
'occurrences' => [],
];
// get the (future) occurrences for this specific type of repetition:
@ -255,22 +254,38 @@ class RecurrenceTransformer extends TransformerAbstract
/** @var RecurrenceTransaction $transaction */
foreach ($recurrence->recurrenceTransactions as $transaction) {
$sourceAccount = $transaction->sourceAccount;
$destinationAccount = $transaction->destinationAccount;
$transactionArray = [
'currency_id' => $transaction->transaction_currency_id,
'currency_code' => $transaction->transactionCurrency->code,
'currency_symbol' => $transaction->transactionCurrency->symbol,
'currency_dp' => $transaction->transactionCurrency->decimal_places,
'foreign_currency_id' => $transaction->foreign_currency_id,
'source_id' => $transaction->source_id,
'source_name' => null === $sourceAccount ? '' : $sourceAccount->name,
'destination_id' => $transaction->destination_id,
'destination_name' => null === $destinationAccount ? '' : $destinationAccount->name,
'amount' => $transaction->amount,
'foreign_amount' => $transaction->foreign_amount,
'description' => $transaction->description,
'meta' => $this->getTransactionMeta($transaction),
$sourceAccount = $transaction->sourceAccount;
$destinationAccount = $transaction->destinationAccount;
$foreignCurrencyCode = null;
$foreignCurrencySymbol = null;
$foreignCurrencyDp = null;
if (null !== $transaction->foreign_currency_id) {
$foreignCurrencyCode = $transaction->foreignCurrency->code;
$foreignCurrencySymbol = $transaction->foreignCurrency->symbol;
$foreignCurrencyDp = $transaction->foreignCurrency->decimal_places;
}
$amount = round($transaction->amount, $transaction->transactionCurrency->decimal_places);
$foreignAmount = null;
if (null !== $transaction->foreign_currency_id && null !== $transaction->foreign_amount) {
$foreignAmount = round($transaction->foreign_amount, $foreignCurrencyDp);
}
$transactionArray = [
'currency_id' => $transaction->transaction_currency_id,
'currency_code' => $transaction->transactionCurrency->code,
'currency_symbol' => $transaction->transactionCurrency->symbol,
'currency_dp' => $transaction->transactionCurrency->decimal_places,
'foreign_currency_id' => $transaction->foreign_currency_id,
'foreign_currency_code' => $foreignCurrencyCode,
'foreign_currency_symbol' => $foreignCurrencySymbol,
'foreign_currency_dp' => $foreignCurrencyDp,
'source_id' => $transaction->source_id,
'source_name' => null === $sourceAccount ? '' : $sourceAccount->name,
'destination_id' => $transaction->destination_id,
'destination_name' => null === $destinationAccount ? '' : $destinationAccount->name,
'amount' => $amount,
'foreign_amount' => $foreignAmount,
'description' => $transaction->description,
'meta' => $this->getTransactionMeta($transaction),
];
if (null !== $transaction->foreign_currency_id) {
$transactionArray['foreign_currency_code'] = $transaction->foreignCurrency->code;

View File

@ -60,10 +60,10 @@ class RuleActionTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$ruleAction->id,
'updated_at' => $ruleAction->updated_at->toAtomString(),
'created_at' => $ruleAction->created_at->toAtomString(),
'action_type' => $ruleAction->action_type,
'action_value' => $ruleAction->action_value,
'updated_at' => $ruleAction->updated_at->toAtomString(),
'type' => $ruleAction->action_type,
'value' => $ruleAction->action_value,
'order' => $ruleAction->order,
'active' => $ruleAction->active,
'stop_processing' => $ruleAction->stop_processing,

View File

@ -58,8 +58,8 @@ class RuleGroupTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$ruleGroup->id,
'updated_at' => $ruleGroup->updated_at->toAtomString(),
'created_at' => $ruleGroup->created_at->toAtomString(),
'updated_at' => $ruleGroup->updated_at->toAtomString(),
'title' => $ruleGroup->title,
'description' => $ruleGroup->description,
'order' => $ruleGroup->order,

View File

@ -61,14 +61,15 @@ class RuleTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$rule->id,
'updated_at' => $rule->updated_at->toAtomString(),
'created_at' => $rule->created_at->toAtomString(),
'updated_at' => $rule->updated_at->toAtomString(),
'rule_group_id' => (int)$rule->rule_group_id,
'title' => $rule->title,
'description' => $rule->text,
'description' => $rule->description,
'order' => (int)$rule->order,
'active' => $rule->active,
'stop_processing' => $rule->stop_processing,
'strict' => $rule->strict,
'stop_processing' => $rule->stop_processing,
'triggers' => $this->triggers($rule),
'actions' => $this->actions($rule),
'links' => [
@ -95,8 +96,8 @@ class RuleTransformer extends TransformerAbstract
foreach ($actions as $ruleAction) {
$result[] = [
'id' => (int)$ruleAction->id,
'updated_at' => $ruleAction->updated_at->toAtomString(),
'created_at' => $ruleAction->created_at->toAtomString(),
'updated_at' => $ruleAction->updated_at->toAtomString(),
'type' => $ruleAction->action_type,
'value' => $ruleAction->action_value,
'order' => $ruleAction->order,
@ -121,8 +122,8 @@ class RuleTransformer extends TransformerAbstract
foreach ($triggers as $ruleTrigger) {
$result[] = [
'id' => (int)$ruleTrigger->id,
'updated_at' => $ruleTrigger->updated_at->toAtomString(),
'created_at' => $ruleTrigger->created_at->toAtomString(),
'updated_at' => $ruleTrigger->updated_at->toAtomString(),
'type' => $ruleTrigger->trigger_type,
'value' => $ruleTrigger->trigger_value,
'order' => $ruleTrigger->order,

View File

@ -59,10 +59,10 @@ class RuleTriggerTransformer extends TransformerAbstract
{
$data = [
'id' => (int)$ruleTrigger->id,
'updated_at' => $ruleTrigger->updated_at->toAtomString(),
'created_at' => $ruleTrigger->created_at->toAtomString(),
'trigger_type' => $ruleTrigger->trigger_type,
'trigger_value' => $ruleTrigger->trigger_value,
'updated_at' => $ruleTrigger->updated_at->toAtomString(),
'type' => $ruleTrigger->trigger_type,
'value' => $ruleTrigger->trigger_value,
'order' => $ruleTrigger->order,
'active' => $ruleTrigger->active,
'stop_processing' => $ruleTrigger->stop_processing,

View File

@ -66,8 +66,8 @@ class TagTransformer extends TransformerAbstract
$date = null === $tag->date ? null : $tag->date->format('Y-m-d');
$data = [
'id' => (int)$tag->id,
'updated_at' => $tag->updated_at->toAtomString(),
'created_at' => $tag->created_at->toAtomString(),
'updated_at' => $tag->updated_at->toAtomString(),
'tag' => $tag->tag,
'date' => $date,
'description' => '' === $tag->description ? null : $tag->description,

View File

@ -85,8 +85,8 @@ class TransactionTransformer extends TransformerAbstract
$data = [
'id' => (int)$transaction->id,
'updated_at' => $transaction->updated_at->toAtomString(),
'created_at' => $transaction->created_at->toAtomString(),
'updated_at' => $transaction->updated_at->toAtomString(),
'description' => $transaction->description,
'transaction_description' => $transaction->transaction_description,
'date' => $transaction->date->format('Y-m-d'),

View File

@ -66,8 +66,8 @@ class UserTransformer extends TransformerAbstract
return [
'id' => (int)$user->id,
'updated_at' => $user->updated_at->toAtomString(),
'created_at' => $user->created_at->toAtomString(),
'updated_at' => $user->updated_at->toAtomString(),
'email' => $user->email,
'blocked' => 1 === (int)$user->blocked,
'blocked_code' => '' === $user->blocked_code ? null : $user->blocked_code,

View File

@ -301,7 +301,7 @@ Route::group(
Route::get('{tagOrId}', ['uses' => 'TagController@show', 'as' => 'show']);
Route::put('{tagOrId}', ['uses' => 'TagController@update', 'as' => 'update']);
Route::delete('{tagOrId}', ['uses' => 'TagController@delete', 'as' => 'delete']);
Route::get('{tagOrId}/transactions', ['uses' => 'TagController@transactions', 'as' => 'delete']);
Route::get('{tagOrId}/transactions', ['uses' => 'TagController@transactions', 'as' => 'transactions']);
}
);

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\TransactionCurrency;
@ -32,6 +30,8 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Mockery;
@ -520,31 +520,14 @@ class AccountControllerTest extends TestCase
$asset = $this->getRandomAsset();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$accountRepos->shouldReceive('isAsset')->atLeast()->once()->andReturnTrue();
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -565,7 +548,7 @@ class AccountControllerTest extends TestCase
$response = $this->get(route('api.v1.accounts.transactions', [$asset->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -582,34 +565,15 @@ class AccountControllerTest extends TestCase
$accountRepos->shouldReceive('getAccountsByType')
->andReturn($this->user()->accounts()->where('account_type_id', 3)->get());
$revenue = $this->getRandomRevenue();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$revenue = $this->getRandomRevenue();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$accountRepos->shouldReceive('isAsset')->atLeast()->once()->andReturnFalse();
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -619,18 +583,13 @@ class AccountControllerTest extends TestCase
$collector->shouldReceive('setLimit')->andReturnSelf();
$collector->shouldReceive('setPage')->andReturnSelf();
$collector->shouldReceive('setTypes')->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
// mock some calls:
// test API
$response = $this->get(route('api.v1.accounts.transactions', [$revenue->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -647,34 +606,14 @@ class AccountControllerTest extends TestCase
$accountRepos->shouldReceive('getAccountsByType')
->andReturn($this->user()->accounts()->where('account_type_id', 3)->get());
$asset = $this->getRandomAsset();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$asset = $this->getRandomAsset();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$accountRepos->shouldReceive('isAsset')->atLeast()->once()->andReturnTrue();
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -696,7 +635,7 @@ class AccountControllerTest extends TestCase
$response = $this->get(route('api.v1.accounts.transactions', [$asset->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31']));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}

View File

@ -56,7 +56,8 @@ class AvailableBudgetControllerTest extends TestCase
public function testDelete(): void
{
// mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
// mock calls:
$repository->shouldReceive('setUser')->once();
@ -79,7 +80,8 @@ class AvailableBudgetControllerTest extends TestCase
{
$availableBudgets = $this->user()->availableBudgets()->get();
// mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
// mock calls:
$repository->shouldReceive('setUser')->once();
@ -100,7 +102,8 @@ class AvailableBudgetControllerTest extends TestCase
{
$availableBudget = $this->user()->availableBudgets()->first();
// mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
// mock calls:
$repository->shouldReceive('setUser')->once();

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Attachment;
use FireflyIII\Models\Bill;
@ -277,36 +275,16 @@ class BillControllerTest extends TestCase
*/
public function testTransactionsBasic(): void
{
$bill = $this->user()->bills()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$bill = $this->user()->bills()->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -317,8 +295,6 @@ class BillControllerTest extends TestCase
$collector->shouldReceive('setPage')->andReturnSelf();
$collector->shouldReceive('setTypes')->andReturnSelf();
$collector->shouldReceive('setAllAssetAccounts')->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
@ -328,7 +304,7 @@ class BillControllerTest extends TestCase
$response = $this->get(route('api.v1.bills.transactions', [$bill->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -340,34 +316,16 @@ class BillControllerTest extends TestCase
*/
public function testTransactionsRange(): void
{
$bill = $this->user()->bills()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$bill = $this->user()->bills()->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -390,7 +348,7 @@ class BillControllerTest extends TestCase
$response = $this->get(route('api.v1.bills.transactions', [$bill->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31']));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
@ -34,6 +32,8 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Tests\TestCase;
@ -217,38 +217,19 @@ class BudgetControllerTest extends TestCase
*/
public function testTransactionsBasic(): void
{
$budget = $this->user()->budgets()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$budget = $this->user()->budgets()->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$budgetRepos->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -261,14 +242,11 @@ class BudgetControllerTest extends TestCase
$collector->shouldReceive('setAllAssetAccounts')->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
// mock some calls:
// test API
$response = $this->get(route('api.v1.budgets.transactions', [$budget->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -280,36 +258,17 @@ class BudgetControllerTest extends TestCase
*/
public function testTransactionsRange(): void
{
$budget = $this->user()->budgets()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$budget = $this->user()->budgets()->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$budgetRepos->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -321,18 +280,14 @@ class BudgetControllerTest extends TestCase
$collector->shouldReceive('setPage')->andReturnSelf();
$collector->shouldReceive('setTypes')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
// mock some calls:
// test API
$response = $this->get(route('api.v1.budgets.transactions', [$budget->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31']));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
@ -34,6 +32,8 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Tests\TestCase;
@ -269,38 +269,18 @@ class BudgetLimitControllerTest extends TestCase
*/
public function testTransactionsBasic(): void
{
$budgetLimit = BudgetLimit::first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$budgetLimit = BudgetLimit::first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$budgetRepos->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -321,7 +301,7 @@ class BudgetLimitControllerTest extends TestCase
$response = $this->get(route('api.v1.budget_limits.transactions', [$budgetLimit->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -352,7 +332,6 @@ class BudgetLimitControllerTest extends TestCase
];
// mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository->shouldReceive('findNull')->andReturn($budget)->once();
$repository->shouldReceive('updateBudgetLimit')->andReturn($budgetLimit)->once();
@ -365,43 +344,4 @@ class BudgetLimitControllerTest extends TestCase
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
/**
* Test update of budget limit but submit bad budget.
*
* @covers \FireflyIII\Api\V1\Controllers\BudgetLimitController
* @covers \FireflyIII\Api\V1\Requests\BudgetLimitRequest
*/
public function testUpdateBadBudget(): void
{
$budget = $this->user()->budgets()->first();
$budgetLimit = BudgetLimit::create(
[
'budget_id' => $budget->id,
'start_date' => '2018-01-01',
'end_date' => '2018-01-31',
'amount' => 1,
]
);
$data
= [
'budget_id' => $budget->id,
'start' => '2018-01-01',
'end' => '2018-01-31',
'amount' => 2,
];
// mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository->shouldReceive('findNull')->andReturn(null)->once();
// mock calls:
$repository->shouldReceive('setUser')->once();
// call API
$response = $this->put('/api/v1/budgets/limits/' . $budgetLimit->id, $data);
$response->assertStatus(500);
$response->assertSee('Unknown budget.');
}
}

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Category;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -33,6 +31,8 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Tests\TestCase;
@ -157,36 +157,19 @@ class CategoryControllerTest extends TestCase
*/
public function testTransactionsBasic(): void
{
$category = $this->user()->categories()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$category = $this->user()->categories()->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$categoryRepos->shouldReceive('setUser')->atLeast()->once();
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -206,7 +189,7 @@ class CategoryControllerTest extends TestCase
$response = $this->get(route('api.v1.categories.transactions', [$category->id]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -218,34 +201,18 @@ class CategoryControllerTest extends TestCase
*/
public function testTransactionsRange(): void
{
$category = $this->user()->categories()->first();
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$category = $this->user()->categories()->first();
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$categoryRepos->shouldReceive('setUser')->atLeast()->once();
$billRepos->shouldReceive('setUser');
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -257,21 +224,14 @@ class CategoryControllerTest extends TestCase
$collector->shouldReceive('setPage')->andReturnSelf();
$collector->shouldReceive('setTypes')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->andReturn($paginator);
// mock some calls:
// test API
$response = $this->get(
route('api.v1.categories.transactions', [$category->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31'])
);
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}

View File

@ -114,6 +114,7 @@ class ConfigurationControllerTest extends TestCase
* Set configuration variables.
*
* @covers \FireflyIII\Api\V1\Controllers\ConfigurationController
* @covers \FireflyIII\Api\V1\Requests\ConfigurationRequest
*/
public function testUpdate(): void
{
@ -165,6 +166,7 @@ class ConfigurationControllerTest extends TestCase
* Set configuration variables.
*
* @covers \FireflyIII\Api\V1\Controllers\ConfigurationController
* @covers \FireflyIII\Api\V1\Requests\ConfigurationRequest
*/
public function testUpdateBoolean(): void
{
@ -217,6 +219,7 @@ class ConfigurationControllerTest extends TestCase
* Set configuration variable that you're not allowed to change
*
* @covers \FireflyIII\Api\V1\Controllers\ConfigurationController
* @covers \FireflyIII\Api\V1\Requests\ConfigurationRequest
*/
public function testUpdateInvalid(): void
{
@ -232,6 +235,7 @@ class ConfigurationControllerTest extends TestCase
* Set configuration variables but you're not the owner.
*
* @covers \FireflyIII\Api\V1\Controllers\ConfigurationController
* @covers \FireflyIII\Api\V1\Requests\ConfigurationRequest
*/
public function testUpdateNotOwner(): void
{

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\TransactionCollector;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\Bill;
@ -115,10 +113,12 @@ class CurrencyControllerTest extends TestCase
{
$availableBudgets = $this->user()->availableBudgets()->get();
// mock stuff:
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
// mock calls:
$currencyRepos->shouldReceive('setUser')->once();
$budgetRepos->shouldReceive('setUser')->once();
$budgetRepos->shouldReceive('getAvailableBudgets')->once()->andReturn($availableBudgets);
@ -140,10 +140,13 @@ class CurrencyControllerTest extends TestCase
$bills = factory(Bill::class, 10)->create();
$paginator = new LengthAwarePaginator($bills, 10, 50, 1);
// mock stuff:
$repository = $this->mock(BillRepositoryInterface::class);
$repository = $this->mock(BillRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
// mock calls:
$repository->shouldReceive('setUser');
$currencyRepos->shouldReceive('setUser')->once();
$repository->shouldReceive('getPaginator')->withAnyArgs()->andReturn($paginator)->once();
$repository->shouldReceive('getRulesForBill')->withAnyArgs()->andReturn(new Collection());
$repository->shouldReceive('getNoteText')->andReturn('Hi there');
@ -164,13 +167,16 @@ class CurrencyControllerTest extends TestCase
public function testBudgetLimits(): void
{
$repository = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$budgetLimit = BudgetLimit::first();
$budgetLimit->transaction_currency_id = $currency->id;
$collection = new Collection([$budgetLimit]);
// mock calls:
$repository->shouldReceive('getAllBudgetLimits')->once()->andReturn($collection);
$currencyRepos->shouldReceive('setUser')->once();
$response = $this->get(route('api.v1.currencies.budget_limits', [$currency->code]));
$response->assertStatus(200);
@ -183,6 +189,7 @@ class CurrencyControllerTest extends TestCase
public function testCer(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository->shouldReceive('setUser')->once();
$repository->shouldReceive('getExchangeRates')->once()->andReturn(new Collection);
@ -367,11 +374,14 @@ class CurrencyControllerTest extends TestCase
$recurrences = $this->user()->recurrences()->get();
// mock stuff:
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
// mock calls:
$currencyRepos->shouldReceive('setUser')->once();
$repository->shouldReceive('setUser');
$repository->shouldReceive('getAll')->once()->andReturn($recurrences);
$repository->shouldReceive('getNoteText')->andReturn('Notes.');
@ -393,9 +403,11 @@ class CurrencyControllerTest extends TestCase
{
$rules = $this->user()->rules()->get();
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$ruleRepos->shouldReceive('getAll')->once()->andReturn($rules);
$currencyRepos->shouldReceive('setUser')->once();
// call API
$currency = TransactionCurrency::first();
@ -514,34 +526,16 @@ class CurrencyControllerTest extends TestCase
{
$currency = TransactionCurrency::first();
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$accountRepos->shouldReceive('setUser');
$accountRepos->shouldReceive('getAccountsByType')->atLeast()->once()
->andReturn($this->user()->accounts()->where('account_type_id', 3)->get());
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -559,7 +553,7 @@ class CurrencyControllerTest extends TestCase
$response = $this->get(route('api.v1.currencies.transactions', [$currency->code]));
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
@ -571,34 +565,15 @@ class CurrencyControllerTest extends TestCase
{
$currency = TransactionCurrency::first();
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$accountRepos->shouldReceive('setUser');
$accountRepos->shouldReceive('getAccountsByType')->atLeast()->once()
->andReturn($this->user()->accounts()->where('account_type_id', 3)->get());
// get some transactions using the collector:
Log::info('This transaction collector is OK, because it is used in a test:');
$collector = new TransactionCollector;
$collector->setUser($this->user());
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts();
$collector->setLimit(5)->setPage(1);
try {
$paginator = $collector->getPaginatedTransactions();
} catch (FireflyException $e) {
$this->assertTrue(false, $e->getMessage());
}
// mock stuff:
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$repository->shouldReceive('setUser');
$currencyRepository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('Note');
$repository->shouldReceive('getMetaField')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('getMetaDateString')->atLeast()->once()->andReturn('2018-01-01');
$collector->shouldReceive('setUser')->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
@ -619,7 +594,7 @@ class CurrencyControllerTest extends TestCase
);
$response->assertStatus(200);
$response->assertJson(['data' => [],]);
$response->assertJson(['meta' => ['pagination' => ['total' => true, 'count' => true, 'per_page' => 5, 'current_page' => 1, 'total_pages' => true]],]);
$response->assertJson(['meta' => ['pagination' => ['total' => 0, 'count' => 0, 'per_page' => 50, 'current_page' => 1, 'total_pages' => 1]],]);
$response->assertJson(['links' => ['self' => true, 'first' => true, 'last' => true,],]);
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}

View File

@ -21,7 +21,7 @@
declare(strict_types=1);
namespace tests\Api\V1\Controllers;
namespace Tests\Api\V1\Controllers;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Models\ImportJob;

View File

@ -64,9 +64,10 @@ class RecurrenceControllerTest extends TestCase
public function testDelete(): void
{
// mock stuff:
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
// mock calls:
$repository->shouldReceive('setUser')->once();
@ -89,9 +90,10 @@ class RecurrenceControllerTest extends TestCase
$recurrences = $this->user()->recurrences()->get();
// mock stuff:
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$budgetRepos->shouldReceive('findNull')->atLeast()->once()->withAnyArgs()
->andReturn($this->user()->budgets()->first());
@ -100,6 +102,8 @@ class RecurrenceControllerTest extends TestCase
->andReturn($this->user()->piggyBanks()->first());
// mock calls:
$categoryFactory->shouldReceive('setUser')->atLeast()->once();
$categoryFactory->shouldReceive('findOrCreate')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('setUser');
$repository->shouldReceive('getAll')->once()->andReturn($recurrences);
$repository->shouldReceive('getNoteText')->andReturn('Notes.');
@ -123,14 +127,18 @@ class RecurrenceControllerTest extends TestCase
$recurrence = $this->user()->recurrences()->first();
// mock stuff:
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$budgetRepos->shouldReceive('findNull')->atLeast()->once()->withAnyArgs()
->andReturn($this->user()->budgets()->first());
// mock calls:
$categoryFactory->shouldReceive('setUser')->atLeast()->once();
$categoryFactory->shouldReceive('findOrCreate')->atLeast()->once()->andReturn(null);
$repository->shouldReceive('setUser');
$repository->shouldReceive('getNoteText')->andReturn('Notes.');
$repository->shouldReceive('repetitionDescription')->andReturn('Some description.');
@ -1685,10 +1693,11 @@ class RecurrenceControllerTest extends TestCase
$recurrence = $this->user()->recurrences()->first();
$paginator = new LengthAwarePaginator(new Collection, 0, 50);
// mock repositories:
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journalIds = $recurringRepos->shouldReceive('getJournalIds')->once()->andReturn([1, 2, 3]);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$journalIds = $recurringRepos->shouldReceive('getJournalIds')->once()->andReturn([1, 2, 3]);
$collector->shouldReceive('setUser')->once()->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->once()->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->once()->andReturnSelf();
@ -1715,8 +1724,11 @@ class RecurrenceControllerTest extends TestCase
*/
public function testTriggerError(): void
{
$cronjob = $this->mock(RecurringCronjob::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$cronjob = $this->mock(RecurringCronjob::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$cronjob->shouldReceive('fire')->andThrow(FireflyException::class);
$repository->shouldReceive('setUser')->atLeast()->once();
$response = $this->post(route('api.v1.recurrences.trigger'));
@ -1729,9 +1741,11 @@ class RecurrenceControllerTest extends TestCase
*/
public function testTriggerFalse(): void
{
$cronjob = $this->mock(RecurringCronjob::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$cronjob = $this->mock(RecurringCronjob::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$cronjob->shouldReceive('fire')->once()->andReturnFalse();
$repository->shouldReceive('setUser')->atLeast()->once();
$response = $this->post(route('api.v1.recurrences.trigger'));
$response->assertStatus(204);
@ -1742,9 +1756,11 @@ class RecurrenceControllerTest extends TestCase
*/
public function testTriggerTrue(): void
{
$cronjob = $this->mock(RecurringCronjob::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$cronjob = $this->mock(RecurringCronjob::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$cronjob->shouldReceive('fire')->once()->andReturnTrue();
$repository->shouldReceive('setUser')->atLeast()->once();
$response = $this->post(route('api.v1.recurrences.trigger'));
$response->assertStatus(200);

View File

@ -62,9 +62,11 @@ class RuleControllerTest extends TestCase
$rule = $this->user()->rules()->first();
// mock stuff:
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
// mock calls:
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('destroy')->once()->andReturn(true);
@ -79,7 +81,10 @@ class RuleControllerTest extends TestCase
{
$rules = $this->user()->rules()->get();
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('getAll')->once()->andReturn($rules);
@ -96,9 +101,11 @@ class RuleControllerTest extends TestCase
*/
public function testShow(): void
{
$rule = $this->user()->rules()->first();
$rule = $this->user()->rules()->first();
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
@ -115,7 +122,9 @@ class RuleControllerTest extends TestCase
*/
public function testStore(): void
{
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$ruleRepos->shouldReceive('setUser')->once();
$rule = $this->user()->rules()->first();
$data = [
@ -141,6 +150,7 @@ class RuleControllerTest extends TestCase
],
];
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('store')->once()->andReturn($rule);
// test API
@ -155,7 +165,10 @@ class RuleControllerTest extends TestCase
*/
public function testStoreNoActions(): void
{
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$rule = $this->user()->rules()->first();
$data = [
@ -187,7 +200,10 @@ class RuleControllerTest extends TestCase
*/
public function testStoreNoTriggers(): void
{
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$rule = $this->user()->rules()->first();
$data = [
@ -224,8 +240,11 @@ class RuleControllerTest extends TestCase
$repository = $this->mock(AccountRepositoryInterface::class);
$matcher = $this->mock(TransactionMatcher::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$asset = $this->getRandomAsset();
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$asset = $this->getRandomAsset();
$repository->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$repository->shouldReceive('findNull')->withArgs([1])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([2])->andReturn($asset);
@ -256,8 +275,11 @@ class RuleControllerTest extends TestCase
$repository = $this->mock(AccountRepositoryInterface::class);
$matcher = $this->mock(TransactionMatcher::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$asset = $this->getRandomAsset();
$repository->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
$repository->shouldReceive('findNull')->withArgs([1])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([2])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([3])->andReturn(null);
@ -282,7 +304,10 @@ class RuleControllerTest extends TestCase
*/
public function testUpdate(): void
{
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$ruleRepos = $this->mock(RuleRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleRepos->shouldReceive('setUser')->once();
/** @var Rule $rule */
$rule = $this->user()->rules()->first();

View File

@ -24,10 +24,17 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Jobs\ExecuteRuleOnExistingTransactions;
use FireflyIII\Jobs\Job;
use FireflyIII\Models\RuleGroup;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\TransactionRules\TransactionMatcher;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Queue;
use Tests\TestCase;
/**
@ -56,8 +63,10 @@ class RuleGroupControllerTest extends TestCase
// mock stuff:
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
// mock calls:
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('destroy')->once()->andReturn(true);
@ -70,9 +79,11 @@ class RuleGroupControllerTest extends TestCase
*/
public function testIndex(): void
{
$ruleGroups = $this->user()->ruleGroups()->get();
$ruleGroups = $this->user()->ruleGroups()->get();
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('get')->once()->andReturn($ruleGroups);
@ -84,6 +95,24 @@ class RuleGroupControllerTest extends TestCase
$response->assertHeader('Content-Type', 'application/vnd.api+json');
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
*/
public function testRules(): void
{
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('getRules')->once()->andReturn(new Collection);
// call API
$group = $this->user()->ruleGroups()->first();
$response = $this->get(route('api.v1.rule_groups.rules', [$group->id]));
$response->assertStatus(200);
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
*/
@ -92,6 +121,9 @@ class RuleGroupControllerTest extends TestCase
/** @var RuleGroup $ruleGroup */
$ruleGroup = $this->user()->ruleGroups()->first();
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
@ -109,6 +141,9 @@ class RuleGroupControllerTest extends TestCase
public function testStore(): void
{
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroup = $this->user()->ruleGroups()->first();
$data = [
@ -125,6 +160,98 @@ class RuleGroupControllerTest extends TestCase
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
*/
public function testTestGroupBasic(): void
{
$group = $this->user()->ruleGroups()->first();
$rule = $this->user()->rules()->first();
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$repository = $this->mock(AccountRepositoryInterface::class);
$matcher = $this->mock(TransactionMatcher::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('getActiveRules')->once()->andReturn(new Collection([$rule]));
$asset = $this->getRandomAsset();
$repository->shouldReceive('setUser')->once();
$repository->shouldReceive('findNull')->withArgs([1])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([2])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([3])->andReturn(null);
$repository->shouldReceive('isAsset')->withArgs([1])->andReturn(true);
$repository->shouldReceive('isAsset')->withArgs([2])->andReturn(false);
$matcher->shouldReceive('setRule')->once();
$matcher->shouldReceive('setEndDate')->once();
$matcher->shouldReceive('setStartDate')->once();
$matcher->shouldReceive('setSearchLimit')->once();
$matcher->shouldReceive('setTriggeredLimit')->once();
$matcher->shouldReceive('setAccounts')->once();
$matcher->shouldReceive('findTransactionsByRule')->once()->andReturn(new Collection);
// call API
$response = $this->get(route('api.v1.rule_groups.test', [$group->id]) . '?accounts=1,2,3');
$response->assertStatus(200);
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
*/
public function testTestGroupEmpty(): void
{
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('getActiveRules')->once()->andReturn(new Collection);
// call API
$group = $this->user()->ruleGroups()->first();
$response = $this->get(route('api.v1.rule_groups.test', [$group->id]));
$response->assertStatus(500);
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
*/
public function testTrigger(): void
{
$group = $this->user()->ruleGroups()->first();
$rule = $this->user()->rules()->first();
$asset = $this->getRandomAsset();
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$repository = $this->mock(AccountRepositoryInterface::class);
$matcher = $this->mock(TransactionMatcher::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$ruleGroupRepos->shouldReceive('setUser')->once();
$repository->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('getActiveRules')->once()->andReturn(new Collection([$rule]));
$repository->shouldReceive('findNull')->withArgs([1])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([2])->andReturn($asset);
$repository->shouldReceive('findNull')->withArgs([3])->andReturn(null);
$repository->shouldReceive('isAsset')->withArgs([1])->andReturn(true);
$repository->shouldReceive('isAsset')->withArgs([2])->andReturn(false);
Queue::fake();
$response = $this->post(route('api.v1.rule_groups.trigger', [$group->id]) . '?accounts=1,2,3');
$response->assertStatus(204);
Queue::assertPushed(
ExecuteRuleOnExistingTransactions::class, function (Job $job) use ($rule) {
return $job->getRule()->id === $rule->id;
}
);
}
/**
* @covers \FireflyIII\Api\V1\Controllers\RuleGroupController
* @covers \FireflyIII\Api\V1\Requests\RuleGroupRequest
@ -132,6 +259,9 @@ class RuleGroupControllerTest extends TestCase
public function testUpdate(): void
{
$ruleGroupRepos = $this->mock(RuleGroupRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$accountRepos->shouldReceive('setUser')->once();
$ruleGroupRepos->shouldReceive('setUser')->once();
$ruleGroup = $this->user()->ruleGroups()->first();
$data = [

View File

@ -0,0 +1,234 @@
<?php
/**
* TagControllerTest.php
* Copyright (c) 2018 thegrumpydictator@gmail.com
*
* This file is part of Firefly III.
*
* Firefly III is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Firefly III is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace Tests\Api\V1\Controllers;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Laravel\Passport\Passport;
use Log;
use Tests\TestCase;
/**
* Class TagControllerTest
*/
class TagControllerTest extends TestCase
{
/**
*
*/
public function setUp(): void
{
parent::setUp();
Passport::actingAs($this->user());
Log::info(sprintf('Now in %s.', \get_class($this)));
}
/**
* Destroy Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testDelete(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
// mock calls:
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('destroy')->once()->andReturn(true);
$tagRepos->shouldReceive('findByTag')->once()->withArgs([(string)$tag->id])->andReturnNull();
$tagRepos->shouldReceive('findNull')->once()->withArgs([$tag->id])->andReturn($tag);
// call API
$response = $this->delete(route('api.v1.tags.delete', [$tag->id]));
$response->assertStatus(204);
}
/**
* Destroy Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testDeleteByTag(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
// mock calls:
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('destroy')->once()->andReturn(true);
$tagRepos->shouldReceive('findByTag')->once()->withArgs([(string)$tag->tag])->andReturn($tag);
// call API
$response = $this->delete(route('api.v1.tags.delete', [$tag->tag]));
$response->assertStatus(204);
}
/**
* Tag index
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testIndex(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
// mock calls:
$tagRepos->shouldReceive('setUser')->times(1);
$tagRepos->shouldReceive('get')->once()->andReturn(new Collection());
// call API
$response = $this->get(route('api.v1.tags.index'));
$response->assertStatus(200);
}
/**
* Destroy Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testShow(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
// mock calls:
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('findByTag')->once()->withArgs([(string)$tag->id])->andReturnNull();
$tagRepos->shouldReceive('findNull')->once()->withArgs([$tag->id])->andReturn($tag);
// call API
$response = $this->get(route('api.v1.tags.show', [$tag->id]));
$response->assertStatus(200);
}
/**
* Show Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testShowByTag(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
// mock calls:
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('findByTag')->once()->withArgs([(string)$tag->tag])->andReturn($tag);
// call API
$response = $this->get(route('api.v1.tags.show', [$tag->tag]));
$response->assertStatus(200);
}
/**
* Create Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
* @covers \FireflyIII\Api\V1\Requests\TagRequest
*/
public function testStore(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
$data = ['tag' => 'Some tag' . random_int(1, 10000),];
$tagRepos->shouldReceive('setUser')->times(1);
$tagRepos->shouldReceive('store')->times(1)->andReturn($tag);
// call API
$response = $this->post(route('api.v1.tags.store'), $data);
$response->assertStatus(200);
}
/**
* Show transactions.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
*/
public function testTransactions(): void
{
// mock stuff:
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$paginator = new LengthAwarePaginator([], 0, 50);
// mock calls:
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('findByTag')->once()->withArgs([(string)$tag->id])->andReturnNull();
$tagRepos->shouldReceive('findNull')->once()->withArgs([$tag->id])->andReturn($tag);
$collector->shouldReceive('setUser')->once()->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->once()->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->once()->andReturnSelf();
$collector->shouldReceive('withBudgetInformation')->once()->andReturnSelf();
$collector->shouldReceive('setAllAssetAccounts')->once()->andReturnSelf();
$collector->shouldReceive('setTag')->once()->andReturnSelf();
$collector->shouldReceive('removeFilter')->once()->andReturnSelf();
$collector->shouldReceive('setRange')->once()->andReturnSelf();
$collector->shouldReceive('setPage')->once()->andReturnSelf();
$collector->shouldReceive('setTypes')->once()->andReturnSelf();
$collector->shouldReceive('setLimit')->once()->andReturnSelf();
$collector->shouldReceive('getPaginatedTransactions')->once()->andReturn($paginator);
// call API
$response = $this->get(route('api.v1.tags.transactions', [$tag->id]) . '?' . http_build_query(['start' => '2018-01-01', 'end' => '2018-01-31']));
$response->assertStatus(200);
}
/**
* Update Tag over API.
*
* @covers \FireflyIII\Api\V1\Controllers\TagController
* @covers \FireflyIII\Api\V1\Requests\TagRequest
*/
public function testUpdate(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->user()->tags()->inRandomOrder()->first();
$data = ['tag' => 'Some tag' . random_int(1, 10000),];
$tagRepos->shouldReceive('setUser')->times(2);
$tagRepos->shouldReceive('update')->times(1)->andReturn($tag);
$tagRepos->shouldReceive('findByTag')->times(1)->andReturnNull();
$tagRepos->shouldReceive('findNull')->times(1)->andReturn($tag);
// call API
$response = $this->put(route('api.v1.tags.update', [$tag->id]), $data);
$response->assertStatus(200);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,9 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Account;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
@ -61,6 +64,8 @@ class ReconcileControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
// mock hasRole for user repository:
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
@ -90,6 +95,8 @@ class ReconcileControllerTest extends TestCase
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journal = $this->user()->transactionJournals()->where('transaction_type_id', '!=', 5)->first();
$this->be($this->user());
@ -109,6 +116,11 @@ class ReconcileControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('getMetaValue')
->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
@ -135,6 +147,11 @@ class ReconcileControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$transaction = Transaction::leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
->where('accounts.user_id', $this->user()->id)->where('accounts.account_type_id', 6)->first(['account_id']);
@ -153,6 +170,9 @@ class ReconcileControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$accountRepos->shouldReceive('getMetaValue')
->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
@ -180,6 +200,11 @@ class ReconcileControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('getMetaValue')
->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
@ -206,6 +231,11 @@ class ReconcileControllerTest extends TestCase
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$account = $this->user()->accounts()->where('account_type_id', '!=', 6)->where('account_type_id', '!=', 3)->first();
$this->be($this->user());
@ -224,6 +254,8 @@ class ReconcileControllerTest extends TestCase
$repository = $this->mock(JournalRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$accountRepos->shouldReceive('getMetaValue')
->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
@ -256,6 +288,8 @@ class ReconcileControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$repository = $this->mock(JournalRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journal = $this->user()->transactionJournals()->where('transaction_type_id', 5)->first();
@ -280,6 +314,8 @@ class ReconcileControllerTest extends TestCase
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journal = $this->user()->transactionJournals()->where('transaction_type_id', '!=', 5)->first();
$this->be($this->user());
@ -299,6 +335,11 @@ class ReconcileControllerTest extends TestCase
$repository = $this->mock(AccountRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$journalRepos->shouldReceive('firstNull')->andReturn(new TransactionJournal);
$journalRepos->shouldReceive('reconcileById')->andReturn(true);
@ -330,6 +371,8 @@ class ReconcileControllerTest extends TestCase
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos->shouldReceive('firstNull')->andReturn(new TransactionJournal);
$journalRepos->shouldReceive('getJournalSourceAccounts')->andReturn(new Collection([new Account]));
@ -355,6 +398,8 @@ class ReconcileControllerTest extends TestCase
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journal = $this->user()->transactionJournals()->where('transaction_type_id', '!=', 5)->first();
$data = ['amount' => '5',];
@ -373,6 +418,8 @@ class ReconcileControllerTest extends TestCase
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journal = $this->user()->transactionJournals()->where('transaction_type_id', 5)->first();
$data = ['amount' => '0',];

View File

@ -25,6 +25,7 @@ namespace Tests\Feature\Controllers\Account;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
@ -63,6 +64,7 @@ class ShowControllerTest extends TestCase
*/
public function testShow(string $range): void
{
Log::info(sprintf('testShow(%s)', $range));
$date = new Carbon;
$this->session(['start' => $date, 'end' => clone $date]);
@ -116,6 +118,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowAll(string $range): void
{
Log::info(sprintf('testShowAll(%s)', $range));
$date = new Carbon;
$this->session(['start' => $date, 'end' => clone $date]);
@ -165,10 +168,15 @@ class ShowControllerTest extends TestCase
*/
public function testShowBrokenBadDates(): void
{
Log::info(sprintf('testShowBrokenBadDates(%s)', ''));
// mock
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('isLiability')->atLeast()->once()->andReturn(false);
@ -187,6 +195,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowBrokenInitial(): void
{
Log::info(sprintf('testShowBrokenInitial(%s)', ''));
// mock
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
@ -212,12 +221,17 @@ class ShowControllerTest extends TestCase
*/
public function testShowByDateEmpty(string $range): void
{
Log::info(sprintf('testShowByDateEmpty(%s)', $range));
// mock stuff
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
// mock hasRole for user repository:
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
@ -253,6 +267,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowInitial(): void
{
Log::info(sprintf('testShowInitial(%s)', ''));
// mock stuff
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
@ -276,6 +291,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowLiability(string $range): void
{
Log::info(sprintf('testShowLiability(%s)', $range));
$date = new Carbon;
$this->session(['start' => $date, 'end' => clone $date]);
$account = $this->user()->accounts()->where('account_type_id', 12)->whereNull('deleted_at')->first();

View File

@ -26,6 +26,7 @@ namespace Tests\Feature\Controllers\Budget;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
@ -56,7 +57,7 @@ class AmountControllerTest extends TestCase
*/
public function testAmount(): void
{
Log::debug('Now in testAmount()');
Log::info('Now in testAmount()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -79,7 +80,7 @@ class AmountControllerTest extends TestCase
*/
public function testAmountLargeDiff(): void
{
Log::debug('Now in testAmount()');
Log::info('Now in testAmountLargeDiff()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -102,7 +103,7 @@ class AmountControllerTest extends TestCase
*/
public function testAmountOutOfRange(): void
{
Log::debug('Now in testAmountOutOfRange()');
Log::info('Now in testAmountOutOfRange()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -126,7 +127,7 @@ class AmountControllerTest extends TestCase
*/
public function testAmountZero(): void
{
Log::debug('Now in testAmountZero()');
Log::info('Now in testAmountZero()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -147,11 +148,15 @@ class AmountControllerTest extends TestCase
*/
public function testInfoIncome(): void
{
Log::debug('Now in testInfoIncome()');
Log::info('Now in testInfoIncome()');
// mock stuff
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setAllAssetAccounts')->andReturnSelf()->times(2);
$collector->shouldReceive('setRange')->andReturnSelf()->times(2);
@ -187,11 +192,16 @@ class AmountControllerTest extends TestCase
*/
public function testInfoIncomeExpanded(string $range): void
{
Log::debug(sprintf('Now in testInfoIncomeExpanded(%s)', $range));
Log::info(sprintf('Now in testInfoIncomeExpanded(%s)', $range));
// mock stuff
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getAvailableBudget')->andReturn('100.123');
$accountRepos->shouldReceive('setUser');
$accountRepos->shouldReceive('getAccountsByType')->andReturn(new Collection);
@ -223,12 +233,15 @@ class AmountControllerTest extends TestCase
*/
public function testInfoIncomeInversed(): void
{
Log::debug('Now in testInfoIncome()');
Log::info('Now in testInfoIncomeInversed()');
// mock stuff
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setAllAssetAccounts')->andReturnSelf()->times(2);
$collector->shouldReceive('setRange')->andReturnSelf()->times(2);
$collector->shouldReceive('setTypes')->andReturnSelf()->times(2);
@ -260,11 +273,15 @@ class AmountControllerTest extends TestCase
*/
public function testPostUpdateIncome(): void
{
Log::debug('Now in testPostUpdateIncome()');
Log::info('Now in testPostUpdateIncome()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
//$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
//$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
$repository->shouldReceive('setAvailableBudget');
$repository->shouldReceive('cleanupBudgets');
@ -281,7 +298,7 @@ class AmountControllerTest extends TestCase
*/
public function testUpdateIncome(): void
{
Log::debug('Now in testUpdateIncome()');
Log::info('Now in testUpdateIncome()');
// must be in list
$this->be($this->user());
@ -289,6 +306,10 @@ class AmountControllerTest extends TestCase
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
$repository->shouldReceive('getAvailableBudget')->andReturn('1');
$repository->shouldReceive('cleanupBudgets');

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Budget;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionJournal;
@ -61,7 +62,7 @@ class IndexControllerTest extends TestCase
{
Log::debug(sprintf('Now in testIndex(%s)', $range));
Log::info(sprintf('Now in testIndex(%s)', $range));
// mock stuff
$budget = factory(Budget::class)->make();
$budgetLimit = factory(BudgetLimit::class)->make();
@ -110,7 +111,7 @@ class IndexControllerTest extends TestCase
*/
public function testIndexOutOfRange(string $range): void
{
Log::debug(sprintf('Now in testIndexOutOfRange(%s)', $range));
Log::info(sprintf('Now in testIndexOutOfRange(%s)', $range));
// mock stuff
$budget = factory(Budget::class)->make();
$budgetLimit = factory(BudgetLimit::class)->make();
@ -130,6 +131,10 @@ class IndexControllerTest extends TestCase
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
@ -161,7 +166,7 @@ class IndexControllerTest extends TestCase
*/
public function testIndexWithDate(string $range): void
{
Log::debug(sprintf('Now in testIndexWithDate(%s)', $range));
Log::info(sprintf('Now in testIndexWithDate(%s)', $range));
// mock stuff
$budget = factory(Budget::class)->make();
$budgetLimit = factory(BudgetLimit::class)->make();
@ -181,6 +186,10 @@ class IndexControllerTest extends TestCase
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
@ -210,7 +219,7 @@ class IndexControllerTest extends TestCase
*/
public function testIndexWithInvalidDate(string $range): void
{
Log::debug(sprintf('Now in testIndexWithInvalidDate(%s)', $range));
Log::info(sprintf('Now in testIndexWithInvalidDate(%s)', $range));
// mock stuff
$budget = factory(Budget::class)->make();
$budgetLimit = factory(BudgetLimit::class)->make();
@ -230,6 +239,10 @@ class IndexControllerTest extends TestCase
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
$accountRepos->shouldReceive('getAccountsByType')->andReturn(new Collection);

View File

@ -25,6 +25,7 @@ namespace Tests\Feature\Controllers\Budget;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -62,7 +63,7 @@ class ShowControllerTest extends TestCase
*/
public function testNoBudget(string $range): void
{
Log::debug(sprintf('Now in testNoBudget(%s)', $range));
Log::info(sprintf('Now in testNoBudget(%s)', $range));
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
@ -101,7 +102,7 @@ class ShowControllerTest extends TestCase
*/
public function testNoBudgetAll(string $range): void
{
Log::debug(sprintf('Now in testNoBudgetAll(%s)', $range));
Log::info(sprintf('Now in testNoBudgetAll(%s)', $range));
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
@ -140,12 +141,16 @@ class ShowControllerTest extends TestCase
*/
public function testNoBudgetDate(string $range): void
{
Log::debug(sprintf('Now in testNoBudgetDate(%s)', $range));
Log::info(sprintf('Now in testNoBudgetDate(%s)', $range));
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
$journalRepos->shouldReceive('firstNull')->andReturn(null);
@ -180,7 +185,7 @@ class ShowControllerTest extends TestCase
*/
public function testShow(string $range): void
{
Log::debug(sprintf('Now in testShow(%s)', $range));
Log::info(sprintf('Now in testShow(%s)', $range));
// mock stuff
$budgetLimit = factory(BudgetLimit::class)->make();
@ -226,7 +231,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowByBadBudgetLimit(): void
{
Log::debug('Now in testShowByBadBudgetLimit()');
Log::info('Now in testShowByBadBudgetLimit()');
// mock stuff
$repository = $this->mock(BudgetRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -247,7 +252,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowByBudgetLimit(string $range): void
{
Log::debug(sprintf('Now in testShowByBudgetLimit(%s)', $range));
Log::info(sprintf('Now in testShowByBudgetLimit(%s)', $range));
// mock stuff
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$accountRepository = $this->mock(AccountRepositoryInterface::class);

View File

@ -27,6 +27,7 @@ namespace Tests\Feature\Controllers\Category;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
@ -63,6 +64,7 @@ class NoCategoryControllerTest extends TestCase
*/
public function testNoCategory(string $range): void
{
Log::info('Test noCategory()');
// mock stuff
$collector = $this->mock(TransactionCollectorInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
@ -105,13 +107,15 @@ class NoCategoryControllerTest extends TestCase
*/
public function testNoCategoryAll(string $range): void
{
Log::debug('Test nocategoryAll()');
Log::info('Test nocategoryAll()');
// mock stuff
$collector = $this->mock(TransactionCollectorInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$journalRepos->shouldReceive('firstNull')->twice()->andReturn(TransactionJournal::first());
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();
@ -143,13 +147,17 @@ class NoCategoryControllerTest extends TestCase
*/
public function testNoCategoryDate(string $range): void
{
Log::debug('Test nocategorydate()');
Log::info('Test nocategorydate()');
// mock stuff
$collector = $this->mock(TransactionCollectorInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$journalRepos->shouldReceive('firstNull')->twice()->andReturn(TransactionJournal::first());
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->atLeast()->once();

View File

@ -27,6 +27,7 @@ namespace Tests\Feature\Controllers\Category;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -64,7 +65,7 @@ class ShowControllerTest extends TestCase
*/
public function testShow(string $range): void
{
Log::debug(sprintf('Test show(%s)', $range));
Log::info(sprintf('Test show(%s)', $range));
$transaction = factory(Transaction::class)->make();
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
@ -119,7 +120,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowAll(string $range): void
{
Log::debug(sprintf('Test showAll(%s)', $range));
Log::info(sprintf('Test showAll(%s)', $range));
// mock stuff
$transaction = factory(Transaction::class)->make();
$journalRepos = $this->mock(JournalRepositoryInterface::class);
@ -127,6 +128,7 @@ class ShowControllerTest extends TestCase
$collector = $this->mock(TransactionCollectorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
@ -160,7 +162,7 @@ class ShowControllerTest extends TestCase
*/
public function testShowByDate(string $range): void
{
Log::debug(sprintf('Test testShowByDate(%s)', $range));
Log::info(sprintf('Test testShowByDate(%s)', $range));
// mock stuff
$transaction = factory(Transaction::class)->make();
$repository = $this->mock(CategoryRepositoryInterface::class);
@ -168,6 +170,10 @@ class ShowControllerTest extends TestCase
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
@ -219,6 +225,7 @@ class ShowControllerTest extends TestCase
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$repository = $this->mock(CategoryRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);

View File

@ -25,6 +25,7 @@ namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Category;
@ -110,7 +111,10 @@ class AccountControllerTest extends TestCase
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$transaction = factory(Transaction::class)->make();
$collector->shouldReceive('setAccounts')->andReturnSelf();
@ -135,12 +139,12 @@ class AccountControllerTest extends TestCase
*/
public function testExpenseBudgetAll(string $range): void
{
$generator = $this->mock(GeneratorInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$transaction = factory(Transaction::class)->make();
$transaction = factory(Transaction::class)->make();
$collector->shouldReceive('setAccounts')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
@ -172,7 +176,10 @@ class AccountControllerTest extends TestCase
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setAccounts')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
@ -231,7 +238,7 @@ class AccountControllerTest extends TestCase
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
// change the preference:
Preferences::setForUser($this->user(), 'frontPageAccounts', []);
@ -262,7 +269,10 @@ class AccountControllerTest extends TestCase
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setAccounts')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
@ -317,10 +327,13 @@ class AccountControllerTest extends TestCase
*/
public function testPeriod(string $range): void
{
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('oldestJournalDate')->andReturn(new Carbon);
Steam::shouldReceive('balanceInRange')->andReturn(['2012-01-01' => '0']);
$generator->shouldReceive('singleSet')->andReturn([]);
@ -339,9 +352,12 @@ class AccountControllerTest extends TestCase
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(),'currency_id'])->andReturn('1')->atLeast()->once();
$generator = $this->mock(GeneratorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
$currencyRepos->shouldReceive('findNull')->andReturn(TransactionCurrency::find(1), null);
@ -364,7 +380,7 @@ class AccountControllerTest extends TestCase
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
// grab two expense accounts from the current user.
$accounts = $this->user()->accounts()->where('account_type_id', 5)->take(2)->get();

View File

@ -25,6 +25,7 @@ namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
@ -312,6 +313,10 @@ class BudgetControllerTest extends TestCase
$budget = factory(Budget::class)->make();
$budgetLimit = factory(BudgetLimit::class)->make();
$budgetLimit->budget_id = $budget->id;
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getBudgetPeriodReport')->andReturn([])->once();
$repository->shouldReceive('getBudgetLimits')->andReturn(new Collection([$budgetLimit]));
@ -327,8 +332,12 @@ class BudgetControllerTest extends TestCase
*/
public function testPeriodNoBudget(): void
{
$repository = $this->mock(BudgetRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getNoBudgetPeriodReport')->andReturn([])->once();
$generator->shouldReceive('singleSet')->once()->andReturn([]);

View File

@ -29,6 +29,7 @@ use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
use FireflyIII\Helpers\Filter\TransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
@ -59,7 +60,10 @@ class BudgetReportControllerTest extends TestCase
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setBudgets')->once()->andReturnSelf();
@ -82,6 +86,10 @@ class BudgetReportControllerTest extends TestCase
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setBudgets')->once()->andReturnSelf();
@ -104,6 +112,10 @@ class BudgetReportControllerTest extends TestCase
$generator = $this->mock(GeneratorInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$one = factory(BudgetLimit::class)->make();
$one->budget_id = 1;

View File

@ -24,6 +24,7 @@ namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\TransactionCurrency;
@ -63,6 +64,7 @@ class CategoryControllerTest extends TestCase
$firstUse = new Carbon;
$firstUse->subDays(3);
$repository->shouldReceive('spentInPeriod')->andReturn('0');
$repository->shouldReceive('earnedInPeriod')->andReturn('0');
$repository->shouldReceive('firstUseDate')->andReturn($firstUse)->once();
@ -87,7 +89,6 @@ class CategoryControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
// spent per currency data:
$spentData = [
1 => '-123.45',
@ -133,7 +134,10 @@ class CategoryControllerTest extends TestCase
{
$repository = $this->mock(CategoryRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('periodExpenses')->andReturn([])->once();
$repository->shouldReceive('periodIncome')->andReturn([])->once();
$generator->shouldReceive('multiSet')->andReturn([])->once();
@ -150,7 +154,10 @@ class CategoryControllerTest extends TestCase
{
$repository = $this->mock(CategoryRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('periodExpensesNoCategory')->andReturn([])->once();
$repository->shouldReceive('periodIncomeNoCategory')->andReturn([])->once();
$generator->shouldReceive('multiSet')->andReturn([])->once();
@ -172,6 +179,10 @@ class CategoryControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$account = factory(Account::class)->make();
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('getAccountsByType')->andReturn(new Collection([$account]));
$repository->shouldReceive('spentInPeriod')->andReturn('0');

View File

@ -22,6 +22,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
@ -29,6 +30,7 @@ use FireflyIII\Helpers\Filter\NegativeAmountFilter;
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
use FireflyIII\Helpers\Filter\TransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
use Log;
@ -53,9 +55,12 @@ class CategoryReportControllerTest extends TestCase
*/
public function testAccountExpense(): void
{
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setCategories')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -74,9 +79,12 @@ class CategoryReportControllerTest extends TestCase
*/
public function testAccountIncome(): void
{
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setCategories')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -95,9 +103,12 @@ class CategoryReportControllerTest extends TestCase
*/
public function testCategoryExpense(): void
{
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setCategories')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -116,9 +127,12 @@ class CategoryReportControllerTest extends TestCase
*/
public function testCategoryIncome(): void
{
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$pieChart = $this->mock(MetaPieChartInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setCategories')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -140,7 +154,10 @@ class CategoryReportControllerTest extends TestCase
$generator = $this->mock(GeneratorInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$transactions = factory(Transaction::class, 10)->make();
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setAccounts')->andReturnSelf();
$collector->shouldReceive('setRange')->andReturnSelf();
$collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL, TransactionType::TRANSFER]])->andReturnSelf();

View File

@ -22,8 +22,10 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -57,6 +59,11 @@ class ExpenseReportControllerTest extends TestCase
$accountRepository = $this->mock(AccountRepositoryInterface::class);
$accountRepository->shouldReceive('findByName')->once()->andReturn($expense);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$set = new Collection;
$transaction = new Transaction();
$transaction->opposing_account_name = 'Somebody';

View File

@ -22,7 +22,10 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Helpers\Report\NetWorthInterface;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Account\AccountTaskerInterface;
@ -51,12 +54,26 @@ class ReportControllerTest extends TestCase
*/
public function testNetWorth(): void
{
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$netWorth = $this->mock(NetWorthInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
//$currencyRepos->shouldReceive('setUser');
//$currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn(TransactionCurrency::find(1))->atLeast()->once();
$currencyRepos->shouldReceive('setUser');
$currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn(TransactionCurrency::find(1))->atLeast()->once();
$netWorth->shouldReceive('getNetWorthByCurrency')->andReturn(
[
[
'currency' => TransactionCurrency::first(),
'balance' => '123',
],
]
);
$netWorth->shouldReceive('setUser')->atLeast()->once();
// mock calls:
$accountRepos->shouldReceive('setUser');
@ -82,12 +99,15 @@ class ReportControllerTest extends TestCase
*/
public function testOperations(): void
{
$generator = $this->mock(GeneratorInterface::class);
$tasker = $this->mock(AccountTaskerInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$tasker = $this->mock(AccountTaskerInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$income = [1 => ['sum' => '100']];
$expense = [2 => ['sum' => '-100']];
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$income = [1 => ['sum' => '100']];
$expense = [2 => ['sum' => '-100']];
$tasker->shouldReceive('getIncomeReport')->once()->andReturn($income);
$tasker->shouldReceive('getExpenseReport')->once()->andReturn($expense);
$generator->shouldReceive('multiSet')->andReturn([]);
@ -102,10 +122,13 @@ class ReportControllerTest extends TestCase
*/
public function testSum(): void
{
$generator = $this->mock(GeneratorInterface::class);
$tasker = $this->mock(AccountTaskerInterface::class);
$generator = $this->mock(GeneratorInterface::class);
$tasker = $this->mock(AccountTaskerInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$income = [];
$expense = [];

View File

@ -22,6 +22,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
@ -29,6 +30,7 @@ use FireflyIII\Helpers\Filter\NegativeAmountFilter;
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
use FireflyIII\Helpers\Filter\TransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Tag;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
@ -65,6 +67,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -93,6 +100,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -120,6 +132,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -146,6 +163,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -172,6 +194,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$set = new Collection;
for ($i = 0; $i < 10; ++$i) {
$transaction = factory(Transaction::class)->make();
@ -211,6 +238,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();
@ -237,6 +269,11 @@ class TagReportControllerTest extends TestCase
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('get')->andReturn(new Collection([$tag]));
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$pieChart->shouldReceive('setAccounts')->once()->andReturnSelf();
$pieChart->shouldReceive('setTags')->once()->andReturnSelf();
$pieChart->shouldReceive('setStart')->once()->andReturnSelf();

View File

@ -193,6 +193,87 @@ class CurrencyControllerTest extends TestCase
$response->assertSessionHas('success');
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
public function testDisable(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$userRepos->shouldReceive('hasRole')->atLeast()->once()->andReturn(true);
$repository->shouldReceive('currencyInuse')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('disable')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('get')->atLeast()->once()->andReturn(new Collection([$currency]));
$this->be($this->user());
$response = $this->get(route('currencies.disable', [$currency->id]));
$response->assertStatus(302);
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
public function testDisableInUse(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$userRepos->shouldReceive('hasRole')->atLeast()->once()->andReturn(true);
$repository->shouldReceive('currencyInuse')->atLeast()->once()->andReturn(true);
$repository->shouldNotReceive('disable');
$this->be($this->user());
$response = $this->get(route('currencies.disable', [$currency->id]));
$response->assertStatus(302);
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
public function testDisableNothingLeft(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$userRepos->shouldReceive('hasRole')->atLeast()->once()->andReturn(true);
$repository->shouldReceive('currencyInuse')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('disable')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('get')->atLeast()->once()->andReturn(new Collection);
$repository->shouldReceive('getAll')->atLeast()->once()->andReturn(new Collection);
$this->be($this->user());
$response = $this->get(route('currencies.disable', [$currency->id]));
$response->assertStatus(500);
$response->assertSee('No currencies found.');
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
public function testDisableEnableFirst(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$userRepos->shouldReceive('hasRole')->atLeast()->once()->andReturn(true);
$repository->shouldReceive('currencyInuse')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('disable')->atLeast()->once()->andReturn(false);
$repository->shouldReceive('get')->atLeast()->once()->andReturn(new Collection);
$repository->shouldReceive('getAll')->atLeast()->once()->andReturn(new Collection([$currency]));
$repository->shouldReceive('enable')->atLeast()->once()->andReturn(true);
$this->be($this->user());
$response = $this->get(route('currencies.disable', [$currency->id]));
$response->assertStatus(302);
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
@ -213,6 +294,22 @@ class CurrencyControllerTest extends TestCase
$response->assertSee('<ol class="breadcrumb">');
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
*/
public function testEnable(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currency = TransactionCurrency::first();
$repository->shouldReceive('enable')->atLeast()->once();
$this->be($this->user());
$response = $this->get(route('currencies.enable', [$currency->id]));
$response->assertStatus(302);
}
/**
* @covers \FireflyIII\Http\Controllers\CurrencyController
* @covers \FireflyIII\Http\Controllers\CurrencyController

View File

@ -22,6 +22,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Json;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\CurrencyExchangeRate;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Currency\ExchangeRateInterface;
@ -52,7 +54,10 @@ class ExchangeControllerTest extends TestCase
public function testGetRate(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$rate = factory(CurrencyExchangeRate::class)->make();
$repository->shouldReceive('getExchangeRate')->andReturn($rate);
@ -68,6 +73,10 @@ class ExchangeControllerTest extends TestCase
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$rate = factory(CurrencyExchangeRate::class)->make();
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getExchangeRate')->andReturn($rate);
$this->be($this->user());
@ -81,7 +90,10 @@ class ExchangeControllerTest extends TestCase
public function testGetRateNull(): void
{
$repository = $this->mock(CurrencyRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$rate = factory(CurrencyExchangeRate::class)->make();
$repository->shouldReceive('getExchangeRate')->andReturnNull();
$interface = $this->mock(ExchangeRateInterface::class);

View File

@ -24,6 +24,9 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Json;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
@ -31,6 +34,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use Illuminate\Support\Collection;
use Log;
use Mockery;
use Tests\TestCase;
@ -60,16 +64,22 @@ class ReconcileControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$transactions = $this->user()->transactions()->inRandomOrder()->take(3)->get();
$transactions =$transactions->each(
$transactions = $transactions->each(
function (Transaction $transaction) {
$transaction->transaction_amount = '5';
}
);
$repository = $this->mock(JournalRepositoryInterface::class);
$repository = $this->mock(JournalRepositoryInterface::class);
$repository->shouldReceive('firstNull')->andReturn(new TransactionJournal);
$repository->shouldReceive('getTransactionsById')->andReturn($transactions)->twice();
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('findNull')->andReturn($this->getRandomAsset())->atLeast()->once();
$accountRepos->shouldReceive('getMetaValue')->atLeast()->once()->andReturn(1);
@ -94,7 +104,11 @@ class ReconcileControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$account = $this->user()->accounts()->where('account_type_id', '!=', 3)->first();
$parameters = [
'startBalance' => '0',
@ -118,11 +132,22 @@ class ReconcileControllerTest extends TestCase
$repository = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->atLeast()->once();
$repository->shouldReceive('findNull')->once()->andReturn(TransactionCurrency::find(1));
$collector->shouldReceive('setAccounts')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('withBudgetInformation')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('withOpposingAccount')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('withCategoryInformation')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('getTransactions')->atLeast()->once()->andReturn(new Collection);
$this->be($this->user());
$response = $this->get(route('accounts.reconcile.transactions', [1, '20170101', '20170131']));
$response->assertStatus(200);
@ -136,7 +161,11 @@ class ReconcileControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$transaction = Transaction::leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
->where('accounts.user_id', $this->user()->id)->where('accounts.account_type_id', 6)->first(['account_id']);

View File

@ -57,6 +57,7 @@ class ReportControllerTest extends TestCase
*/
public function testBadEndDate(): void
{
$popupReport = $this->mock(PopupReportInterface::class);
$this->be($this->user());
$arguments = [
'attributes' => [
@ -80,6 +81,8 @@ class ReportControllerTest extends TestCase
*/
public function testBadStartDate(): void
{
$popupReport = $this->mock(PopupReportInterface::class);
$this->be($this->user());
$arguments = [
'attributes' => [
@ -107,7 +110,6 @@ class ReportControllerTest extends TestCase
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$popupHelper = $this->mock(PopupReportInterface::class);
$account = factory(Account::class)->make();
$popupHelper->shouldReceive('balanceForNoBudget')->andReturn(new Collection);
$budgetRepos->shouldReceive('findNull')->andReturn(new Budget)->once()->withArgs([0]);
$accountRepos->shouldReceive('findNull')->andReturn($account)->once()->withArgs([1]);
@ -173,6 +175,7 @@ class ReportControllerTest extends TestCase
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$popupReport = $this->mock(PopupReportInterface::class);
$budget = factory(Budget::class)->make();
$account = factory(Account::class)->make();
@ -330,6 +333,8 @@ class ReportControllerTest extends TestCase
*/
public function testWrongLocation(): void
{
$popupReport = $this->mock(PopupReportInterface::class);
$this->be($this->user());
$arguments = [
'attributes' => [

View File

@ -24,10 +24,12 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Recurring;
use Carbon\Carbon;
use FireflyIII\Factory\CategoryFactory;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
@ -55,15 +57,19 @@ class EditControllerTest extends TestCase
*/
public function testEdit(): void
{
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos =$this->mock(AccountRepositoryInterface::class);
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$recurringRepos->shouldReceive('setUser');
$categoryFactory->shouldReceive('setUser')->atLeast()->once();
$categoryFactory->shouldReceive('findOrCreate')->atLeast()->once()->andReturn(null);
$recurringRepos->shouldReceive('getNoteText')->andReturn('Note!');
$recurringRepos->shouldReceive('repetitionDescription')->andReturn('dunno');
$recurringRepos->shouldReceive('getXOccurrences')->andReturn([]);
@ -89,9 +95,11 @@ class EditControllerTest extends TestCase
$recurringRepos = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos =$this->mock(AccountRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$piggyRepos = $this->mock(PiggyBankRepositoryInterface::class);
$recurringRepos->shouldReceive('update')->once();

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Recurring;
use FireflyIII\Factory\CategoryFactory;
use FireflyIII\Models\Configuration;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
@ -53,9 +54,13 @@ class IndexControllerTest extends TestCase
public function testIndex(): void
{
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$categoryFactory->shouldReceive('setUser')->atLeast()->once();
$categoryFactory->shouldReceive('findOrCreate')->atLeast()->once()->andReturn(null);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
@ -88,9 +93,13 @@ class IndexControllerTest extends TestCase
public function testShow(): void
{
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$repository = $this->mock(RecurringRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$categoryFactory = $this->mock(CategoryFactory::class);
$categoryFactory->shouldReceive('setUser')->atLeast()->once();
$categoryFactory->shouldReceive('findOrCreate')->atLeast()->once()->andReturn(null);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$budgetRepos->shouldReceive('findNull')->withAnyArgs()->andReturn($this->user()->budgets()->first())->atLeast()->once();

View File

@ -22,6 +22,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Repositories\Account\AccountTaskerInterface;
use Log;
use Tests\TestCase;
@ -57,6 +59,10 @@ class AccountControllerTest extends TestCase
];
$tasker = $this->mock(AccountTaskerInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$tasker->shouldReceive('getAccountReport')->andReturn($return);
$this->be($this->user());

View File

@ -22,7 +22,9 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\Collection\Balance;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Helpers\Report\BalanceReportHelperInterface;
use Log;
use Tests\TestCase;
@ -52,6 +54,10 @@ class BalanceControllerTest extends TestCase
public function testGeneral(): void
{
$balance = $this->mock(BalanceReportHelperInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$balance->shouldReceive('getBalanceReport')->andReturn(new Balance);
$this->be($this->user());

View File

@ -22,6 +22,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Helpers\Report\BudgetReportHelperInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use Illuminate\Support\Collection;
@ -54,6 +56,10 @@ class BudgetControllerTest extends TestCase
{
$return = [];
$helper = $this->mock(BudgetReportHelperInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$helper->shouldReceive('getBudgetReport')->andReturn($return);
$this->be($this->user());
@ -69,6 +75,10 @@ class BudgetControllerTest extends TestCase
$first = [1 => ['entries' => ['1', '1']]];
$second = ['entries' => ['1', '1']];
$repository = $this->mock(BudgetRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getBudgets')->andReturn(new Collection);
$repository->shouldReceive('getBudgetPeriodReport')->andReturn($first);
$repository->shouldReceive('getNoBudgetPeriodReport')->andReturn($second);

View File

@ -22,6 +22,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Category;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use Illuminate\Support\Collection;
@ -55,6 +57,10 @@ class CategoryControllerTest extends TestCase
$first = [1 => ['entries' => ['1', '1']]];
$second = ['entries' => ['1', '1']];
$repository = $this->mock(CategoryRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getCategories')->andReturn(new Collection);
$repository->shouldReceive('periodExpenses')->andReturn($first);
$repository->shouldReceive('periodExpensesNoCategory')->andReturn($second);
@ -72,6 +78,10 @@ class CategoryControllerTest extends TestCase
$first = [1 => ['entries' => ['1', '1']]];
$second = ['entries' => ['1', '1']];
$repository = $this->mock(CategoryRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getCategories')->andReturn(new Collection);
$repository->shouldReceive('periodIncome')->andReturn($first);
$repository->shouldReceive('periodIncomeNoCategory')->andReturn($second);
@ -88,6 +98,10 @@ class CategoryControllerTest extends TestCase
{
$repository = $this->mock(CategoryRepositoryInterface::class);
$category = factory(Category::class)->make();
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('getCategories')->andReturn(new Collection([$category]));
$repository->shouldReceive('spentInPeriod')->andReturn('-1');
$repository->shouldReceive('earnedInPeriod')->andReturn('1');

View File

@ -22,7 +22,9 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Transaction;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -57,6 +59,10 @@ class ExpenseControllerTest extends TestCase
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
// fake collection:
@ -102,6 +108,10 @@ class ExpenseControllerTest extends TestCase
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
// fake collection:
@ -157,6 +167,10 @@ class ExpenseControllerTest extends TestCase
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
// fake collection:
@ -200,6 +214,10 @@ class ExpenseControllerTest extends TestCase
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
// fake collection:
@ -245,6 +263,10 @@ class ExpenseControllerTest extends TestCase
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
$repository = $this->mock(AccountRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
// fake collection:

View File

@ -22,6 +22,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Repositories\Account\AccountTaskerInterface;
use Log;
use Tests\TestCase;
@ -60,6 +62,10 @@ class OperationsControllerTest extends TestCase
],
];
$tasker = $this->mock(AccountTaskerInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$tasker->shouldReceive('getExpenseReport')->andReturn($return);
$this->be($this->user());
@ -73,6 +79,10 @@ class OperationsControllerTest extends TestCase
public function testIncome(): void
{
$tasker = $this->mock(AccountTaskerInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$tasker->shouldReceive('getIncomeReport')->andReturn([]);
$this->be($this->user());
@ -96,6 +106,10 @@ class OperationsControllerTest extends TestCase
];
$tasker = $this->mock(AccountTaskerInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$tasker->shouldReceive('getExpenseReport')->andReturn($return);
$tasker->shouldReceive('getIncomeReport')->andReturn($return);

View File

@ -411,6 +411,38 @@ class ReportControllerTest extends TestCase
$response->assertRedirect(route('reports.report.account', ['1', '1', '20160101', '20160131']));
}
/**
* @covers \FireflyIII\Http\Controllers\ReportController
* @covers \FireflyIII\Http\Requests\ReportFormRequest
*/
public function testPostIndexAccountError(): void
{
$budgetRepository = $this->mock(BudgetRepositoryInterface::class);
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$categoryRepos = $this->mock(CategoryRepositoryInterface::class);
$tagRepos = $this->mock(TagRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$reportHelper = $this->mock(ReportHelperInterface::class);
$accountRepos->shouldReceive('findNull')->andReturn(null)->times(3);
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
$data = [
'accounts' => ['1'],
'exp_rev' => ['4'],
'daterange' => '2016-01-01 - 2016-01-31',
'report_type' => 'account',
];
$this->be($this->user());
$response = $this->post(route('reports.index.post'), $data);
$response->assertStatus(302);
$response->assertRedirect(route('reports.index'));
$response->assertSessionHas('error');
}
/**
* @covers \FireflyIII\Http\Controllers\ReportController
* @covers \FireflyIII\Http\Requests\ReportFormRequest

View File

@ -24,6 +24,7 @@ namespace Tests\Feature\Controllers;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
@ -248,6 +249,10 @@ class TagControllerTest extends TestCase
$collector = $this->mock(TransactionCollectorInterface::class);
$journalRepos = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);

View File

@ -25,6 +25,7 @@ namespace Tests\Feature\Controllers;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
@ -72,6 +73,8 @@ class TransactionControllerTest extends TestCase
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$repository->shouldReceive('firstNull')->twice()->andReturn($transfer);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
@ -106,8 +109,10 @@ class TransactionControllerTest extends TestCase
// mock stuff
$transfer = $this->user()->transactionJournals()->inRandomOrder()->where('transaction_type_id', 3)->first();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$repository->shouldReceive('firstNull')->twice()->andReturn($transfer);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
@ -148,11 +153,18 @@ class TransactionControllerTest extends TestCase
// mock stuff
$transfer = $this->getRandomTransfer();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$transfer = $this->user()->transactionJournals()->inRandomOrder()->where('transaction_type_id', 3)->first();
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
@ -193,14 +205,20 @@ class TransactionControllerTest extends TestCase
// mock stuff
$transfer = $this->getRandomTransfer();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$transfer = $this->user()->transactionJournals()->inRandomOrder()->where('transaction_type_id', 3)->first();
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
$date = new Carbon;
$fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
$fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
$collector->shouldReceive('setTypes')->andReturnSelf();
$collector->shouldReceive('setLimit')->andReturnSelf();
$collector->shouldReceive('setPage')->andReturnSelf();
@ -238,11 +256,13 @@ class TransactionControllerTest extends TestCase
$collection = new Collection([$transaction]);
// mock stuff
$transfer = $this->getRandomTransfer();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$transfer = $this->user()->transactionJournals()->inRandomOrder()->where('transaction_type_id', 3)->first();
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
@ -283,11 +303,13 @@ class TransactionControllerTest extends TestCase
$collection = new Collection([$transaction]);
// mock stuff
$transfer = $this->getRandomTransfer();
$repository = $this->mock(JournalRepositoryInterface::class);
$collector = $this->mock(TransactionCollectorInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$transfer = $this->user()->transactionJournals()->inRandomOrder()->where('transaction_type_id', 3)->first();
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
$repository->shouldReceive('firstNull')->once()->andReturn($transfer);
@ -319,6 +341,8 @@ class TransactionControllerTest extends TestCase
$data = ['transactions' => [1, 2]];
$repository = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$repository->shouldReceive('firstNull')->times(1)->andReturn(new TransactionJournal);
$repository->shouldReceive('findTransaction')->andReturn(new Transaction)->twice();
@ -339,6 +363,8 @@ class TransactionControllerTest extends TestCase
$journal->date = new Carbon('2016-01-01');
$repository = $this->mock(JournalRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$repository->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal);
$repository->shouldReceive('findNull')->once()->andReturn($journal);
$repository->shouldReceive('setOrder')->once()->andReturn(true);
@ -361,7 +387,8 @@ class TransactionControllerTest extends TestCase
// mock stuff
$linkRepos = $this->mock(LinkTypeRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$linkRepos->shouldReceive('get')->andReturn(new Collection);
$linkRepos->shouldReceive('getLinks')->andReturn(new Collection);
@ -383,6 +410,8 @@ class TransactionControllerTest extends TestCase
$response->assertSee('<ol class="breadcrumb">');
}
/**
* @covers \FireflyIII\Http\Controllers\Controller
* @covers \FireflyIII\Http\Controllers\TransactionController
@ -391,6 +420,9 @@ class TransactionControllerTest extends TestCase
{
$linkRepos = $this->mock(LinkTypeRepositoryInterface::class);
$userRepos = $this->mock(UserRepositoryInterface::class);
$attRepos = $this->mock(AttachmentRepositoryInterface::class);
$fiscalHelper = $this->mock(FiscalHelperInterface::class);
$linkRepos->shouldReceive('get')->andReturn(new Collection);
$linkRepos->shouldReceive('getLinks')->andReturn(new Collection);

View File

@ -536,8 +536,9 @@ class BinderTest extends TestCase
);
// mock fiscal helper:
$date = new Carbon;
$helper = $this->mock(FiscalHelperInterface::class);
$date = new Carbon;
$helper->shouldReceive('endOfFiscalYear')->andReturn($date)->once();
$helper->shouldReceive('startOfFiscalYear')->andReturn($date)->once();