mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Expand factory tests.
This commit is contained in:
parent
5b8479f3a4
commit
06dc8a499b
@ -23,8 +23,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Services\Internal\Support\AccountServiceTrait;
|
||||
@ -44,8 +42,6 @@ class AccountFactory
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws Exception
|
||||
* @return Account
|
||||
*/
|
||||
public function create(array $data): Account
|
||||
@ -80,10 +76,10 @@ class AccountFactory
|
||||
$newAccount = Account::create($databaseData);
|
||||
$this->updateMetadata($newAccount, $data);
|
||||
|
||||
if ($this->validIBData($data)) {
|
||||
if ($this->validIBData($data) && $type->type === AccountType::ASSET) {
|
||||
$this->updateIB($newAccount, $data);
|
||||
}
|
||||
if (!$this->validIBData($data)) {
|
||||
if (!$this->validIBData($data) && $type->type === AccountType::ASSET) {
|
||||
$this->deleteIB($newAccount);
|
||||
}
|
||||
// update note:
|
||||
@ -99,8 +95,6 @@ class AccountFactory
|
||||
* @param string $accountType
|
||||
*
|
||||
* @return Account|null
|
||||
* @throws Exception
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function find(string $accountName, string $accountType): ?Account
|
||||
{
|
||||
@ -122,8 +116,6 @@ class AccountFactory
|
||||
* @param string $accountType
|
||||
*
|
||||
* @return Account
|
||||
* @throws Exception
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function findOrCreate(string $accountName, string $accountType): Account
|
||||
{
|
||||
@ -143,7 +135,7 @@ class AccountFactory
|
||||
'name' => $accountName,
|
||||
'account_type_id' => $type->id,
|
||||
'accountType' => null,
|
||||
'virtualBalance' => '0',
|
||||
'virtualBalance' => '0',
|
||||
'iban' => null,
|
||||
'active' => true,
|
||||
]
|
||||
|
@ -24,9 +24,10 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use FireflyIII\Models\Bill;
|
||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||
use FireflyIII\Services\Internal\Support\BillServiceTrait;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class BillFactory
|
||||
@ -34,66 +35,15 @@ use FireflyIII\User;
|
||||
class BillFactory
|
||||
{
|
||||
use BillServiceTrait;
|
||||
/** @var BillRepositoryInterface */
|
||||
private $repository;
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* BillFactory constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = app(BillRepositoryInterface::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int|null $billId
|
||||
* @param null|string $billName
|
||||
*
|
||||
* @return Bill|null
|
||||
*/
|
||||
public function find(?int $billId, ?string $billName): ?Bill
|
||||
{
|
||||
$billId = intval($billId);
|
||||
$billName = strval($billName);
|
||||
// first find by ID:
|
||||
if ($billId > 0) {
|
||||
/** @var Bill $bill */
|
||||
$bill = $this->repository->find($billId);
|
||||
if (!is_null($bill)) {
|
||||
return $bill;
|
||||
}
|
||||
}
|
||||
|
||||
// then find by name:
|
||||
if (strlen($billName) > 0) {
|
||||
$bill = $this->repository->findByName($billName);
|
||||
if (!is_null($bill)) {
|
||||
return $bill;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->repository->setUser($user);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @return Bill|null
|
||||
*/
|
||||
public function store(array $data): ?Bill
|
||||
public function create(array $data): ?Bill
|
||||
{
|
||||
$matchArray = explode(',', $data['match']);
|
||||
$matchArray = array_unique($matchArray);
|
||||
@ -123,4 +73,65 @@ class BillFactory
|
||||
return $bill;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int|null $billId
|
||||
* @param null|string $billName
|
||||
*
|
||||
* @return Bill|null
|
||||
*/
|
||||
public function find(?int $billId, ?string $billName): ?Bill
|
||||
{
|
||||
$billId = intval($billId);
|
||||
$billName = strval($billName);
|
||||
|
||||
// first find by ID:
|
||||
if ($billId > 0) {
|
||||
/** @var Bill $bill */
|
||||
$bill = $this->user->bills()->find($billId);
|
||||
if (!is_null($bill)) {
|
||||
return $bill;
|
||||
}
|
||||
}
|
||||
|
||||
// then find by name:
|
||||
if (strlen($billName) > 0) {
|
||||
$bill = $this->findByName($billName);
|
||||
if (!is_null($bill)) {
|
||||
return $bill;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return Bill|null
|
||||
*/
|
||||
public function findByName(string $name): ?Bill
|
||||
{
|
||||
/** @var Collection $collection */
|
||||
$collection = $this->user->bills()->get();
|
||||
/** @var Bill $bill */
|
||||
foreach ($collection as $bill) {
|
||||
Log::debug(sprintf('"%s" vs. "%s"', $bill->name, $name));
|
||||
if ($bill->name === $name) {
|
||||
return $bill;
|
||||
}
|
||||
}
|
||||
Log::debug(sprintf('Bill::Find by name returns NULL based on "%s"', $name));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
}
|
@ -24,26 +24,17 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use FireflyIII\Models\Budget;
|
||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* Class BudgetFactory
|
||||
*/
|
||||
class BudgetFactory
|
||||
{
|
||||
/** @var BudgetRepositoryInterface */
|
||||
private $repository;
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* BudgetFactory constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = app(BudgetRepositoryInterface::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int|null $budgetId
|
||||
@ -62,14 +53,15 @@ class BudgetFactory
|
||||
|
||||
// first by ID:
|
||||
if ($budgetId > 0) {
|
||||
$budget = $this->repository->findNull($budgetId);
|
||||
/** @var Budget $budget */
|
||||
$budget = $this->user->budgets()->find($budgetId);
|
||||
if (!is_null($budget)) {
|
||||
return $budget;
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen($budgetName) > 0) {
|
||||
$budget = $this->repository->findByName($budgetName);
|
||||
$budget = $this->findByName($budgetName);
|
||||
if (!is_null($budget)) {
|
||||
return $budget;
|
||||
}
|
||||
@ -78,13 +70,31 @@ class BudgetFactory
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return Budget|null
|
||||
*/
|
||||
public function findByName(string $name): ?Budget
|
||||
{
|
||||
/** @var Collection $collection */
|
||||
$collection = $this->user->budgets()->get();
|
||||
/** @var Budget $budget */
|
||||
foreach ($collection as $budget) {
|
||||
if ($budget->name === $name) {
|
||||
return $budget;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->repository->setUser($user);
|
||||
}
|
||||
|
||||
}
|
@ -25,8 +25,8 @@ namespace FireflyIII\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
@ -34,17 +34,26 @@ use Log;
|
||||
*/
|
||||
class CategoryFactory
|
||||
{
|
||||
/** @var CategoryRepositoryInterface */
|
||||
private $repository;
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* CategoryFactory constructor.
|
||||
* @param string $name
|
||||
*
|
||||
* @return Category|null
|
||||
*/
|
||||
public function __construct()
|
||||
public function findByName(string $name): ?Category
|
||||
{
|
||||
$this->repository = app(CategoryRepositoryInterface::class);
|
||||
/** @var Collection $collection */
|
||||
$collection = $this->user->categories()->get();
|
||||
/** @var Category $category */
|
||||
foreach ($collection as $category) {
|
||||
if ($category->name === $name) {
|
||||
return $category;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,14 +74,15 @@ class CategoryFactory
|
||||
}
|
||||
// first by ID:
|
||||
if ($categoryId > 0) {
|
||||
$category = $this->repository->findNull($categoryId);
|
||||
/** @var Category $category */
|
||||
$category = $this->user->categories()->find($categoryId);
|
||||
if (!is_null($category)) {
|
||||
return $category;
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen($categoryName) > 0) {
|
||||
$category = $this->repository->findByName($categoryName);
|
||||
$category = $this->findByName($categoryName);
|
||||
if (!is_null($category)) {
|
||||
return $category;
|
||||
}
|
||||
@ -94,7 +104,6 @@ class CategoryFactory
|
||||
public function setUser(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->repository->setUser($user);
|
||||
}
|
||||
|
||||
}
|
@ -25,7 +25,6 @@ namespace FireflyIII\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||
use FireflyIII\User;
|
||||
|
||||
/**
|
||||
@ -33,19 +32,9 @@ use FireflyIII\User;
|
||||
*/
|
||||
class PiggyBankFactory
|
||||
{
|
||||
/** @var PiggyBankRepositoryInterface */
|
||||
private $repository;
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* PiggyBankFactory constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = app(PiggyBankRepositoryInterface::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int|null $piggyBankId
|
||||
* @param null|string $piggyBankName
|
||||
@ -62,7 +51,7 @@ class PiggyBankFactory
|
||||
// first find by ID:
|
||||
if ($piggyBankId > 0) {
|
||||
/** @var PiggyBank $piggyBank */
|
||||
$piggyBank = $this->repository->find($piggyBankId);
|
||||
$piggyBank = $this->user->piggyBanks()->find($piggyBankId);
|
||||
if (!is_null($piggyBank)) {
|
||||
return $piggyBank;
|
||||
}
|
||||
@ -71,7 +60,7 @@ class PiggyBankFactory
|
||||
// then find by name:
|
||||
if (strlen($piggyBankName) > 0) {
|
||||
/** @var PiggyBank $piggyBank */
|
||||
$piggyBank = $this->repository->findByName($piggyBankName);
|
||||
$piggyBank = $this->findByName($piggyBankName);
|
||||
if (!is_null($piggyBank)) {
|
||||
return $piggyBank;
|
||||
}
|
||||
@ -81,13 +70,30 @@ class PiggyBankFactory
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return PiggyBank|null
|
||||
*/
|
||||
public function findByName(string $name): ?PiggyBank
|
||||
{
|
||||
$set = $this->user->piggyBanks()->get();
|
||||
/** @var PiggyBank $piggy */
|
||||
foreach ($set as $piggy) {
|
||||
if ($piggy->name === $name) {
|
||||
return $piggy;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->repository->setUser($user);
|
||||
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Services\Internal\Support\TransactionServiceTrait;
|
||||
@ -72,8 +71,6 @@ class TransactionFactory
|
||||
* @param array $data
|
||||
*
|
||||
* @return Collection
|
||||
* @throws FireflyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function createPair(TransactionJournal $journal, array $data): Collection
|
||||
{
|
||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Note;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
||||
@ -100,6 +99,7 @@ class TransactionJournalFactory
|
||||
$this->storeMeta($journal, $data, 'invoice_date');
|
||||
$this->storeMeta($journal, $data, 'internal_reference');
|
||||
Log::debug('End of TransactionJournalFactory::create()');
|
||||
|
||||
return $journal;
|
||||
}
|
||||
|
||||
@ -145,7 +145,7 @@ class TransactionJournalFactory
|
||||
$factory = app(TransactionTypeFactory::class);
|
||||
$transactionType = $factory->find($type);
|
||||
if (is_null($transactionType)) {
|
||||
throw new FireflyException(sprintf('Could not find transaction type for "%s"', $type));
|
||||
throw new FireflyException(sprintf('Could not find transaction type for "%s"', $type)); // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
return $transactionType;
|
||||
|
@ -24,7 +24,9 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use FireflyIII\Models\TransactionJournalMeta;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class TransactionJournalMetaFactory
|
||||
@ -35,7 +37,6 @@ class TransactionJournalMetaFactory
|
||||
* @param array $data
|
||||
*
|
||||
* @return TransactionJournalMeta|null
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function updateOrCreate(array $data): ?TransactionJournalMeta
|
||||
{
|
||||
@ -43,7 +44,11 @@ class TransactionJournalMetaFactory
|
||||
/** @var TransactionJournalMeta $entry */
|
||||
$entry = $data['journal']->transactionJournalMeta()->where('name', $data['name'])->first();
|
||||
if (is_null($value) && !is_null($entry)) {
|
||||
$entry->delete();
|
||||
try {
|
||||
$entry->delete();
|
||||
} catch (Exception $e) { // @codeCoverageIgnore
|
||||
Log::error(sprintf('Could not delete transaction journal meta: %s', $e->getMessage())); // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ namespace FireflyIII\Factory;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* Class TransactionTypeFactory
|
||||
*/
|
||||
class TransactionTypeFactory
|
||||
|
@ -552,7 +552,7 @@ class BillRepository implements BillRepositoryInterface
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user);
|
||||
$bill = $factory->store($data);
|
||||
$bill = $factory->create($data);
|
||||
|
||||
|
||||
return $bill;
|
||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Internal\Support;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use Exception;
|
||||
use FireflyIII\Factory\AccountFactory;
|
||||
use FireflyIII\Factory\AccountMetaFactory;
|
||||
use FireflyIII\Factory\TransactionFactory;
|
||||
@ -57,7 +57,6 @@ trait AccountServiceTrait
|
||||
* @param Account $account
|
||||
*
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function deleteIB(Account $account): bool
|
||||
{
|
||||
@ -67,7 +66,11 @@ trait AccountServiceTrait
|
||||
// opening balance data? update it!
|
||||
if (null !== $openingBalance) {
|
||||
Log::debug('Opening balance journal found, delete journal.');
|
||||
$openingBalance->delete();
|
||||
try {
|
||||
$openingBalance->delete();
|
||||
} catch (Exception $e) {
|
||||
Log::error(sprintf('Could not delete opening balance: %s', $e->getMessage()));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -126,7 +129,6 @@ trait AccountServiceTrait
|
||||
* @param array $data
|
||||
*
|
||||
* @return TransactionJournal|null
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function storeIBJournal(Account $account, array $data): ?TransactionJournal
|
||||
{
|
||||
@ -233,8 +235,6 @@ trait AccountServiceTrait
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
* @throws FireflyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function updateIB(Account $account, array $data): bool
|
||||
{
|
||||
@ -266,8 +266,6 @@ trait AccountServiceTrait
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function updateIBJournal(Account $account, TransactionJournal $journal, array $data): bool
|
||||
{
|
||||
@ -279,7 +277,12 @@ trait AccountServiceTrait
|
||||
Log::debug(sprintf('Submitted amount for opening balance to update is "%s"', $amount));
|
||||
if (0 === bccomp($amount, '0')) {
|
||||
Log::notice(sprintf('Amount "%s" is zero, delete opening balance.', $amount));
|
||||
$journal->delete();
|
||||
try {
|
||||
$journal->delete();
|
||||
} catch (Exception $e) {
|
||||
Log::error(sprintf('Could not delete opening balance: %s', $e->getMessage()));
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -32,6 +32,8 @@ use FireflyIII\Models\Note;
|
||||
*/
|
||||
trait BillServiceTrait
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param Bill $bill
|
||||
* @param string $note
|
||||
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Internal\Support;
|
||||
|
||||
use Exception;
|
||||
use FireflyIII\Factory\BillFactory;
|
||||
use FireflyIII\Factory\TagFactory;
|
||||
use FireflyIII\Factory\TransactionJournalMetaFactory;
|
||||
@ -74,7 +73,7 @@ trait JournalServiceTrait
|
||||
$factory->setUser($journal->user);
|
||||
$set = [];
|
||||
if (!is_array($data['tags'])) {
|
||||
return;
|
||||
return; // @codeCoverageIgnore
|
||||
}
|
||||
foreach ($data['tags'] as $string) {
|
||||
if (strlen($string) > 0) {
|
||||
@ -102,11 +101,7 @@ trait JournalServiceTrait
|
||||
];
|
||||
/** @var TransactionJournalMetaFactory $factory */
|
||||
$factory = app(TransactionJournalMetaFactory::class);
|
||||
try {
|
||||
$factory->updateOrCreate($set);
|
||||
} catch (Exception $e) {
|
||||
// don't care
|
||||
}
|
||||
$factory->updateOrCreate($set);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -24,8 +24,6 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Services\Internal\Support;
|
||||
|
||||
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Factory\AccountFactory;
|
||||
use FireflyIII\Factory\BudgetFactory;
|
||||
use FireflyIII\Factory\CategoryFactory;
|
||||
@ -39,6 +37,7 @@ use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Trait TransactionServiceTrait
|
||||
@ -53,7 +52,6 @@ trait TransactionServiceTrait
|
||||
* @param string $direction
|
||||
*
|
||||
* @return string|null
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function accountType(TransactionJournal $journal, string $direction): ?string
|
||||
{
|
||||
@ -61,7 +59,11 @@ trait TransactionServiceTrait
|
||||
$type = $journal->transactionType->type;
|
||||
switch ($type) {
|
||||
default:
|
||||
throw new FireflyException(sprintf('Cannot handle type "%s" in accountType()', $type));
|
||||
// @codeCoverageIgnoreStart
|
||||
Log::error(sprintf('Cannot handle type "%s" in accountType()', $type));
|
||||
|
||||
return null;
|
||||
// @codeCoverageIgnoreEnd
|
||||
case TransactionType::WITHDRAWAL:
|
||||
$types['source'] = AccountType::ASSET;
|
||||
$types['destination'] = AccountType::EXPENSE;
|
||||
@ -83,20 +85,22 @@ trait TransactionServiceTrait
|
||||
return $types[$direction];
|
||||
}
|
||||
if (!isset($types[$direction])) {
|
||||
throw new FireflyException(sprintf('No type set for direction "%s" and type "%s"', $type, $direction));
|
||||
// @codeCoverageIgnoreStart
|
||||
Log::error(sprintf('No type set for direction "%s" and type "%s"', $type, $direction));
|
||||
|
||||
return null;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
return $types[$direction];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $expectedType
|
||||
* @param string|null $expectedType
|
||||
* @param int|null $accountId
|
||||
* @param string|null $accountName
|
||||
*
|
||||
* @return Account
|
||||
* @throws FireflyException
|
||||
* @throws Exception
|
||||
*/
|
||||
public function findAccount(?string $expectedType, ?int $accountId, ?string $accountName): Account
|
||||
{
|
||||
@ -105,7 +109,7 @@ trait TransactionServiceTrait
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$repository->setUser($this->user);
|
||||
|
||||
if(is_null($expectedType)) {
|
||||
if (is_null($expectedType)) {
|
||||
return $repository->findNull($accountId);
|
||||
}
|
||||
|
||||
@ -153,7 +157,11 @@ trait TransactionServiceTrait
|
||||
return $repository->getCashAccount();
|
||||
|
||||
default:
|
||||
throw new FireflyException(sprintf('Cannot find account of type "%s".', $expectedType));
|
||||
// @codeCoverageIgnoreStart
|
||||
Log::error(sprintf('Cannot find account of type "%s".', $expectedType));
|
||||
|
||||
return null;
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
}
|
||||
}
|
||||
@ -233,7 +241,7 @@ trait TransactionServiceTrait
|
||||
|
||||
/**
|
||||
* @param Transaction $transaction
|
||||
* @param string|null $amount
|
||||
* @param string|null $amount
|
||||
*/
|
||||
protected function setForeignAmount(Transaction $transaction, ?string $amount): void
|
||||
{
|
||||
|
396
tests/Unit/Factory/AccountFactoryTest.php
Normal file
396
tests/Unit/Factory/AccountFactoryTest.php
Normal file
@ -0,0 +1,396 @@
|
||||
<?php
|
||||
/**
|
||||
* AccountFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Factory\AccountFactory;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class AccountFactoryTest
|
||||
*/
|
||||
class AccountFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test minimal set of data to make factory work (asset account).
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasic()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test creation of CC asset.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicCC()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic CC account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'ccAsset',
|
||||
'ccMonthlyPaymentDate' => '2018-01-01',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('ccAsset', $account->getMeta('accountRole'));
|
||||
$this->assertEquals('2018-01-01', $account->getMeta('ccMonthlyPaymentDate'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an expense account. This overrules the virtual balance.
|
||||
* Role should not be set.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicExpense()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'expense',
|
||||
'iban' => null,
|
||||
'name' => 'Basic expense account #' . rand(1, 1000),
|
||||
'virtualBalance' => '1243',
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::EXPENSE, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('', $account->getMeta('accountRole'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit IB data for asset account.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicIB()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
'openingBalance' => '100',
|
||||
'openingBalanceDate' => new Carbon('2018-01-01'),
|
||||
'currency_id' => 1,
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
|
||||
// find opening balance:
|
||||
$this->assertEquals(1, $account->transactions()->count());
|
||||
$this->assertEquals(100, floatval($account->transactions()->first()->amount));
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit empty (amount = 0) IB data for asset account.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicIBZero()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
'openingBalance' => '0.0',
|
||||
'openingBalanceDate' => new Carbon('2018-01-01'),
|
||||
'currency_id' => 1,
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
|
||||
// find opening balance:
|
||||
$this->assertEquals(0, $account->transactions()->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* Add valid IBAN.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicIban()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => 'NL18RABO0326747238',
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('NL18RABO0326747238', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add invalid IBAN.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicInvalidIban()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => 'NL1XRABO032674X238',
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit IB data for asset account.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicNegativeIB()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
'openingBalance' => '-100',
|
||||
'openingBalanceDate' => new Carbon('2018-01-01'),
|
||||
'currency_id' => 1,
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
|
||||
// find opening balance:
|
||||
$this->assertEquals(1, $account->transactions()->count());
|
||||
$this->assertEquals(-100, floatval($account->transactions()->first()->amount));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add some notes to asset account.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
* @covers \FireflyIII\Factory\AccountMetaFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\AccountServiceTrait
|
||||
*/
|
||||
public function testCreateBasicNotes()
|
||||
{
|
||||
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'iban' => null,
|
||||
'name' => 'Basic asset account #' . rand(1, 1000),
|
||||
'virtualBalance' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
'notes' => 'Hello!',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->name, $data['name']);
|
||||
$this->assertEquals(AccountType::ASSET, $account->accountType->type);
|
||||
$this->assertEquals('', $account->iban);
|
||||
$this->assertTrue($account->active);
|
||||
$this->assertEquals('0', $account->virtual_balance);
|
||||
$this->assertEquals('defaultAsset', $account->getMeta('accountRole'));
|
||||
$note = $account->notes()->first();
|
||||
$this->assertEquals('Hello!', $note->text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should return existing account.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\AccountFactory
|
||||
*/
|
||||
public function testCreateExisting()
|
||||
{
|
||||
$existing = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$data = [
|
||||
'account_type_id' => null,
|
||||
'accountType' => 'asset',
|
||||
'name' => $existing->name,
|
||||
'virtualBalance' => null,
|
||||
'iban' => null,
|
||||
'active' => true,
|
||||
'accountRole' => 'defaultAsset',
|
||||
];
|
||||
|
||||
/** @var AccountFactory $factory */
|
||||
$factory = app(AccountFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$account = $factory->create($data);
|
||||
|
||||
// assert stuff about account:
|
||||
$this->assertEquals($account->id, $existing->id);
|
||||
}
|
||||
|
||||
}
|
134
tests/Unit/Factory/BillFactoryTest.php
Normal file
134
tests/Unit/Factory/BillFactoryTest.php
Normal file
@ -0,0 +1,134 @@
|
||||
<?php
|
||||
/**
|
||||
* BillFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\BillFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class BillFactoryTest
|
||||
*/
|
||||
class BillFactoryTest extends TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Create basic bill with minimum data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BillFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\BillServiceTrait
|
||||
*/
|
||||
public function testCreateBasic()
|
||||
{
|
||||
$data = [
|
||||
'name' => 'Some new bill #' . rand(1, 1000),
|
||||
'match' => 'i,am,word' . rand(1, 1000),
|
||||
'amount_min' => '5',
|
||||
'amount_max' => '10',
|
||||
'date' => '2018-01-01',
|
||||
'repeat_freq' => 'monthly',
|
||||
'skip' => 0,
|
||||
'automatch' => true,
|
||||
'active' => true,
|
||||
'notes' => 'Hello!',
|
||||
];
|
||||
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$bill = $factory->create($data);
|
||||
|
||||
$this->assertEquals($data['name'], $bill->name);
|
||||
$this->assertEquals($data['match'], $bill->match);
|
||||
$this->assertEquals($data['amount_min'], $bill->amount_min);
|
||||
$this->assertEquals($data['repeat_freq'], $bill->repeat_freq);
|
||||
$note = $bill->notes()->first();
|
||||
$this->assertEquals($data['notes'], $note->text);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Find by ID
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BillFactory
|
||||
*
|
||||
*/
|
||||
public function testFindById()
|
||||
{
|
||||
$existing = $this->user()->piggyBanks()->first();
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$piggy = $factory->find($existing->id, null);
|
||||
$this->assertEquals($existing->id, $piggy->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find by name
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BillFactory
|
||||
*
|
||||
*/
|
||||
public function testFindByName()
|
||||
{
|
||||
$existing = $this->user()->bills()->first();
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$piggy = $factory->find(null, $existing->name);
|
||||
|
||||
$this->assertEquals($existing->id, $piggy->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find by unknown name
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BillFactory
|
||||
*
|
||||
*/
|
||||
public function testFindByUnknownName()
|
||||
{
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$piggy = $factory->find(null, 'I dont exist' . rand(1, 1000));
|
||||
|
||||
$this->assertNull($piggy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find NULL
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BillFactory
|
||||
*
|
||||
*/
|
||||
public function testFindNull()
|
||||
{
|
||||
/** @var BillFactory $factory */
|
||||
$factory = app(BillFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$this->assertNull($factory->find(null, null));
|
||||
}
|
||||
|
||||
}
|
97
tests/Unit/Factory/BudgetFactoryTest.php
Normal file
97
tests/Unit/Factory/BudgetFactoryTest.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* BudgetFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\BudgetFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class BudgetFactoryTest
|
||||
*/
|
||||
class BudgetFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Put in ID, return it.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BudgetFactory
|
||||
*/
|
||||
public function testFindById()
|
||||
{
|
||||
$existing = $this->user()->budgets()->first();
|
||||
/** @var BudgetFactory $factory */
|
||||
$factory = app(BudgetFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$budget = $factory->find($existing->id, null);
|
||||
$this->assertEquals($existing->id, $budget->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in name, return it.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BudgetFactory
|
||||
*/
|
||||
public function testFindByName()
|
||||
{
|
||||
$existing = $this->user()->budgets()->first();
|
||||
/** @var BudgetFactory $factory */
|
||||
$factory = app(BudgetFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$budget = $factory->find(null, $existing->name);
|
||||
$this->assertEquals($existing->id, $budget->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in unknown, get NULL
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BudgetFactory
|
||||
*/
|
||||
public function testFindUnknown()
|
||||
{
|
||||
/** @var BudgetFactory $factory */
|
||||
$factory = app(BudgetFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$this->assertNull($factory->find(null, 'I dont exist.'.rand(1,000)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in NULL, will find NULL.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\BudgetFactory
|
||||
*/
|
||||
public function testFindNull()
|
||||
{
|
||||
/** @var BudgetFactory $factory */
|
||||
$factory = app(BudgetFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$this->assertNull($factory->find(null, null));
|
||||
|
||||
}
|
||||
|
||||
}
|
103
tests/Unit/Factory/CategoryFactoryTest.php
Normal file
103
tests/Unit/Factory/CategoryFactoryTest.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* CategoryFactoryTest.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\Unit\Factory;
|
||||
|
||||
use FireflyIII\Factory\CategoryFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class CategoryFactoryTest
|
||||
*/
|
||||
class CategoryFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\CategoryFactory
|
||||
*/
|
||||
public function testFindOrCreateExistingID()
|
||||
{
|
||||
$existing = $this->user()->categories()->first();
|
||||
|
||||
/** @var CategoryFactory $factory */
|
||||
$factory = app(CategoryFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$category = $factory->findOrCreate($existing->id, null);
|
||||
$this->assertEquals($existing->id, $category->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\CategoryFactory
|
||||
*/
|
||||
public function testFindOrCreateExistingName()
|
||||
{
|
||||
$existing = $this->user()->categories()->first();
|
||||
|
||||
/** @var CategoryFactory $factory */
|
||||
$factory = app(CategoryFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$category = $factory->findOrCreate(null, $existing->name);
|
||||
$this->assertEquals($existing->id, $category->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* You can force a NULL result by presenting an invalid ID and no valid name.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\CategoryFactory
|
||||
*/
|
||||
public function testFindOrCreateInvalidID()
|
||||
{
|
||||
$existing = $this->user()->categories()->max('id');
|
||||
$existing = $existing + 4;
|
||||
|
||||
/** @var CategoryFactory $factory */
|
||||
$factory = app(CategoryFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$this->assertNull($factory->findOrCreate($existing, ''));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\CategoryFactory
|
||||
*/
|
||||
public function testFindOrCreateNewName()
|
||||
{
|
||||
$name = 'Some new category #' . rand(1, 1000);
|
||||
|
||||
/** @var CategoryFactory $factory */
|
||||
$factory = app(CategoryFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$category = $factory->findOrCreate(null, $name);
|
||||
$this->assertEquals($name, $category->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\CategoryFactory
|
||||
*/
|
||||
public function testFindOrCreateNull()
|
||||
{
|
||||
/** @var CategoryFactory $factory */
|
||||
$factory = app(CategoryFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$this->assertNull($factory->findOrCreate(null, null));
|
||||
}
|
||||
|
||||
}
|
135
tests/Unit/Factory/PiggyBankEventFactoryTest.php
Normal file
135
tests/Unit/Factory/PiggyBankEventFactoryTest.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
/**
|
||||
* PiggyBankEventFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\PiggyBankEventFactory;
|
||||
use FireflyIII\Models\PiggyBankEvent;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class PiggyBankEventFactoryTest
|
||||
*/
|
||||
class PiggyBankEventFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\PiggyBankEventFactory
|
||||
*/
|
||||
public function testCreateAmountZero()
|
||||
{
|
||||
/** @var TransactionJournal $transfer */
|
||||
$transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
$piggy = $this->user()->piggyBanks()->first();
|
||||
$repetition = PiggyBankRepetition::first();
|
||||
$repos = $this->mock(PiggyBankRepositoryInterface::class);
|
||||
/** @var PiggyBankEventFactory $factory */
|
||||
$factory = app(PiggyBankEventFactory::class);
|
||||
|
||||
// mock:
|
||||
$repos->shouldReceive('setUser');
|
||||
$repos->shouldReceive('getRepetition')->andReturn($repetition);
|
||||
$repos->shouldReceive('getExactAmount')->andReturn('0');
|
||||
|
||||
$this->assertNull($factory->create($transfer, $piggy));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\PiggyBankEventFactory
|
||||
*/
|
||||
public function testCreateNoPiggy()
|
||||
{
|
||||
/** @var TransactionJournal $transfer */
|
||||
$transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
|
||||
/** @var PiggyBankEventFactory $factory */
|
||||
$factory = app(PiggyBankEventFactory::class);
|
||||
|
||||
$this->assertNull($factory->create($transfer, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\PiggyBankEventFactory
|
||||
*/
|
||||
public function testCreateNoRep()
|
||||
{
|
||||
/** @var TransactionJournal $transfer */
|
||||
$transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
$piggy = $this->user()->piggyBanks()->first();
|
||||
$repetition = new PiggyBankRepetition;
|
||||
$repos = $this->mock(PiggyBankRepositoryInterface::class);
|
||||
/** @var PiggyBankEventFactory $factory */
|
||||
$factory = app(PiggyBankEventFactory::class);
|
||||
|
||||
// mock:
|
||||
$repos->shouldReceive('setUser');
|
||||
$repos->shouldReceive('getRepetition')->andReturn($repetition);
|
||||
$repos->shouldReceive('getExactAmount')->andReturn('0');
|
||||
|
||||
$this->assertNull($factory->create($transfer, $piggy));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\PiggyBankEventFactory
|
||||
*/
|
||||
public function testCreateNotTransfer()
|
||||
{
|
||||
/** @var TransactionJournal $deposit */
|
||||
$deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
|
||||
$piggy = $this->user()->piggyBanks()->first();
|
||||
/** @var PiggyBankEventFactory $factory */
|
||||
$factory = app(PiggyBankEventFactory::class);
|
||||
|
||||
$this->assertNull($factory->create($deposit, $piggy));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\PiggyBankEventFactory
|
||||
*/
|
||||
public function testCreateSuccess()
|
||||
{
|
||||
/** @var TransactionJournal $transfer */
|
||||
$transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
$piggy = $this->user()->piggyBanks()->first();
|
||||
$repetition = PiggyBankRepetition::first();
|
||||
$event = PiggyBankEvent::first();
|
||||
$repos = $this->mock(PiggyBankRepositoryInterface::class);
|
||||
/** @var PiggyBankEventFactory $factory */
|
||||
$factory = app(PiggyBankEventFactory::class);
|
||||
|
||||
// mock:
|
||||
$repos->shouldReceive('setUser');
|
||||
$repos->shouldReceive('getRepetition')->andReturn($repetition);
|
||||
$repos->shouldReceive('getExactAmount')->andReturn('5');
|
||||
$repos->shouldReceive('addAmountToRepetition')->once();
|
||||
$repos->shouldReceive('createEventWithJournal')->once()->andReturn($event);
|
||||
|
||||
$result = $factory->create($transfer, $piggy);
|
||||
$this->assertEquals($result->id, $event->id);
|
||||
|
||||
}
|
||||
|
||||
}
|
96
tests/Unit/Factory/PiggyBankFactoryTest.php
Normal file
96
tests/Unit/Factory/PiggyBankFactoryTest.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* PiggyBankFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\PiggyBankFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class PiggyBankFactoryTest
|
||||
*/
|
||||
class PiggyBankFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Put in ID, return it.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\PiggyBankFactory
|
||||
*/
|
||||
public function testFindById()
|
||||
{
|
||||
$existing = $this->user()->piggyBanks()->first();
|
||||
/** @var PiggyBankFactory $factory */
|
||||
$factory = app(PiggyBankFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$piggyBank = $factory->find($existing->id, null);
|
||||
$this->assertEquals($existing->id, $piggyBank->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in name, return it.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\PiggyBankFactory
|
||||
*/
|
||||
public function testFindByName()
|
||||
{
|
||||
$existing = $this->user()->piggyBanks()->first();
|
||||
/** @var PiggyBankFactory $factory */
|
||||
$factory = app(PiggyBankFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$piggyBank = $factory->find(null, $existing->name);
|
||||
$this->assertEquals($existing->id, $piggyBank->id);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in NULL, will find NULL.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\PiggyBankFactory
|
||||
*/
|
||||
public function testFindNull()
|
||||
{
|
||||
/** @var PiggyBankFactory $factory */
|
||||
$factory = app(PiggyBankFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$this->assertNull($factory->find(null, null));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Put in unknown, get NULL
|
||||
*
|
||||
* @covers \FireflyIII\Factory\PiggyBankFactory
|
||||
*/
|
||||
public function testFindUnknown()
|
||||
{
|
||||
/** @var PiggyBankFactory $factory */
|
||||
$factory = app(PiggyBankFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$this->assertNull($factory->find(null, 'I dont exist.' . rand(1, 000)));
|
||||
}
|
||||
}
|
63
tests/Unit/Factory/TagFactoryTest.php
Normal file
63
tests/Unit/Factory/TagFactoryTest.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* TagFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\TagFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TagFactoryTest
|
||||
*/
|
||||
class TagFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TagFactory
|
||||
*/
|
||||
public function testFindOrCreateExisting()
|
||||
{
|
||||
$tag = $this->user()->tags()->first();
|
||||
/** @var TagFactory $factory */
|
||||
$factory = app(TagFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$result = $factory->findOrCreate($tag->tag);
|
||||
$this->assertEquals($tag->id, $result->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TagFactory
|
||||
*/
|
||||
public function testFindOrCreateNew()
|
||||
{
|
||||
$tag = 'Some new tag#' . rand(1, 1000);
|
||||
/** @var TagFactory $factory */
|
||||
$factory = app(TagFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
|
||||
$result = $factory->findOrCreate($tag);
|
||||
$this->assertEquals($tag, $result->tag);
|
||||
}
|
||||
|
||||
}
|
81
tests/Unit/Factory/TransactionCurrencyFactoryTest.php
Normal file
81
tests/Unit/Factory/TransactionCurrencyFactoryTest.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
/**
|
||||
* TransactionCurrencyFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\TransactionCurrencyFactory;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TransactionCurrencyFactoryTest
|
||||
*/
|
||||
class TransactionCurrencyFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionCurrencyFactory
|
||||
*/
|
||||
public function testFindByBadCode()
|
||||
{
|
||||
/** @var TransactionCurrencyFactory $factory */
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$this->assertNull($factory->find(null, 'BAD CODE'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionCurrencyFactory
|
||||
*/
|
||||
public function testFindByCode()
|
||||
{
|
||||
$currency = TransactionCurrency::find(1);
|
||||
/** @var TransactionCurrencyFactory $factory */
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$result = $factory->find(null, $currency->code);
|
||||
$this->assertEquals($currency->id, $result->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionCurrencyFactory
|
||||
*/
|
||||
public function testFindByID()
|
||||
{
|
||||
$currency = TransactionCurrency::find(1);
|
||||
/** @var TransactionCurrencyFactory $factory */
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$result = $factory->find($currency->id, null);
|
||||
$this->assertEquals($currency->id, $result->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionCurrencyFactory
|
||||
*/
|
||||
public function testFindNull()
|
||||
{
|
||||
/** @var TransactionCurrencyFactory $factory */
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$this->assertNull($factory->find(null, null));
|
||||
}
|
||||
|
||||
}
|
823
tests/Unit/Factory/TransactionFactoryTest.php
Normal file
823
tests/Unit/Factory/TransactionFactoryTest.php
Normal file
@ -0,0 +1,823 @@
|
||||
<?php
|
||||
/**
|
||||
* TransactionFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use FireflyIII\Factory\AccountFactory;
|
||||
use FireflyIII\Factory\BudgetFactory;
|
||||
use FireflyIII\Factory\CategoryFactory;
|
||||
use FireflyIII\Factory\TransactionCurrencyFactory;
|
||||
use FireflyIII\Factory\TransactionFactory;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TransactionFactoryTest
|
||||
*/
|
||||
class TransactionFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairBasic()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $asset->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $expense->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset, $expense);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $withdrawal */
|
||||
$withdrawal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$count = $withdrawal->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($withdrawal, $data);
|
||||
|
||||
$newCount = $withdrawal->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($withdrawal->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairBasicByName()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
$accountFactory = $this->mock(AccountFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => null,
|
||||
'source_name' => $asset->name,
|
||||
'destination_id' => null,
|
||||
'destination_name' => $expense->name,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
$accountFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account
|
||||
$accountRepos->shouldReceive('findByName')->withArgs([$asset->name, [AccountType::ASSET]])->andReturn($asset);
|
||||
// second is for expense account.
|
||||
$accountFactory->shouldReceive('findOrCreate')->andReturn($expense);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $withdrawal */
|
||||
$withdrawal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$count = $withdrawal->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($withdrawal, $data);
|
||||
|
||||
$newCount = $withdrawal->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($withdrawal->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairBasicIntoCash()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
$accountFactory = $this->mock(AccountFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => null,
|
||||
'source_name' => $asset->name,
|
||||
'destination_id' => null,
|
||||
'destination_name' => '',
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
$accountFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account
|
||||
$accountRepos->shouldReceive('findByName')->withArgs([$asset->name, [AccountType::ASSET]])->andReturn($asset);
|
||||
// second is for expense account (cash)
|
||||
$accountRepos->shouldReceive('getCashAccount')->andReturn($expense);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $withdrawal */
|
||||
$withdrawal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$count = $withdrawal->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($withdrawal, $data);
|
||||
|
||||
$newCount = $withdrawal->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($withdrawal->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add budget and category data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairBasicMeta()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||
$budget = $this->user()->budgets()->first();
|
||||
$category = $this->user()->categories()->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $asset->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $expense->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => $budget->id,
|
||||
'budget_name' => null,
|
||||
'category_id' => $category->id,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset, $expense);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn($budget);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn($category);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $withdrawal */
|
||||
$withdrawal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$count = $withdrawal->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($withdrawal, $data);
|
||||
|
||||
$newCount = $withdrawal->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($withdrawal->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
$this->assertEquals($budget->name, $first->budgets()->first()->name);
|
||||
$this->assertEquals($category->name, $first->categories()->first()->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create deposit using minimal data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairDeposit()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $revenue->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $asset->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($revenue, $asset);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $deposit */
|
||||
$deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
|
||||
$count = $deposit->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($deposit, $data);
|
||||
|
||||
$newCount = $deposit->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($deposit->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create deposit using minimal data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairDepositByName()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
$accountFactory = $this->mock(AccountFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => null,
|
||||
'source_name' => $revenue->name,
|
||||
'destination_id' => $asset->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
$accountFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset);
|
||||
// second is for revenue account.
|
||||
$accountFactory->shouldReceive('findOrCreate')->andReturn($revenue);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $deposit */
|
||||
$deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
|
||||
$count = $deposit->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($deposit, $data);
|
||||
|
||||
$newCount = $deposit->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($deposit->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create deposit using minimal data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairDepositCash()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
$accountFactory = $this->mock(AccountFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => null,
|
||||
'source_name' => '',
|
||||
'destination_id' => $asset->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
$accountFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset);
|
||||
|
||||
// second is for revenue account.
|
||||
$accountRepos->shouldReceive('getCashAccount')->andReturn($revenue)->once();
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $deposit */
|
||||
$deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
|
||||
$count = $deposit->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($deposit, $data);
|
||||
|
||||
$newCount = $deposit->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($deposit->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairForeign()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => $euro->id,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $asset->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $expense->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => $foreign->id,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => '10',
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset, $expense);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, $foreign);
|
||||
|
||||
/** @var TransactionJournal $withdrawal */
|
||||
$withdrawal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$count = $withdrawal->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($withdrawal, $data);
|
||||
|
||||
$newCount = $withdrawal->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($withdrawal->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(-10, $first->foreign_amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertEquals($foreign->id, $first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create transfer using minimal data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairReconciliation()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$opposing = $this->user()->accounts()->where('id', '!=', $asset->id)->where('account_type_id', 3)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $asset->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $opposing->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset, $opposing);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $recon */
|
||||
$recon = $this->user()->transactionJournals()->where('transaction_type_id', 5)->first();
|
||||
$count = $recon->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($recon, $data);
|
||||
|
||||
$newCount = $recon->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($recon->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create reconciliation using minimal (bad) data.
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\TransactionServiceTrait
|
||||
*/
|
||||
public function testCreatePairTransfer()
|
||||
{
|
||||
// objects:
|
||||
$asset = $this->user()->accounts()->where('account_type_id', 3)->first();
|
||||
$opposing = $this->user()->accounts()->where('id', '!=', $asset->id)->where('account_type_id', 3)->first();
|
||||
$euro = TransactionCurrency::first();
|
||||
$foreign = TransactionCurrency::where('id', '!=', $euro->id)->first();
|
||||
|
||||
// mocked classes
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$budgetFactory = $this->mock(BudgetFactory::class);
|
||||
$categoryFactory = $this->mock(CategoryFactory::class);
|
||||
$currencyFactory = $this->mock(TransactionCurrencyFactory::class);
|
||||
|
||||
$data = [
|
||||
'currency_id' => 1,
|
||||
'currency_code' => null,
|
||||
'description' => null,
|
||||
'source_id' => $asset->id,
|
||||
'source_name' => null,
|
||||
'destination_id' => $opposing->id,
|
||||
'destination_name' => null,
|
||||
'amount' => '10',
|
||||
'reconciled' => false,
|
||||
'identifier' => 0,
|
||||
'foreign_currency_id' => null,
|
||||
'foreign_currency_code' => null,
|
||||
'foreign_amount' => null,
|
||||
'budget_id' => null,
|
||||
'budget_name' => null,
|
||||
'category_id' => null,
|
||||
'category_name' => null,
|
||||
];
|
||||
|
||||
// mock:
|
||||
$accountRepos->shouldReceive('setUser');
|
||||
$budgetFactory->shouldReceive('setUser');
|
||||
$categoryFactory->shouldReceive('setUser');
|
||||
// first search action is for the asset account, second is for expense account.
|
||||
$accountRepos->shouldReceive('findNull')->andReturn($asset, $opposing);
|
||||
|
||||
// factories return various stuff:
|
||||
$budgetFactory->shouldReceive('find')->andReturn(null);
|
||||
$categoryFactory->shouldReceive('findOrCreate')->andReturn(null);
|
||||
$currencyFactory->shouldReceive('find')->andReturn($euro, null);
|
||||
|
||||
/** @var TransactionJournal $transfer */
|
||||
$transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
$count = $transfer->transactions()->count();
|
||||
|
||||
/** @var TransactionFactory $factory */
|
||||
$factory = app(TransactionFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
$collection = $factory->createPair($transfer, $data);
|
||||
|
||||
$newCount = $transfer->transactions()->count();
|
||||
|
||||
$this->assertCount(2, $collection);
|
||||
$this->assertEquals($count + 2, $newCount);
|
||||
// find stuff in transaction #1 (should suffice):
|
||||
/** @var Transaction $first */
|
||||
$first = $collection->first();
|
||||
$this->assertEquals($transfer->id, $first->transaction_journal_id);
|
||||
$this->assertEquals(-10, $first->amount);
|
||||
$this->assertEquals(false, $first->reconciled);
|
||||
$this->assertEquals(0, $first->identifier);
|
||||
$this->assertEquals($euro->id, $first->transaction_currency_id);
|
||||
$this->assertNull($first->foreign_amount);
|
||||
$this->assertNull($first->foreign_currency_id);
|
||||
}
|
||||
|
||||
}
|
177
tests/Unit/Factory/TransactionJournalFactoryTest.php
Normal file
177
tests/Unit/Factory/TransactionJournalFactoryTest.php
Normal file
@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/**
|
||||
* TransactionJournalFactoryTest.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\Unit\Factory;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Factory\BillFactory;
|
||||
use FireflyIII\Factory\PiggyBankEventFactory;
|
||||
use FireflyIII\Factory\PiggyBankFactory;
|
||||
use FireflyIII\Factory\TagFactory;
|
||||
use FireflyIII\Factory\TransactionFactory;
|
||||
use FireflyIII\Factory\TransactionJournalFactory;
|
||||
use FireflyIII\Factory\TransactionJournalMetaFactory;
|
||||
use FireflyIII\Factory\TransactionTypeFactory;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TransactionJournalFactoryTest
|
||||
*/
|
||||
class TransactionJournalFactoryTest extends TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionJournalFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\JournalServiceTrait
|
||||
*/
|
||||
public function testCreateBasic()
|
||||
{
|
||||
// mock used classes:
|
||||
$type = TransactionType::find(1);
|
||||
$euro = TransactionCurrency::find(1);
|
||||
$billFactory = $this->mock(BillFactory::class);
|
||||
$tagFactory = $this->mock(TagFactory::class);
|
||||
$metaFactory = $this->mock(TransactionJournalMetaFactory::class);
|
||||
$typeFactory = $this->mock(TransactionTypeFactory::class);
|
||||
$transactionFactory = $this->mock(TransactionFactory::class);
|
||||
$piggyFactory = $this->mock(PiggyBankFactory::class);
|
||||
$eventFactory = $this->mock(PiggyBankEventFactory::class);
|
||||
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
|
||||
|
||||
// mock stuff:
|
||||
$typeFactory->shouldReceive('find')->andReturn($type);
|
||||
$currencyRepos->shouldReceive('find')->andReturn($euro);
|
||||
|
||||
// mock factories:
|
||||
$transactionFactory->shouldReceive('setUser')->once();
|
||||
$billFactory->shouldReceive('setUser')->once();
|
||||
$piggyFactory->shouldReceive('setUser')->once();
|
||||
$tagFactory->shouldReceive('setUser')->once();
|
||||
|
||||
$transactionFactory->shouldReceive('createPair')->once();
|
||||
$billFactory->shouldReceive('find')->andReturn(null);
|
||||
$piggyFactory->shouldReceive('find')->andReturn(null);
|
||||
$data = [
|
||||
'type' => 'withdrawal',
|
||||
'user' => $this->user()->id,
|
||||
'description' => 'I are journal',
|
||||
'date' => new Carbon('2018-01-01'),
|
||||
'bill_id' => null,
|
||||
'bill_name' => null,
|
||||
'piggy_bank_id' => null,
|
||||
'piggy_bank_name' => null,
|
||||
'notes' => 'Hello',
|
||||
'tags' => [],
|
||||
'transactions' => [[]],
|
||||
];
|
||||
|
||||
/** @var TransactionJournalFactory $factory */
|
||||
$factory = app(TransactionJournalFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
try {
|
||||
$journal = $factory->create($data);
|
||||
} catch (FireflyException $e) {
|
||||
$this->assertTrue(false, $e->getMessage());
|
||||
}
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
$this->assertEquals('2018-01-01', $journal->date->format('Y-m-d'));
|
||||
$this->assertEquals(1, $journal->notes()->count());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Same but with added meta data
|
||||
*
|
||||
* @covers \FireflyIII\Factory\TransactionJournalFactory
|
||||
* @covers \FireflyIII\Services\Internal\Support\JournalServiceTrait
|
||||
*/
|
||||
public function testCreateBasicMeta()
|
||||
{
|
||||
// mock used classes:
|
||||
$type = TransactionType::find(1);
|
||||
$euro = TransactionCurrency::find(1);
|
||||
$piggy = $this->user()->piggyBanks()->first();
|
||||
$bill = $this->user()->bills()->first();
|
||||
$tag = $this->user()->tags()->first();
|
||||
$billFactory = $this->mock(BillFactory::class);
|
||||
$tagFactory = $this->mock(TagFactory::class);
|
||||
$metaFactory = $this->mock(TransactionJournalMetaFactory::class);
|
||||
$typeFactory = $this->mock(TransactionTypeFactory::class);
|
||||
$transactionFactory = $this->mock(TransactionFactory::class);
|
||||
$piggyFactory = $this->mock(PiggyBankFactory::class);
|
||||
$eventFactory = $this->mock(PiggyBankEventFactory::class);
|
||||
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
|
||||
|
||||
// mock stuff:
|
||||
$typeFactory->shouldReceive('find')->andReturn($type);
|
||||
$currencyRepos->shouldReceive('find')->andReturn($euro);
|
||||
|
||||
// mock factories:
|
||||
$transactionFactory->shouldReceive('setUser')->once();
|
||||
$billFactory->shouldReceive('setUser')->once();
|
||||
$piggyFactory->shouldReceive('setUser')->once();
|
||||
$tagFactory->shouldReceive('setUser')->once();
|
||||
|
||||
$transactionFactory->shouldReceive('createPair')->once();
|
||||
$billFactory->shouldReceive('find')->andReturn($bill);
|
||||
$piggyFactory->shouldReceive('find')->andReturn($piggy);
|
||||
$eventFactory->shouldReceive('create')->once();
|
||||
$tagFactory->shouldReceive('findOrCreate')->andReturn($tag);
|
||||
$metaFactory->shouldReceive('updateOrCreate');
|
||||
|
||||
$data = [
|
||||
'type' => 'withdrawal',
|
||||
'user' => $this->user()->id,
|
||||
'description' => 'I are journal',
|
||||
'date' => new Carbon('2018-01-01'),
|
||||
'bill_id' => $bill->id,
|
||||
'bill_name' => null,
|
||||
'piggy_bank_id' => $piggy->id,
|
||||
'piggy_bank_name' => null,
|
||||
'notes' => '',
|
||||
'tags' => ['a', 'b', 'c'],
|
||||
'transactions' => [[]],
|
||||
'interest_date' => '2018-01-01',
|
||||
];
|
||||
|
||||
/** @var TransactionJournalFactory $factory */
|
||||
$factory = app(TransactionJournalFactory::class);
|
||||
$factory->setUser($this->user());
|
||||
try {
|
||||
$journal = $factory->create($data);
|
||||
} catch (FireflyException $e) {
|
||||
$this->assertTrue(false, $e->getMessage());
|
||||
}
|
||||
$this->assertEquals($data['description'], $journal->description);
|
||||
$this->assertEquals('2018-01-01', $journal->date->format('Y-m-d'));
|
||||
$this->assertEquals(0, $journal->notes()->count());
|
||||
|
||||
}
|
||||
|
||||
}
|
105
tests/Unit/Factory/TransactionJournalMetaFactoryTest.php
Normal file
105
tests/Unit/Factory/TransactionJournalMetaFactoryTest.php
Normal file
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/**
|
||||
* TransactionJournalMetaFactoryTest.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\Unit\Factory;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Factory\TransactionJournalMetaFactory;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionJournalMeta;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class TransactionJournalMetaFactoryTest
|
||||
*/
|
||||
class TransactionJournalMetaFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionJournalMetaFactory
|
||||
*/
|
||||
public function testUpdateOrCreateBasic()
|
||||
{
|
||||
/** @var TransactionJournal $journal */
|
||||
$journal = $this->user()->transactionJournals()->where('transaction_type_id', 1)->first();
|
||||
$set = [
|
||||
'journal' => $journal,
|
||||
'name' => 'hello',
|
||||
'data' => 'bye!',
|
||||
];
|
||||
/** @var TransactionJournalMetaFactory $factory */
|
||||
$factory = app(TransactionJournalMetaFactory::class);
|
||||
$result = $factory->updateOrCreate($set);
|
||||
|
||||
$this->assertEquals(1, $journal->transactionJournalMeta()->count());
|
||||
$this->assertEquals($set['data'], $result->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionJournalMetaFactory
|
||||
*/
|
||||
public function testUpdateOrCreateDate()
|
||||
{
|
||||
/** @var TransactionJournal $journal */
|
||||
$journal = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first();
|
||||
$set = [
|
||||
'journal' => $journal,
|
||||
'name' => 'hello',
|
||||
'data' => new Carbon('2012-01-01'),
|
||||
];
|
||||
/** @var TransactionJournalMetaFactory $factory */
|
||||
$factory = app(TransactionJournalMetaFactory::class);
|
||||
$result = $factory->updateOrCreate($set);
|
||||
|
||||
$this->assertEquals(1, $journal->transactionJournalMeta()->count());
|
||||
$this->assertEquals($set['data']->toW3cString(), $result->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \FireflyIII\Factory\TransactionJournalMetaFactory
|
||||
*/
|
||||
public function testUpdateOrCreateDeleteExisting()
|
||||
{
|
||||
/** @var TransactionJournal $journal */
|
||||
$journal = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first();
|
||||
$meta = TransactionJournalMeta::create(
|
||||
[
|
||||
'transaction_journal_id' => $journal->id,
|
||||
'name' => 'hello',
|
||||
'data' => 'bye!',
|
||||
]
|
||||
);
|
||||
|
||||
$set = [
|
||||
'journal' => $journal,
|
||||
'name' => 'hello',
|
||||
'data' => null,
|
||||
];
|
||||
/** @var TransactionJournalMetaFactory $factory */
|
||||
$factory = app(TransactionJournalMetaFactory::class);
|
||||
$factory->updateOrCreate($set);
|
||||
|
||||
$this->assertEquals(0, $journal->transactionJournalMeta()->count());
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user