mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-18 18:44:16 +00:00
Improve test coverage and remove deprecated code.
This commit is contained in:
@@ -145,7 +145,8 @@ class PrerequisitesController extends Controller
|
|||||||
$object->setUser(auth()->user());
|
$object->setUser(auth()->user());
|
||||||
Log::debug('Going to store entered prerequisites.');
|
Log::debug('Going to store entered prerequisites.');
|
||||||
// store post data
|
// store post data
|
||||||
$result = $object->storePrerequisites($request);
|
$data = $request->all();
|
||||||
|
$result = $object->storePrerequisites($data);
|
||||||
Log::debug(sprintf('Result of storePrerequisites has message count: %d', $result->count()));
|
Log::debug(sprintf('Result of storePrerequisites has message count: %d', $result->count()));
|
||||||
|
|
||||||
if ($result->count() > 0) {
|
if ($result->count() > 0) {
|
||||||
|
@@ -114,7 +114,7 @@ class FakeJobConfiguration implements JobConfigurationInterface
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the data required for the next step in the job configuration.
|
* Return the data required for the next step in the job configuration.
|
||||||
*
|
* @codeCoverageIgnore
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getNextData(): array
|
public function getNextData(): array
|
||||||
@@ -152,6 +152,7 @@ class FakeJobConfiguration implements JobConfigurationInterface
|
|||||||
if (strtolower($album) !== 'station to station' && $this->job->stage !== 'new') {
|
if (strtolower($album) !== 'station to station' && $this->job->stage !== 'new') {
|
||||||
return 'import.fake.enter-album';
|
return 'import.fake.enter-album';
|
||||||
}
|
}
|
||||||
|
return 'impossible-view'; // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -30,6 +30,8 @@ use FireflyIII\User;
|
|||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportAccount.
|
* Class ImportAccount.
|
||||||
*/
|
*/
|
||||||
class ImportAccount
|
class ImportAccount
|
||||||
|
@@ -29,6 +29,8 @@ use Log;
|
|||||||
use Steam;
|
use Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportBill.
|
* Class ImportBill.
|
||||||
*/
|
*/
|
||||||
class ImportBill
|
class ImportBill
|
||||||
|
@@ -28,6 +28,8 @@ use FireflyIII\User;
|
|||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportBudget.
|
* Class ImportBudget.
|
||||||
*/
|
*/
|
||||||
class ImportBudget
|
class ImportBudget
|
||||||
|
@@ -28,6 +28,8 @@ use FireflyIII\User;
|
|||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportCategory
|
* Class ImportCategory
|
||||||
*/
|
*/
|
||||||
class ImportCategory
|
class ImportCategory
|
||||||
|
@@ -28,6 +28,8 @@ use FireflyIII\User;
|
|||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportCurrency
|
* Class ImportCurrency
|
||||||
*/
|
*/
|
||||||
class ImportCurrency
|
class ImportCurrency
|
||||||
|
@@ -33,6 +33,8 @@ use Log;
|
|||||||
use Steam;
|
use Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
* Class ImportJournal.
|
* Class ImportJournal.
|
||||||
*/
|
*/
|
||||||
class ImportJournal
|
class ImportJournal
|
||||||
|
@@ -36,19 +36,155 @@ use Preferences;
|
|||||||
*/
|
*/
|
||||||
class BunqPrerequisites implements PrerequisitesInterface
|
class BunqPrerequisites implements PrerequisitesInterface
|
||||||
{
|
{
|
||||||
/** @var User */
|
// /** @var User */
|
||||||
private $user;
|
// private $user;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
||||||
|
// *
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public function getView(): string
|
||||||
|
// {
|
||||||
|
// Log::debug('Now in BunqPrerequisites::getView()');
|
||||||
|
//
|
||||||
|
// return 'import.bunq.prerequisites';
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns any values required for the prerequisites-view.
|
||||||
|
// *
|
||||||
|
// * @return array
|
||||||
|
// */
|
||||||
|
// public function getViewParameters(): array
|
||||||
|
// {
|
||||||
|
// Log::debug('Now in BunqPrerequisites::getViewParameters()');
|
||||||
|
// $key = '';
|
||||||
|
// $serverIP = '';
|
||||||
|
// if ($this->hasApiKey()) {
|
||||||
|
// $key = Preferences::getForUser($this->user, 'bunq_api_key', null)->data;
|
||||||
|
// }
|
||||||
|
// if ($this->hasServerIP()) {
|
||||||
|
// $serverIP = Preferences::getForUser($this->user, 'external_ip', null)->data;
|
||||||
|
// }
|
||||||
|
// if (!$this->hasServerIP()) {
|
||||||
|
// /** @var IPRetrievalInterface $service */
|
||||||
|
// $service = app(IPRetrievalInterface::class);
|
||||||
|
// $serverIP = (string)$service->getIP();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // get IP address
|
||||||
|
// return ['key' => $key, 'ip' => $serverIP];
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns if this import method has any special prerequisites such as config
|
||||||
|
// * variables or other things. The only thing we verify is the presence of the API key. Everything else
|
||||||
|
// * tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// public function hasPrerequisites(): bool
|
||||||
|
// {
|
||||||
|
// $hasApiKey = $this->hasApiKey();
|
||||||
|
// $hasServerIP = $this->hasServerIP();
|
||||||
|
//
|
||||||
|
// return !$hasApiKey || !$hasServerIP;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Indicate if all prerequisites have been met.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// public function isComplete(): bool
|
||||||
|
// {
|
||||||
|
// // is complete when user has entered both the API key
|
||||||
|
// // and his IP address.
|
||||||
|
//
|
||||||
|
// $hasApiKey = $this->hasApiKey();
|
||||||
|
// $hasServerIP = $this->hasServerIP();
|
||||||
|
//
|
||||||
|
// return $hasApiKey && $hasServerIP;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Set the user for this Prerequisites-routine. Class is expected to implement and save this.
|
||||||
|
// *
|
||||||
|
// * @param User $user
|
||||||
|
// */
|
||||||
|
// public function setUser(User $user): void
|
||||||
|
// {
|
||||||
|
// Log::debug(sprintf('Now in setUser(#%d)', $user->id));
|
||||||
|
// $this->user = $user;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
||||||
|
// * If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
||||||
|
// *
|
||||||
|
// * @param Request $request
|
||||||
|
// *
|
||||||
|
// * @return MessageBag
|
||||||
|
// */
|
||||||
|
// public function storePrerequisites(Request $request): MessageBag
|
||||||
|
// {
|
||||||
|
// $apiKey = $request->get('api_key');
|
||||||
|
// $serverIP = $request->get('external_ip');
|
||||||
|
// Log::debug('Storing bunq API key');
|
||||||
|
// Preferences::setForUser($this->user, 'bunq_api_key', $apiKey);
|
||||||
|
// Preferences::setForUser($this->user, 'external_ip', $serverIP);
|
||||||
|
//
|
||||||
|
// return new MessageBag;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// private function hasApiKey(): bool
|
||||||
|
// {
|
||||||
|
// $apiKey = Preferences::getForUser($this->user, 'bunq_api_key', false);
|
||||||
|
// if (null === $apiKey) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (null === $apiKey->data) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (\strlen((string)$apiKey->data) === 64) {
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// private function hasServerIP(): bool
|
||||||
|
// {
|
||||||
|
// $serverIP = Preferences::getForUser($this->user, 'external_ip', false);
|
||||||
|
// if (null === $serverIP) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (null === $serverIP->data) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (\strlen((string)$serverIP->data) > 6) {
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
/**
|
/**
|
||||||
* Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
* Returns view name that allows user to fill in prerequisites.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getView(): string
|
public function getView(): string
|
||||||
{
|
{
|
||||||
Log::debug('Now in BunqPrerequisites::getView()');
|
// TODO: Implement getView() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
return 'import.bunq.prerequisites';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,39 +194,8 @@ class BunqPrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function getViewParameters(): array
|
public function getViewParameters(): array
|
||||||
{
|
{
|
||||||
Log::debug('Now in BunqPrerequisites::getViewParameters()');
|
// TODO: Implement getViewParameters() method.
|
||||||
$key = '';
|
throw new NotImplementedException;
|
||||||
$serverIP = '';
|
|
||||||
if ($this->hasApiKey()) {
|
|
||||||
$key = Preferences::getForUser($this->user, 'bunq_api_key', null)->data;
|
|
||||||
}
|
|
||||||
if ($this->hasServerIP()) {
|
|
||||||
$serverIP = Preferences::getForUser($this->user, 'external_ip', null)->data;
|
|
||||||
}
|
|
||||||
if (!$this->hasServerIP()) {
|
|
||||||
/** @var IPRetrievalInterface $service */
|
|
||||||
$service = app(IPRetrievalInterface::class);
|
|
||||||
$serverIP = (string)$service->getIP();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// get IP address
|
|
||||||
return ['key' => $key, 'ip' => $serverIP];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if this import method has any special prerequisites such as config
|
|
||||||
* variables or other things. The only thing we verify is the presence of the API key. Everything else
|
|
||||||
* tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function hasPrerequisites(): bool
|
|
||||||
{
|
|
||||||
$hasApiKey = $this->hasApiKey();
|
|
||||||
$hasServerIP = $this->hasServerIP();
|
|
||||||
|
|
||||||
return !$hasApiKey || !$hasServerIP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,13 +205,8 @@ class BunqPrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function isComplete(): bool
|
public function isComplete(): bool
|
||||||
{
|
{
|
||||||
// is complete when user has entered both the API key
|
// TODO: Implement isComplete() method.
|
||||||
// and his IP address.
|
throw new NotImplementedException;
|
||||||
|
|
||||||
$hasApiKey = $this->hasApiKey();
|
|
||||||
$hasServerIP = $this->hasServerIP();
|
|
||||||
|
|
||||||
return $hasApiKey && $hasServerIP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,64 +216,22 @@ class BunqPrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function setUser(User $user): void
|
public function setUser(User $user): void
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in setUser(#%d)', $user->id));
|
// TODO: Implement setUser() method.
|
||||||
$this->user = $user;
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
* This method responds to the user's submission of an API key. Should do nothing but store the value.
|
||||||
* If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* Errors must be returned in the message bag under the field name they are requested by.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
*
|
*
|
||||||
* @return MessageBag
|
* @return MessageBag
|
||||||
*/
|
*/
|
||||||
public function storePrerequisites(Request $request): MessageBag
|
public function storePrerequisites(array $data): MessageBag
|
||||||
{
|
{
|
||||||
$apiKey = $request->get('api_key');
|
// TODO: Implement storePrerequisites() method.
|
||||||
$serverIP = $request->get('external_ip');
|
throw new NotImplementedException;
|
||||||
Log::debug('Storing bunq API key');
|
|
||||||
Preferences::setForUser($this->user, 'bunq_api_key', $apiKey);
|
|
||||||
Preferences::setForUser($this->user, 'external_ip', $serverIP);
|
|
||||||
|
|
||||||
return new MessageBag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function hasApiKey(): bool
|
|
||||||
{
|
|
||||||
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key', false);
|
|
||||||
if (null === $apiKey) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (null === $apiKey->data) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (\strlen((string)$apiKey->data) === 64) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function hasServerIP(): bool
|
|
||||||
{
|
|
||||||
$serverIP = Preferences::getForUser($this->user, 'external_ip', false);
|
|
||||||
if (null === $serverIP) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (null === $serverIP->data) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (\strlen((string)$serverIP->data) > 6) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@ class FakePrerequisites implements PrerequisitesInterface
|
|||||||
/**
|
/**
|
||||||
* Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
* Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
||||||
*
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getView(): string
|
public function getView(): string
|
||||||
@@ -59,7 +60,7 @@ class FakePrerequisites implements PrerequisitesInterface
|
|||||||
}
|
}
|
||||||
$oldKey = (string)\request()->old('api_key');
|
$oldKey = (string)\request()->old('api_key');
|
||||||
if ($oldKey !== '') {
|
if ($oldKey !== '') {
|
||||||
$apiKey = \request()->old('api_key');
|
$apiKey = \request()->old('api_key'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
return ['api_key' => $apiKey];
|
return ['api_key' => $apiKey];
|
||||||
@@ -87,13 +88,13 @@ class FakePrerequisites implements PrerequisitesInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param array $data
|
||||||
*
|
*
|
||||||
* @return MessageBag
|
* @return MessageBag
|
||||||
*/
|
*/
|
||||||
public function storePrerequisites(Request $request): MessageBag
|
public function storePrerequisites(array $data): MessageBag
|
||||||
{
|
{
|
||||||
$apiKey = (string)$request->get('api_key');
|
$apiKey = $data['api_key'] ?? '';
|
||||||
$messageBag = new MessageBag();
|
$messageBag = new MessageBag();
|
||||||
if (32 !== \strlen($apiKey)) {
|
if (32 !== \strlen($apiKey)) {
|
||||||
$messageBag->add('api_key', 'API key must be 32 chars.');
|
$messageBag->add('api_key', 'API key must be 32 chars.');
|
||||||
|
@@ -34,17 +34,92 @@ use Illuminate\Support\MessageBag;
|
|||||||
*/
|
*/
|
||||||
class FilePrerequisites implements PrerequisitesInterface
|
class FilePrerequisites implements PrerequisitesInterface
|
||||||
{
|
{
|
||||||
/** @var User */
|
// /** @var User */
|
||||||
private $user;
|
// private $user;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
||||||
|
// *
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public function getView(): string
|
||||||
|
// {
|
||||||
|
// return '';
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns any values required for the prerequisites-view.
|
||||||
|
// *
|
||||||
|
// * @return array
|
||||||
|
// */
|
||||||
|
// public function getViewParameters(): array
|
||||||
|
// {
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns if this import method has any special prerequisites such as config
|
||||||
|
// * variables or other things. The only thing we verify is the presence of the API key. Everything else
|
||||||
|
// * tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
||||||
|
// *
|
||||||
|
// * True if prerequisites. False if not.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// *
|
||||||
|
// * @throws FireflyException
|
||||||
|
// */
|
||||||
|
// public function hasPrerequisites(): bool
|
||||||
|
// {
|
||||||
|
// if ($this->user->hasRole('demo')) {
|
||||||
|
// throw new FireflyException('Apologies, the demo user cannot import files.');
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Indicate if all prerequisites have been met.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// public function isComplete(): bool
|
||||||
|
// {
|
||||||
|
// // has no prerequisites, so always return true.
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Set the user for this Prerequisites-routine. Class is expected to implement and save this.
|
||||||
|
// *
|
||||||
|
// * @param User $user
|
||||||
|
// */
|
||||||
|
// public function setUser(User $user): void
|
||||||
|
// {
|
||||||
|
// $this->user = $user;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
||||||
|
// * If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
||||||
|
// *
|
||||||
|
// * @param Request $request
|
||||||
|
// *
|
||||||
|
// * @return MessageBag
|
||||||
|
// */
|
||||||
|
// public function storePrerequisites(Request $request): MessageBag
|
||||||
|
// {
|
||||||
|
// return new MessageBag;
|
||||||
|
// }
|
||||||
/**
|
/**
|
||||||
* Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
* Returns view name that allows user to fill in prerequisites.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getView(): string
|
public function getView(): string
|
||||||
{
|
{
|
||||||
return '';
|
// TODO: Implement getView() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,27 +129,8 @@ class FilePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function getViewParameters(): array
|
public function getViewParameters(): array
|
||||||
{
|
{
|
||||||
return [];
|
// TODO: Implement getViewParameters() method.
|
||||||
}
|
throw new NotImplementedException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if this import method has any special prerequisites such as config
|
|
||||||
* variables or other things. The only thing we verify is the presence of the API key. Everything else
|
|
||||||
* tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
|
||||||
*
|
|
||||||
* True if prerequisites. False if not.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*
|
|
||||||
* @throws FireflyException
|
|
||||||
*/
|
|
||||||
public function hasPrerequisites(): bool
|
|
||||||
{
|
|
||||||
if ($this->user->hasRole('demo')) {
|
|
||||||
throw new FireflyException('Apologies, the demo user cannot import files.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,8 +140,8 @@ class FilePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function isComplete(): bool
|
public function isComplete(): bool
|
||||||
{
|
{
|
||||||
// has no prerequisites, so always return true.
|
// TODO: Implement isComplete() method.
|
||||||
return true;
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,20 +151,22 @@ class FilePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function setUser(User $user): void
|
public function setUser(User $user): void
|
||||||
{
|
{
|
||||||
$this->user = $user;
|
// TODO: Implement setUser() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
* This method responds to the user's submission of an API key. Should do nothing but store the value.
|
||||||
* If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* Errors must be returned in the message bag under the field name they are requested by.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
*
|
*
|
||||||
* @return MessageBag
|
* @return MessageBag
|
||||||
*/
|
*/
|
||||||
public function storePrerequisites(Request $request): MessageBag
|
public function storePrerequisites(array $data): MessageBag
|
||||||
{
|
{
|
||||||
return new MessageBag;
|
// TODO: Implement storePrerequisites() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -64,9 +64,9 @@ interface PrerequisitesInterface
|
|||||||
*
|
*
|
||||||
* Errors must be returned in the message bag under the field name they are requested by.
|
* Errors must be returned in the message bag under the field name they are requested by.
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param array $data
|
||||||
*
|
*
|
||||||
* @return MessageBag
|
* @return MessageBag
|
||||||
*/
|
*/
|
||||||
public function storePrerequisites(Request $request): MessageBag;
|
public function storePrerequisites(array $data): MessageBag;
|
||||||
}
|
}
|
||||||
|
@@ -36,17 +36,168 @@ use Preferences;
|
|||||||
*/
|
*/
|
||||||
class SpectrePrerequisites implements PrerequisitesInterface
|
class SpectrePrerequisites implements PrerequisitesInterface
|
||||||
{
|
{
|
||||||
/** @var User */
|
// /** @var User */
|
||||||
private $user;
|
// private $user;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
||||||
|
// *
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public function getView(): string
|
||||||
|
// {
|
||||||
|
// return 'import.spectre.prerequisites';
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns any values required for the prerequisites-view.
|
||||||
|
// *
|
||||||
|
// * @return array
|
||||||
|
// */
|
||||||
|
// public function getViewParameters(): array
|
||||||
|
// {
|
||||||
|
// $publicKey = $this->getPublicKey();
|
||||||
|
// $subTitle = (string)trans('import.spectre_title');
|
||||||
|
// $subTitleIcon = 'fa-archive';
|
||||||
|
//
|
||||||
|
// return compact('publicKey', 'subTitle', 'subTitleIcon');
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns if this import method has any special prerequisites such as config
|
||||||
|
// * variables or other things. The only thing we verify is the presence of the API key. Everything else
|
||||||
|
// * tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// public function hasPrerequisites(): bool
|
||||||
|
// {
|
||||||
|
// $values = [
|
||||||
|
// Preferences::getForUser($this->user, 'spectre_app_id', false),
|
||||||
|
// Preferences::getForUser($this->user, 'spectre_secret', false),
|
||||||
|
// ];
|
||||||
|
// /** @var Preference $value */
|
||||||
|
// foreach ($values as $value) {
|
||||||
|
// if (false === $value->data || null === $value->data) {
|
||||||
|
// Log::info(sprintf('Config var "%s" is missing.', $value->name));
|
||||||
|
//
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// Log::debug('All prerequisites are here!');
|
||||||
|
//
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Indicate if all prerequisites have been met.
|
||||||
|
// *
|
||||||
|
// * @return bool
|
||||||
|
// */
|
||||||
|
// public function isComplete(): bool
|
||||||
|
// {
|
||||||
|
// // return true when user has set the App Id and the Spectre Secret.
|
||||||
|
// $values = [
|
||||||
|
// Preferences::getForUser($this->user, 'spectre_app_id', false),
|
||||||
|
// Preferences::getForUser($this->user, 'spectre_secret', false),
|
||||||
|
// ];
|
||||||
|
// $result = true;
|
||||||
|
// /** @var Preference $value */
|
||||||
|
// foreach ($values as $value) {
|
||||||
|
// if (false === $value->data || null === $value->data) {
|
||||||
|
// $result = false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return $result;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Set the user for this Prerequisites-routine. Class is expected to implement and save this.
|
||||||
|
// *
|
||||||
|
// * @param User $user
|
||||||
|
// */
|
||||||
|
// public function setUser(User $user): void
|
||||||
|
// {
|
||||||
|
// $this->user = $user;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
||||||
|
// * If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
||||||
|
// *
|
||||||
|
// * @param Request $request
|
||||||
|
// *
|
||||||
|
// * @return MessageBag
|
||||||
|
// */
|
||||||
|
// public function storePrerequisites(Request $request): MessageBag
|
||||||
|
// {
|
||||||
|
// Log::debug('Storing Spectre API keys..');
|
||||||
|
// Preferences::setForUser($this->user, 'spectre_app_id', $request->get('app_id'));
|
||||||
|
// Preferences::setForUser($this->user, 'spectre_secret', $request->get('secret'));
|
||||||
|
// Log::debug('Done!');
|
||||||
|
//
|
||||||
|
// return new MessageBag;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * This method creates a new public/private keypair for the user. This isn't really secure, since the key is generated on the fly with
|
||||||
|
// * no regards for HSM's, smart cards or other things. It would require some low level programming to get this right. But the private key
|
||||||
|
// * is stored encrypted in the database so it's something.
|
||||||
|
// */
|
||||||
|
// private function createKeyPair(): void
|
||||||
|
// {
|
||||||
|
// Log::debug('Generate new Spectre key pair for user.');
|
||||||
|
// $keyConfig = [
|
||||||
|
// 'digest_alg' => 'sha512',
|
||||||
|
// 'private_key_bits' => 2048,
|
||||||
|
// 'private_key_type' => OPENSSL_KEYTYPE_RSA,
|
||||||
|
// ];
|
||||||
|
// // Create the private and public key
|
||||||
|
// $res = openssl_pkey_new($keyConfig);
|
||||||
|
//
|
||||||
|
// // Extract the private key from $res to $privKey
|
||||||
|
// $privKey = '';
|
||||||
|
// openssl_pkey_export($res, $privKey);
|
||||||
|
//
|
||||||
|
// // Extract the public key from $res to $pubKey
|
||||||
|
// $pubKey = openssl_pkey_get_details($res);
|
||||||
|
//
|
||||||
|
// Preferences::setForUser($this->user, 'spectre_private_key', $privKey);
|
||||||
|
// Preferences::setForUser($this->user, 'spectre_public_key', $pubKey['key']);
|
||||||
|
// Log::debug('Created key pair');
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Get a public key from the users preferences.
|
||||||
|
// *
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// private function getPublicKey(): string
|
||||||
|
// {
|
||||||
|
// Log::debug('get public key');
|
||||||
|
// $preference = Preferences::getForUser($this->user, 'spectre_public_key', null);
|
||||||
|
// if (null === $preference) {
|
||||||
|
// Log::debug('public key is null');
|
||||||
|
// // create key pair
|
||||||
|
// $this->createKeyPair();
|
||||||
|
// }
|
||||||
|
// $preference = Preferences::getForUser($this->user, 'spectre_public_key', null);
|
||||||
|
// Log::debug('Return public key for user');
|
||||||
|
//
|
||||||
|
// return $preference->data;
|
||||||
|
// }
|
||||||
/**
|
/**
|
||||||
* Returns view name that allows user to fill in prerequisites. Currently asks for the API key.
|
* Returns view name that allows user to fill in prerequisites.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getView(): string
|
public function getView(): string
|
||||||
{
|
{
|
||||||
return 'import.spectre.prerequisites';
|
// TODO: Implement getView() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,37 +207,8 @@ class SpectrePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function getViewParameters(): array
|
public function getViewParameters(): array
|
||||||
{
|
{
|
||||||
$publicKey = $this->getPublicKey();
|
// TODO: Implement getViewParameters() method.
|
||||||
$subTitle = (string)trans('import.spectre_title');
|
throw new NotImplementedException;
|
||||||
$subTitleIcon = 'fa-archive';
|
|
||||||
|
|
||||||
return compact('publicKey', 'subTitle', 'subTitleIcon');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if this import method has any special prerequisites such as config
|
|
||||||
* variables or other things. The only thing we verify is the presence of the API key. Everything else
|
|
||||||
* tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function hasPrerequisites(): bool
|
|
||||||
{
|
|
||||||
$values = [
|
|
||||||
Preferences::getForUser($this->user, 'spectre_app_id', false),
|
|
||||||
Preferences::getForUser($this->user, 'spectre_secret', false),
|
|
||||||
];
|
|
||||||
/** @var Preference $value */
|
|
||||||
foreach ($values as $value) {
|
|
||||||
if (false === $value->data || null === $value->data) {
|
|
||||||
Log::info(sprintf('Config var "%s" is missing.', $value->name));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Log::debug('All prerequisites are here!');
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,20 +218,8 @@ class SpectrePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function isComplete(): bool
|
public function isComplete(): bool
|
||||||
{
|
{
|
||||||
// return true when user has set the App Id and the Spectre Secret.
|
// TODO: Implement isComplete() method.
|
||||||
$values = [
|
throw new NotImplementedException;
|
||||||
Preferences::getForUser($this->user, 'spectre_app_id', false),
|
|
||||||
Preferences::getForUser($this->user, 'spectre_secret', false),
|
|
||||||
];
|
|
||||||
$result = true;
|
|
||||||
/** @var Preference $value */
|
|
||||||
foreach ($values as $value) {
|
|
||||||
if (false === $value->data || null === $value->data) {
|
|
||||||
$result = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -119,74 +229,22 @@ class SpectrePrerequisites implements PrerequisitesInterface
|
|||||||
*/
|
*/
|
||||||
public function setUser(User $user): void
|
public function setUser(User $user): void
|
||||||
{
|
{
|
||||||
$this->user = $user;
|
// TODO: Implement setUser() method.
|
||||||
|
throw new NotImplementedException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device.
|
* This method responds to the user's submission of an API key. Should do nothing but store the value.
|
||||||
* If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly).
|
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* Errors must be returned in the message bag under the field name they are requested by.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
*
|
*
|
||||||
* @return MessageBag
|
* @return MessageBag
|
||||||
*/
|
*/
|
||||||
public function storePrerequisites(Request $request): MessageBag
|
public function storePrerequisites(array $data): MessageBag
|
||||||
{
|
{
|
||||||
Log::debug('Storing Spectre API keys..');
|
// TODO: Implement storePrerequisites() method.
|
||||||
Preferences::setForUser($this->user, 'spectre_app_id', $request->get('app_id'));
|
throw new NotImplementedException;
|
||||||
Preferences::setForUser($this->user, 'spectre_secret', $request->get('secret'));
|
|
||||||
Log::debug('Done!');
|
|
||||||
|
|
||||||
return new MessageBag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method creates a new public/private keypair for the user. This isn't really secure, since the key is generated on the fly with
|
|
||||||
* no regards for HSM's, smart cards or other things. It would require some low level programming to get this right. But the private key
|
|
||||||
* is stored encrypted in the database so it's something.
|
|
||||||
*/
|
|
||||||
private function createKeyPair(): void
|
|
||||||
{
|
|
||||||
Log::debug('Generate new Spectre key pair for user.');
|
|
||||||
$keyConfig = [
|
|
||||||
'digest_alg' => 'sha512',
|
|
||||||
'private_key_bits' => 2048,
|
|
||||||
'private_key_type' => OPENSSL_KEYTYPE_RSA,
|
|
||||||
];
|
|
||||||
// Create the private and public key
|
|
||||||
$res = openssl_pkey_new($keyConfig);
|
|
||||||
|
|
||||||
// Extract the private key from $res to $privKey
|
|
||||||
$privKey = '';
|
|
||||||
openssl_pkey_export($res, $privKey);
|
|
||||||
|
|
||||||
// Extract the public key from $res to $pubKey
|
|
||||||
$pubKey = openssl_pkey_get_details($res);
|
|
||||||
|
|
||||||
Preferences::setForUser($this->user, 'spectre_private_key', $privKey);
|
|
||||||
Preferences::setForUser($this->user, 'spectre_public_key', $pubKey['key']);
|
|
||||||
Log::debug('Created key pair');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a public key from the users preferences.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function getPublicKey(): string
|
|
||||||
{
|
|
||||||
Log::debug('get public key');
|
|
||||||
$preference = Preferences::getForUser($this->user, 'spectre_public_key', null);
|
|
||||||
if (null === $preference) {
|
|
||||||
Log::debug('public key is null');
|
|
||||||
// create key pair
|
|
||||||
$this->createKeyPair();
|
|
||||||
}
|
|
||||||
$preference = Preferences::getForUser($this->user, 'spectre_public_key', null);
|
|
||||||
Log::debug('Return public key for user');
|
|
||||||
|
|
||||||
return $preference->data;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,14 +65,15 @@ class FakeRoutine implements RoutineInterface
|
|||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in run() for fake routine with status: %s', $this->job->status));
|
Log::debug(sprintf('Now in run() for fake routine with status: %s', $this->job->status));
|
||||||
if ($this->job->status !== 'running') {
|
if ($this->job->status !== 'running') {
|
||||||
throw new FireflyException('This fake job should not be started.');
|
throw new FireflyException('This fake job should not be started.'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($this->job->stage) {
|
switch ($this->job->stage) {
|
||||||
default:
|
default:
|
||||||
throw new FireflyException(sprintf('Fake routine cannot handle stage "%s".', $this->job->stage));
|
throw new FireflyException(sprintf('Fake routine cannot handle stage "%s".', $this->job->stage)); // @codeCoverageIgnore
|
||||||
case 'new':
|
case 'new':
|
||||||
$handler = new StageNewHandler;
|
/** @var StageNewHandler $handler */
|
||||||
|
$handler = app(StageNewHandler::class);
|
||||||
$handler->run();
|
$handler->run();
|
||||||
$this->repository->setStage($this->job, 'ahoy');
|
$this->repository->setStage($this->job, 'ahoy');
|
||||||
// set job finished this step:
|
// set job finished this step:
|
||||||
@@ -80,13 +81,15 @@ class FakeRoutine implements RoutineInterface
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
case 'ahoy':
|
case 'ahoy':
|
||||||
$handler = new StageAhoyHandler;
|
/** @var StageAhoyHandler $handler */
|
||||||
|
$handler = app(StageAhoyHandler::class);
|
||||||
$handler->run();
|
$handler->run();
|
||||||
$this->repository->setStatus($this->job, 'need_job_config');
|
$this->repository->setStatus($this->job, 'need_job_config');
|
||||||
$this->repository->setStage($this->job, 'final');
|
$this->repository->setStage($this->job, 'final');
|
||||||
break;
|
break;
|
||||||
case 'final':
|
case 'final':
|
||||||
$handler = new StageFinalHandler;
|
/** @var StageFinalHandler $handler */
|
||||||
|
$handler = app(StageFinalHandler::class);
|
||||||
$handler->setJob($this->job);
|
$handler->setJob($this->job);
|
||||||
$transactions = $handler->getTransactions();
|
$transactions = $handler->getTransactions();
|
||||||
$this->repository->setStatus($this->job, 'provider_finished');
|
$this->repository->setStatus($this->job, 'provider_finished');
|
||||||
|
@@ -36,6 +36,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
public $row;
|
public $row;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getDescription(): string
|
public static function getDescription(): string
|
||||||
@@ -44,6 +45,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getName(): string
|
public static function getName(): string
|
||||||
@@ -81,7 +83,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
*
|
*
|
||||||
* @return bool true if the description is GEA/BEA-format, false otherwise
|
* @return bool true if the description is GEA/BEA-format, false otherwise
|
||||||
*/
|
*/
|
||||||
protected function parseABNAMRODescription()
|
protected function parseABNAMRODescription(): bool
|
||||||
{
|
{
|
||||||
// See if the current description is formatted in ABN AMRO format
|
// See if the current description is formatted in ABN AMRO format
|
||||||
if (preg_match('/ABN AMRO.{24} (.*)/', $this->row[7], $matches)) {
|
if (preg_match('/ABN AMRO.{24} (.*)/', $this->row[7], $matches)) {
|
||||||
@@ -99,7 +101,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
*
|
*
|
||||||
* @return bool true if the description is GEA/BEAformat, false otherwise
|
* @return bool true if the description is GEA/BEAformat, false otherwise
|
||||||
*/
|
*/
|
||||||
protected function parseGEABEADescription()
|
protected function parseGEABEADescription(): bool
|
||||||
{
|
{
|
||||||
// See if the current description is formatted in GEA/BEA format
|
// See if the current description is formatted in GEA/BEA format
|
||||||
if (preg_match('/([BG]EA) +(NR:[a-zA-Z:0-9]+) +([0-9.\/]+) +([^,]*)/', $this->row[7], $matches)) {
|
if (preg_match('/([BG]EA) +(NR:[a-zA-Z:0-9]+) +([0-9.\/]+) +([^,]*)/', $this->row[7], $matches)) {
|
||||||
@@ -124,7 +126,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
*
|
*
|
||||||
* @return bool true if the description is SEPA format, false otherwise
|
* @return bool true if the description is SEPA format, false otherwise
|
||||||
*/
|
*/
|
||||||
protected function parseSepaDescription()
|
protected function parseSepaDescription(): bool
|
||||||
{
|
{
|
||||||
// See if the current description is formatted as a SEPA plain description
|
// See if the current description is formatted as a SEPA plain description
|
||||||
if (preg_match('/^SEPA(.{28})/', $this->row[7], $matches)) {
|
if (preg_match('/^SEPA(.{28})/', $this->row[7], $matches)) {
|
||||||
@@ -178,7 +180,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
*
|
*
|
||||||
* @return bool true if the description is TRTP format, false otherwise
|
* @return bool true if the description is TRTP format, false otherwise
|
||||||
*/
|
*/
|
||||||
protected function parseTRTPDescription()
|
protected function parseTRTPDescription(): bool
|
||||||
{
|
{
|
||||||
// See if the current description is formatted in TRTP format
|
// See if the current description is formatted in TRTP format
|
||||||
if (preg_match_all('!\/([A-Z]{3,4})\/([^/]*)!', $this->row[7], $matches, PREG_SET_ORDER)) {
|
if (preg_match_all('!\/([A-Z]{3,4})\/([^/]*)!', $this->row[7], $matches, PREG_SET_ORDER)) {
|
||||||
@@ -196,7 +198,7 @@ class AbnAmroDescription implements SpecificInterface
|
|||||||
|
|
||||||
switch (strtoupper($key)) {
|
switch (strtoupper($key)) {
|
||||||
case 'NAME':
|
case 'NAME':
|
||||||
$this->row[8] = $name = $value;
|
$this->row[8] = $value;
|
||||||
break;
|
break;
|
||||||
case 'REMI':
|
case 'REMI':
|
||||||
$newDescription = $value;
|
$newDescription = $value;
|
||||||
|
@@ -38,6 +38,7 @@ class IngDescription implements SpecificInterface
|
|||||||
public $row;
|
public $row;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getDescription(): string
|
public static function getDescription(): string
|
||||||
@@ -46,6 +47,7 @@ class IngDescription implements SpecificInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getName(): string
|
public static function getName(): string
|
||||||
@@ -84,41 +86,29 @@ class IngDescription implements SpecificInterface
|
|||||||
/**
|
/**
|
||||||
* Add the Opposing name from cell 1 in the description for Betaalautomaten
|
* Add the Opposing name from cell 1 in the description for Betaalautomaten
|
||||||
* Otherwise the description is only: 'Pasvolgnr:<nr> <date> Transactie:<NR> Term:<nr>'.
|
* Otherwise the description is only: 'Pasvolgnr:<nr> <date> Transactie:<NR> Term:<nr>'.
|
||||||
*
|
|
||||||
* @return bool true
|
|
||||||
*/
|
*/
|
||||||
protected function addNameIngDescription()
|
protected function addNameIngDescription(): void
|
||||||
{
|
{
|
||||||
$this->row[8] = $this->row[1] . ' ' . $this->row[8];
|
$this->row[8] = $this->row[1] . ' ' . $this->row[8];
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove IBAN number out of the description
|
* Remove IBAN number out of the description
|
||||||
* Default description of Description is: Naam: <OPPOS NAME> Omschrijving: <DESCRIPTION> IBAN: <OPPOS IBAN NR>.
|
* Default description of Description is: Naam: <OPPOS NAME> Omschrijving: <DESCRIPTION> IBAN: <OPPOS IBAN NR>.
|
||||||
*
|
|
||||||
* @return bool true
|
|
||||||
*/
|
*/
|
||||||
protected function removeIBANIngDescription()
|
protected function removeIBANIngDescription(): void
|
||||||
{
|
{
|
||||||
// Try replace the iban number with nothing. The IBAN nr is found in the third row
|
// Try replace the iban number with nothing. The IBAN nr is found in the third row
|
||||||
$this->row[8] = preg_replace('/\sIBAN:\s' . $this->row[3] . '/', '', $this->row[8]);
|
$this->row[8] = preg_replace('/\sIBAN:\s' . $this->row[3] . '/', '', $this->row[8]);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove name from the description (Remove everything before the description incl the word 'Omschrijving' ).
|
* Remove name from the description (Remove everything before the description incl the word 'Omschrijving' ).
|
||||||
*
|
|
||||||
* @return bool true
|
|
||||||
*/
|
*/
|
||||||
protected function removeNameIngDescription()
|
protected function removeNameIngDescription(): void
|
||||||
{
|
{
|
||||||
// Try remove everything before the 'Omschrijving'
|
// Try remove everything before the 'Omschrijving'
|
||||||
$this->row[8] = preg_replace('/.+Omschrijving: /', '', $this->row[8]);
|
$this->row[8] = preg_replace('/.+Omschrijving: /', '', $this->row[8]);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,7 +117,7 @@ class IngDescription implements SpecificInterface
|
|||||||
private function copyDescriptionToOpposite(): void
|
private function copyDescriptionToOpposite(): void
|
||||||
{
|
{
|
||||||
$search = ['Naar Oranje Spaarrekening ', 'Afschrijvingen'];
|
$search = ['Naar Oranje Spaarrekening ', 'Afschrijvingen'];
|
||||||
if (0 === \strlen($this->row[3])) {
|
if ('' === (string)$this->row[3]) {
|
||||||
$this->row[3] = trim(str_ireplace($search, '', $this->row[8]));
|
$this->row[3] = trim(str_ireplace($search, '', $this->row[8]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@ namespace FireflyIII\Import\Specifics;
|
|||||||
class PresidentsChoice implements SpecificInterface
|
class PresidentsChoice implements SpecificInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getDescription(): string
|
public static function getDescription(): string
|
||||||
@@ -36,6 +37,7 @@ class PresidentsChoice implements SpecificInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getName(): string
|
public static function getName(): string
|
||||||
|
@@ -1,688 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* FileConfiguratorTest.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\Import\Configuration;
|
|
||||||
|
|
||||||
use FireflyIII\Import\Configuration\FileConfigurator;
|
|
||||||
use FireflyIII\Models\ImportJob;
|
|
||||||
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
|
||||||
use FireflyIII\Support\Import\Configuration\File\Initial;
|
|
||||||
use FireflyIII\Support\Import\Configuration\File\Map;
|
|
||||||
use FireflyIII\Support\Import\Configuration\File\Roles;
|
|
||||||
use FireflyIII\Support\Import\Configuration\File\UploadConfig;
|
|
||||||
use Mockery;
|
|
||||||
use Tests\TestCase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class FileConfiguratorTest
|
|
||||||
*/
|
|
||||||
class FileConfiguratorTest extends TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::setJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfig
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfigurationClass
|
|
||||||
*/
|
|
||||||
public function testConfigureJobInitial()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'initial'];
|
|
||||||
$data = ['some' => 'array'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repository
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
|
|
||||||
// assert that new initial is created:
|
|
||||||
$processor = $this->mock(Initial::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('storeConfiguration')->withArgs([$data])->once()->andReturn(true);
|
|
||||||
$processor->shouldReceive('getWarningMessage')->andReturn('')->once();
|
|
||||||
|
|
||||||
// config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->configureJob($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfigurationClass
|
|
||||||
*/
|
|
||||||
public function testConfigureJobMap()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'map'];
|
|
||||||
$data = ['some' => 'array'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repository
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Roles is created:
|
|
||||||
$processor = $this->mock(Map::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('storeConfiguration')->withArgs([$data])->once()->andReturn(true);
|
|
||||||
$processor->shouldReceive('getWarningMessage')->andReturn('')->once();
|
|
||||||
|
|
||||||
// config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->configureJob($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should throw a FireflyException when $job is null.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::__construct
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
*/
|
|
||||||
public function testConfigureJobNoJob()
|
|
||||||
{
|
|
||||||
// config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->configureJob([]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfigurationClass
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage Cannot handle job stage "ready" in getConfigurationClass().
|
|
||||||
*/
|
|
||||||
public function testConfigureJobReady()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'ready'];
|
|
||||||
$data = ['some' => 'array'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->configureJob($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfigurationClass
|
|
||||||
*/
|
|
||||||
public function testConfigureJobRoles()
|
|
||||||
{
|
|
||||||
$config = ['stage' => 'roles'];
|
|
||||||
$data = ['some' => 'array'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Roles is created:
|
|
||||||
$processor = $this->mock(Roles::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('storeConfiguration')->withArgs([$data])->once()->andReturn(true);
|
|
||||||
$processor->shouldReceive('getWarningMessage')->andReturn('')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->configureJob($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::configureJob
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getConfigurationClass
|
|
||||||
*/
|
|
||||||
public function testConfigureJobUploadConfig()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'upload-config'];
|
|
||||||
$data = ['some' => 'array'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new UploadConfig is created:
|
|
||||||
$processor = $this->mock(UploadConfig::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('storeConfiguration')->withArgs([$data])->once()->andReturn(true);
|
|
||||||
$processor->shouldReceive('getWarningMessage')->andReturn('')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->configureJob($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
*/
|
|
||||||
public function testGetNextDataInitial()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'initial'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Initial is created:
|
|
||||||
$processor = $this->mock(Initial::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('getData')->once();
|
|
||||||
|
|
||||||
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should throw a FireflyException when $job is null.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
*/
|
|
||||||
public function testGetNextDataNoJob()
|
|
||||||
{
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
*/
|
|
||||||
public function testGetNextDataUploadConfig()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'upload-config'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Initial is created:
|
|
||||||
$processor = $this->mock(UploadConfig::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('getData')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage Cannot handle job stage "ksksjje" in getConfigurationClass().
|
|
||||||
*/
|
|
||||||
public function testGetNextDataUploadInvalid()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'ksksjje'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// should throw error
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
*/
|
|
||||||
public function testGetNextDataUploadMap()
|
|
||||||
{
|
|
||||||
// data:
|
|
||||||
$config = ['stage' => 'map'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Initial is created:
|
|
||||||
$processor = $this->mock(Map::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('getData')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage Cannot handle job stage "ready" in getConfigurationClass().
|
|
||||||
*/
|
|
||||||
public function testGetNextDataUploadReady()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'ready'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextData
|
|
||||||
*/
|
|
||||||
public function testGetNextDataUploadRoles()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'roles'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// assert that new Initial is created:
|
|
||||||
$processor = $this->mock(Roles::class);
|
|
||||||
$processor->shouldReceive('setJob')->withArgs([$job])->once();
|
|
||||||
$processor->shouldReceive('getData')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
*/
|
|
||||||
public function testGetNextViewInitial()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'initial'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$view = $configurator->getNextView();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertEquals('import.file.initial', $view);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage No view for stage "slkds903ms90k"
|
|
||||||
*/
|
|
||||||
public function testGetNextViewInvalid()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'slkds903ms90k'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextView();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
*/
|
|
||||||
public function testGetNextViewMap()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'map'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$view = $configurator->getNextView();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertEquals('import.file.map', $view);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should throw a FireflyException when $job is null.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
*/
|
|
||||||
public function testGetNextViewNoJob()
|
|
||||||
{
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->getNextView();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage No view for stage "ready"
|
|
||||||
*/
|
|
||||||
public function testGetNextViewReady()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'ready'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run configx§
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$configurator->getNextView();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
*/
|
|
||||||
public function testGetNextViewRoles()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'roles'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$view = $configurator->getNextView();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertEquals('import.file.roles', $view);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getNextView
|
|
||||||
*/
|
|
||||||
public function testGetNextViewUploadConfig()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'upload-config'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$view = $configurator->getNextView();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertEquals('import.file.upload-config', $view);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getWarningMessage
|
|
||||||
*/
|
|
||||||
public function testGetWarningMessage()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'upload-config'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->once();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$warning = $configurator->getWarningMessage();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertEquals('', $warning);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should throw a FireflyException when $job is null.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::getWarningMessage
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
*/
|
|
||||||
public function testGetWarningMessageNoJob()
|
|
||||||
{
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->getWarningMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::isJobConfigured
|
|
||||||
*/
|
|
||||||
public function testIsJobConfiguredFalse()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'upload-config'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$result = $configurator->isJobConfigured();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertFalse($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should throw a FireflyException when $job is null.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::isJobConfigured
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
*/
|
|
||||||
public function testIsJobConfiguredNoJob()
|
|
||||||
{
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->isJobConfigured();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Configuration\FileConfigurator::isJobConfigured
|
|
||||||
*/
|
|
||||||
public function testIsJobConfiguredTrue()
|
|
||||||
{
|
|
||||||
// data
|
|
||||||
$config = ['stage' => 'ready'];
|
|
||||||
$extended = ['steps' => 0, 'done' => 0];
|
|
||||||
$job = $this->getJob($config);
|
|
||||||
|
|
||||||
// mock repos
|
|
||||||
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->withArgs([Mockery::any()])->once();
|
|
||||||
$repository->shouldReceive('getConfiguration')->andReturn($config)->twice();
|
|
||||||
$repository->shouldReceive('setConfiguration')->once();
|
|
||||||
$repository->shouldReceive('getExtendedStatus')->andReturn($extended)->once();
|
|
||||||
$repository->shouldReceive('setExtendedStatus')->once();
|
|
||||||
|
|
||||||
// run config
|
|
||||||
$configurator = new FileConfigurator();
|
|
||||||
$configurator->setJob($job);
|
|
||||||
$result = $configurator->isJobConfigured();
|
|
||||||
|
|
||||||
// test
|
|
||||||
$this->assertTrue($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $config
|
|
||||||
*
|
|
||||||
* @return ImportJob
|
|
||||||
*/
|
|
||||||
protected function getJob(array $config): ImportJob
|
|
||||||
{
|
|
||||||
$job = new ImportJob;
|
|
||||||
$job->file_type = 'file';
|
|
||||||
$job->status = 'new';
|
|
||||||
$job->key = 'x' . random_int(1, 100000);
|
|
||||||
$job->user()->associate($this->user());
|
|
||||||
$job->configuration = $config;
|
|
||||||
|
|
||||||
return $job;
|
|
||||||
}
|
|
||||||
}
|
|
593
tests/Unit/Import/JobConfiguration/FakeJobConfigurationTest.php
Normal file
593
tests/Unit/Import/JobConfiguration/FakeJobConfigurationTest.php
Normal file
@@ -0,0 +1,593 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FakeJobConfigurationTest.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\Import\JobConfiguration;
|
||||||
|
|
||||||
|
use FireflyIII\Import\JobConfiguration\FakeJobConfiguration;
|
||||||
|
use FireflyIII\Models\ImportJob;
|
||||||
|
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
||||||
|
use Mockery;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FakeJobConfigurationTest
|
||||||
|
*/
|
||||||
|
class FakeJobConfigurationTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* No config, job is new.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCC(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'A_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertFalse($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No config, job is not new.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCAlbumFalse(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'B_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'needs_config';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertFalse($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job only says to apply rules.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCApplyRules(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'C_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [
|
||||||
|
'apply-rules' => true,
|
||||||
|
];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertFalse($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job has album but wrong one.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCBadAlbum(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'D_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'config';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [
|
||||||
|
'song' => 'golden years',
|
||||||
|
'artist' => 'david bowie',
|
||||||
|
'album' => 'some album',
|
||||||
|
'apply-rules' => true,
|
||||||
|
];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertFalse($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job has album + song, but bad content.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCBadInfo(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'E_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [
|
||||||
|
'song' => 'some song',
|
||||||
|
'artist' => 'david bowie',
|
||||||
|
'apply-rules' => true,
|
||||||
|
];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertFalse($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job has correct album
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCGoodAlbum(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'f_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'config';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [
|
||||||
|
'song' => 'golden years',
|
||||||
|
'artist' => 'david bowie',
|
||||||
|
'album' => 'station to station',
|
||||||
|
'apply-rules' => true,
|
||||||
|
];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertTrue($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Job has correct content for "new"!
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testCCGoodNewInfo(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'g_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [
|
||||||
|
'song' => 'golden years',
|
||||||
|
'artist' => 'david bowie',
|
||||||
|
'apply-rules' => true,
|
||||||
|
];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// should be false:
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$this->assertTrue($configurator->configurationComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply rules with submitted "false"
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobARFalse(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'h_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['apply_rules' => 0];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), ['apply-rules' => false]])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply rules with submitted "false"
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobARTrue(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'i_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['apply_rules' => 1];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), ['apply-rules' => true]])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with bad song.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobBadAlbum(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'j_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['album' => 'Station to Bowie'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), []])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with bad artist.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobBadArtist(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'k_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['artist' => 'DaViD BoWXXXXXiE'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), []])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with bad song.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobBadSong(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'l_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['song' => 'Golden Bowie'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), []])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with good album.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobGoodAlbum(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'm_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['album' => 'Station to Station'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), ['album' => 'station to station']])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with good artist.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobGoodArtist(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'n_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['artist' => 'DaViD BoWiE'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), ['artist' => 'david bowie']])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit job with good song.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testConfigureJobGoodSong(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'o_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock repository:
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// data to submit:
|
||||||
|
$data = ['song' => 'Golden Years'];
|
||||||
|
|
||||||
|
// expect the config to update:
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setConfiguration')
|
||||||
|
->withArgs([Mockery::any(), ['song' => 'golden years']])->once();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$messages = $configurator->configureJob($data);
|
||||||
|
$this->assertTrue($messages->has('some_key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Have rules, have artist, have song, must ask album
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testGetNextViewAlbum(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'p_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'not_new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = ['apply-rules' => false, 'artist' => 'david bowie', 'song' => 'golden years'];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$view = $configurator->getNextView();
|
||||||
|
$this->assertEquals('import.fake.enter-album', $view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Have rules, must ask artist
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testGetNextViewArtist(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'p_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = ['apply-rules' => false];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$view = $configurator->getNextView();
|
||||||
|
$this->assertEquals('import.fake.enter-artist', $view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* With empty config, should return view for rules.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testGetNextViewRules(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'p_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$view = $configurator->getNextView();
|
||||||
|
$this->assertEquals('import.fake.apply-rules', $view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Have rules, have artist, must ask song
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\JobConfiguration\FakeJobConfiguration
|
||||||
|
*/
|
||||||
|
public function testGetNextViewSong(): void
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'p_unit_' . random_int(1, 1000);
|
||||||
|
$job->status = 'new';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = ['apply-rules' => false, 'artist' => 'david bowie'];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// call configuration
|
||||||
|
$configurator = new FakeJobConfiguration;
|
||||||
|
$configurator->setJob($job);
|
||||||
|
$view = $configurator->getNextView();
|
||||||
|
$this->assertEquals('import.fake.enter-song', $view);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,127 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* ImportAccountTest.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\Import\Object;
|
|
||||||
|
|
||||||
use FireflyIII\Import\Object\ImportAccount;
|
|
||||||
use FireflyIII\Models\Account;
|
|
||||||
use FireflyIII\Models\AccountType;
|
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
|
||||||
|
|
||||||
use Mockery;
|
|
||||||
use Tests\TestCase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class ImportAccountTest
|
|
||||||
*/
|
|
||||||
class ImportAccountTest extends TestCase
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should error because it requires a default asset account.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Object\ImportAccount
|
|
||||||
*/
|
|
||||||
public function testBasic()
|
|
||||||
{
|
|
||||||
// mock stuff
|
|
||||||
$repository = $this->mock(AccountRepositoryInterface::class);
|
|
||||||
$accountType = AccountType::where('type', AccountType::ASSET)->first();
|
|
||||||
$account = Account::find(1);
|
|
||||||
|
|
||||||
// mock calls:
|
|
||||||
$repository->shouldReceive('setUser')->once()->withArgs([Mockery::any()]);
|
|
||||||
$repository->shouldReceive('getAccountType')->twice()->withArgs([AccountType::ASSET])->andReturn($accountType);
|
|
||||||
//$repository->shouldReceive('getAccountsByType')->twice()->withArgs([[AccountType::ASSET]])->andReturn(new Collection());
|
|
||||||
$repository->shouldReceive('findNull')->once()->withArgs([1])->andReturn($account);
|
|
||||||
|
|
||||||
// create import account.
|
|
||||||
$importAccount = new ImportAccount;
|
|
||||||
$importAccount->setUser($this->user());
|
|
||||||
$importAccount->setDefaultAccountId(1);
|
|
||||||
$found = $importAccount->getAccount();
|
|
||||||
$this->assertEquals(1, $found->id);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should error because it requires a default asset account.
|
|
||||||
*
|
|
||||||
* @covers \FireflyIII\Import\Object\ImportAccount
|
|
||||||
*/
|
|
||||||
public function testEmptyMappingAccountId()
|
|
||||||
{
|
|
||||||
// mock stuff
|
|
||||||
$repository = $this->mock(AccountRepositoryInterface::class);
|
|
||||||
$accountType = AccountType::where('type', AccountType::ASSET)->first();
|
|
||||||
$account = Account::find(1);
|
|
||||||
|
|
||||||
// mock calls:
|
|
||||||
$repository->shouldReceive('setUser')->once()->withArgs([Mockery::any()]);
|
|
||||||
$repository->shouldReceive('getAccountType')->once()->withArgs([AccountType::ASSET])->andReturn($accountType);
|
|
||||||
|
|
||||||
// create import account.
|
|
||||||
$importAccount = new ImportAccount;
|
|
||||||
$importAccount->setUser($this->user());
|
|
||||||
$importAccount->setDefaultAccountId(1);
|
|
||||||
|
|
||||||
// add an account id:
|
|
||||||
$accountId = [
|
|
||||||
'role' => 'account-id',
|
|
||||||
'mapped' => null,
|
|
||||||
'value' => 2,
|
|
||||||
];
|
|
||||||
$importAccount->setAccountId($accountId);
|
|
||||||
|
|
||||||
|
|
||||||
$found = $importAccount->getAccount();
|
|
||||||
$this->assertEquals(2, $found->id);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Object\ImportAccount
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage ImportAccount cannot continue without a default account to fall back on.
|
|
||||||
*/
|
|
||||||
public function testNoAccount()
|
|
||||||
{
|
|
||||||
$repository = $this->mock(AccountRepositoryInterface::class);
|
|
||||||
$repository->shouldReceive('setUser')->once()->withArgs([Mockery::any()]);
|
|
||||||
$importAccount = new ImportAccount;
|
|
||||||
$importAccount->setUser($this->user());
|
|
||||||
$importAccount->getAccount();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \FireflyIII\Import\Object\ImportAccount
|
|
||||||
* @expectedException \FireflyIII\Exceptions\FireflyException
|
|
||||||
* @expectedExceptionMessage ImportAccount cannot continue without user.
|
|
||||||
*/
|
|
||||||
public function testNoUser()
|
|
||||||
{
|
|
||||||
$this->mock(AccountRepositoryInterface::class);
|
|
||||||
$importAccount = new ImportAccount;
|
|
||||||
$importAccount->getAccount();
|
|
||||||
}
|
|
||||||
}
|
|
174
tests/Unit/Import/Prerequisites/FakePrerequisitesTest.php
Normal file
174
tests/Unit/Import/Prerequisites/FakePrerequisitesTest.php
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FakePrerequisitesTest.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\Import\Prerequisites;
|
||||||
|
|
||||||
|
|
||||||
|
use FireflyIII\Import\Prerequisites\FakePrerequisites;
|
||||||
|
use FireflyIII\Models\Preference;
|
||||||
|
use Mockery;
|
||||||
|
use Preferences;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FakePrerequisitesTest
|
||||||
|
*/
|
||||||
|
class FakePrerequisitesTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Bad API key length in preferences
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testGetViewParametersBadLength(): void
|
||||||
|
{
|
||||||
|
// API key should be empty:
|
||||||
|
$apiPref = new Preference;
|
||||||
|
$apiPref->data = 'abc';
|
||||||
|
|
||||||
|
Preferences::shouldReceive('getForUser')
|
||||||
|
->withArgs([Mockery::any(), 'fake_api_key', false])->once()
|
||||||
|
->andReturn($apiPref);
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$result = $object->getViewParameters();
|
||||||
|
$this->assertEquals(['api_key' => ''], $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No API key in preference.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testGetViewParametersDataNull(): void
|
||||||
|
{
|
||||||
|
// API key should be empty:
|
||||||
|
$apiPref = new Preference;
|
||||||
|
$apiPref->data = null;
|
||||||
|
|
||||||
|
Preferences::shouldReceive('getForUser')
|
||||||
|
->withArgs([Mockery::any(), 'fake_api_key', false])->once()
|
||||||
|
->andReturn($apiPref);
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$result = $object->getViewParameters();
|
||||||
|
$this->assertEquals(['api_key' => ''], $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Good API key length in preferences
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testGetViewParametersGoodLength(): void
|
||||||
|
{
|
||||||
|
// API key should be empty:
|
||||||
|
$apiPref = new Preference;
|
||||||
|
$apiPref->data = '123456789012345678901234567890AA';
|
||||||
|
|
||||||
|
Preferences::shouldReceive('getForUser')
|
||||||
|
->withArgs([Mockery::any(), 'fake_api_key', false])->twice()
|
||||||
|
->andReturn($apiPref);
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$result = $object->getViewParameters();
|
||||||
|
$this->assertEquals(['api_key' => '123456789012345678901234567890AA'], $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No preference at all.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testGetViewParametersPrefNull(): void
|
||||||
|
{
|
||||||
|
Preferences::shouldReceive('getForUser')
|
||||||
|
->withArgs([Mockery::any(), 'fake_api_key', false])->once()
|
||||||
|
->andReturn(null);
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$result = $object->getViewParameters();
|
||||||
|
$this->assertEquals(['api_key' => ''], $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Also test hasApiKey but that one is covered.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testIsComplete(): void
|
||||||
|
{
|
||||||
|
// API key should be empty:
|
||||||
|
$apiPref = new Preference;
|
||||||
|
$apiPref->data = null;
|
||||||
|
|
||||||
|
Preferences::shouldReceive('getForUser')
|
||||||
|
->withArgs([Mockery::any(), 'fake_api_key', false])->once()
|
||||||
|
->andReturn($apiPref);
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$this->assertFalse($object->isComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Also test hasApiKey but that one is covered.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testStorePrerequisitesBad(): void
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'api_key' => 'Hallo',
|
||||||
|
];
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$messages = $object->storePrerequisites($data);
|
||||||
|
$this->assertCount(1, $messages);
|
||||||
|
$this->assertEquals('API key must be 32 chars.', $messages->first());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Also test hasApiKey but that one is covered.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Prerequisites\FakePrerequisites
|
||||||
|
*/
|
||||||
|
public function testStorePrerequisitesGood(): void
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'api_key' => '123456789012345678901234567890AA',
|
||||||
|
];
|
||||||
|
|
||||||
|
Preferences::shouldReceive('setForUser')->withArgs([Mockery::any(), 'fake_api_key', '123456789012345678901234567890AA'])->once();
|
||||||
|
|
||||||
|
$object = new FakePrerequisites();
|
||||||
|
$object->setUser($this->user());
|
||||||
|
$messages = $object->storePrerequisites($data);
|
||||||
|
$this->assertCount(0, $messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
147
tests/Unit/Import/Routine/FakeRoutineTest.php
Normal file
147
tests/Unit/Import/Routine/FakeRoutineTest.php
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FakeRoutineTest.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\Import\Routine;
|
||||||
|
|
||||||
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
|
use FireflyIII\Import\Routine\FakeRoutine;
|
||||||
|
use FireflyIII\Models\ImportJob;
|
||||||
|
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Import\Routine\Fake\StageAhoyHandler;
|
||||||
|
use FireflyIII\Support\Import\Routine\Fake\StageFinalHandler;
|
||||||
|
use FireflyIII\Support\Import\Routine\Fake\StageNewHandler;
|
||||||
|
use Mockery;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FakeRoutineTest
|
||||||
|
*/
|
||||||
|
class FakeRoutineTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Routine\FakeRoutine
|
||||||
|
*/
|
||||||
|
public function testRunAhoy()
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'a_route_' . random_int(1, 1000);
|
||||||
|
$job->status = 'running';
|
||||||
|
$job->stage = 'ahoy';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock
|
||||||
|
$handler = $this->mock(StageAhoyHandler::class);
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// calls
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setStatus')->withArgs([Mockery::any(), 'need_job_config'])->once();
|
||||||
|
$repository->shouldReceive('setStage')->withArgs([Mockery::any(), 'final'])->once();
|
||||||
|
$handler->shouldReceive('run')->once();
|
||||||
|
|
||||||
|
|
||||||
|
$routine = new FakeRoutine;
|
||||||
|
$routine->setJob($job);
|
||||||
|
try {
|
||||||
|
$routine->run();
|
||||||
|
} catch (FireflyException $e) {
|
||||||
|
$this->assertTrue(false, $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Routine\FakeRoutine
|
||||||
|
*/
|
||||||
|
public function testRunFinal()
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'a_route_' . random_int(1, 1000);
|
||||||
|
$job->status = 'running';
|
||||||
|
$job->stage = 'final';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock
|
||||||
|
$handler = $this->mock(StageFinalHandler::class);
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// calls
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setStatus')->withArgs([Mockery::any(), 'provider_finished'])->once();
|
||||||
|
$repository->shouldReceive('setStage')->withArgs([Mockery::any(), 'final'])->once();
|
||||||
|
$repository->shouldReceive('setTransactions')->withArgs([Mockery::any(), []])->once();
|
||||||
|
$handler->shouldReceive('getTransactions')->once()->andReturn([]);
|
||||||
|
$handler->shouldReceive('setJob')->once();
|
||||||
|
|
||||||
|
$routine = new FakeRoutine;
|
||||||
|
$routine->setJob($job);
|
||||||
|
try {
|
||||||
|
$routine->run();
|
||||||
|
} catch (FireflyException $e) {
|
||||||
|
$this->assertTrue(false, $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Routine\FakeRoutine
|
||||||
|
*/
|
||||||
|
public function testRunNew()
|
||||||
|
{
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->user_id = $this->user()->id;
|
||||||
|
$job->key = 'a_route_' . random_int(1, 1000);
|
||||||
|
$job->status = 'running';
|
||||||
|
$job->stage = 'new';
|
||||||
|
$job->provider = 'fake';
|
||||||
|
$job->file_type = '';
|
||||||
|
$job->configuration = [];
|
||||||
|
$job->save();
|
||||||
|
|
||||||
|
// mock
|
||||||
|
$handler = $this->mock(StageNewHandler::class);
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
|
||||||
|
// calls
|
||||||
|
$repository->shouldReceive('setUser')->once();
|
||||||
|
$repository->shouldReceive('setStage')->withArgs([Mockery::any(), 'ahoy'])->once();
|
||||||
|
$repository->shouldReceive('setStatus')->withArgs([Mockery::any(), 'ready_to_run'])->once();
|
||||||
|
$handler->shouldReceive('run')->once();
|
||||||
|
|
||||||
|
|
||||||
|
$routine = new FakeRoutine;
|
||||||
|
$routine->setJob($job);
|
||||||
|
try {
|
||||||
|
$routine->run();
|
||||||
|
} catch (FireflyException $e) {
|
||||||
|
$this->assertTrue(false, $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
168
tests/Unit/Import/Specifics/AbnAmroDescriptionTest.php
Normal file
168
tests/Unit/Import/Specifics/AbnAmroDescriptionTest.php
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* AbnAmroDescriptionTest.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\Import\Specifics;
|
||||||
|
|
||||||
|
|
||||||
|
use FireflyIII\Import\Specifics\AbnAmroDescription;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AbnAmroDescriptionTest
|
||||||
|
*/
|
||||||
|
class AbnAmroDescriptionTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Should return the exact same array.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testEmptyRow(): void
|
||||||
|
{
|
||||||
|
$row = [1, 2, 3, 4];
|
||||||
|
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals($row, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data that cannot be parsed.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testParseABN(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'ABN AMRO 12345678901234567890ABC SomeOtherDescr', ''];
|
||||||
|
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('SomeOtherDescr', $result[7]);
|
||||||
|
$this->assertEquals('ABN AMRO', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GEA
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testParseGea(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'BEA: GEA NR:00AJ01 31.01.01/19.54 Van HarenSchoenen132 UDE,PAS333', ''];
|
||||||
|
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Van HarenSchoenen132 UDE', $result[8]);
|
||||||
|
$this->assertEquals('GEA Van HarenSchoenen132 UDE', $result[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gea bea
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testParseGeaBea(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'BEA: BEA NR:00AJ01 31.01.01/19.54 Van HarenSchoenen132 UDE,PAS333', ''];
|
||||||
|
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Van HarenSchoenen132 UDE', $result[8]);
|
||||||
|
$this->assertEquals('Van HarenSchoenen132 UDE', $result[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data that cannot be parsed.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testParseUnknown(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'Blabla', ''];
|
||||||
|
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Unknown', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic SEPA data.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testSepaBasic(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'SEPA PLAIN: SEPA iDEAL IBAN: NL12RABO0121212212 BIC: RABONL2U Naam: Silver Ocean B.V. Omschrijving: 1232138 1232131233 412321 iBOOD.com iBOOD.com B.V. Kenmerk: 12-12-2014 21:03 002000 0213123238', '',''];
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('1232138 1232131233 412321 iBOOD.com iBOOD.com B.V.', $result[7]);
|
||||||
|
$this->assertEquals('Silver Ocean B.V.', $result[8]);
|
||||||
|
$this->assertEquals('NL12RABO0121212212', $result[9]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic SEPA data.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testSepaBasicNoDescription(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, 'SEPA PLAIN: SEPA iDEAL IBAN: NL12RABO0121212212 BIC: RABONL2U Naam: Silver Ocean B.V. Omschrijving: Kenmerk: 12-12-2014 21:03 002000 0213123238', '',''];
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals(' PLAIN: SEPA iDEAL - Silver Ocean B.V. (12-12-2014)', $result[7]);
|
||||||
|
$this->assertEquals('Silver Ocean B.V.', $result[8]);
|
||||||
|
$this->assertEquals('NL12RABO0121212212', $result[9]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic TRTP data.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testTRTPBasic(): void {
|
||||||
|
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, '/TRTP/SEPA OVERBOEKING/IBAN/NL23ABNA0000000000/BIC/ABNANL2A/NAME/baasd dsdsT CJ/REMI/Nullijn/EREF/NOTPROVIDED', '',''];
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Nullijn', $result[7]);
|
||||||
|
$this->assertEquals('baasd dsdsT CJ', $result[8]);
|
||||||
|
$this->assertEquals('NL23ABNA0000000000', $result[9]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Basic TRTP data with empty description
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\AbnAmroDescription
|
||||||
|
*/
|
||||||
|
public function testTRTPEmptyDescr(): void {
|
||||||
|
|
||||||
|
$row = [0, 1, 2, 3, 4, 5, 6, '/TRTP/SEPA OVERBOEKING/IBAN/NL23ABNA0000000000/BIC/ABNANL2A/NAME/baasd dsdsT CJ/REMI//EREF/NOTPROVIDED', '',''];
|
||||||
|
$parser = new AbnAmroDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('SEPA OVERBOEKING - (NOTPROVIDED)', $result[7]);
|
||||||
|
$this->assertEquals('baasd dsdsT CJ', $result[8]);
|
||||||
|
$this->assertEquals('NL23ABNA0000000000', $result[9]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
138
tests/Unit/Import/Specifics/IngDescriptionTest.php
Normal file
138
tests/Unit/Import/Specifics/IngDescriptionTest.php
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* IngDescriptionTest.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\Import\Specifics;
|
||||||
|
|
||||||
|
|
||||||
|
use FireflyIII\Import\Specifics\IngDescription;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class IngDescriptionTest
|
||||||
|
*/
|
||||||
|
class IngDescriptionTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Try if the IBAN is removed in GT transactions
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunGTRemoveIban(): void
|
||||||
|
{
|
||||||
|
$iban = 'NL66INGB0665877351';
|
||||||
|
$row = [0, 1, 2, $iban, 'GT', 5, 6, 7, 'Should be removed IBAN: ' . $iban, 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Should be removed', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try if the IBAN is removed in OV transactions
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunOVRemoveIban(): void
|
||||||
|
{
|
||||||
|
$iban = 'NL66INGB0665877351';
|
||||||
|
$row = [0, 1, 2, $iban, 'OV', 5, 6, 7, 'Should be removed IBAN: ' . $iban, 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Should be removed', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try if the IBAN is removed in IC transactions
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunICRemoveIban(): void
|
||||||
|
{
|
||||||
|
$iban = 'NL66INGB0665877351';
|
||||||
|
$row = [0, 1, 2, $iban, 'IC', 5, 6, 7, 'Should be removed IBAN: ' . $iban, 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Should be removed', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty description? Use "tegenrekening".
|
||||||
|
* Remove specific fields.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunEmptyDescr(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, '', 'GT', 5, 6, 7, 'Naar Oranje Spaarrekening Bla bla', 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Bla bla', $result[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test changes to BA row.
|
||||||
|
*
|
||||||
|
* Remove specific fields.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunBABasic(): void
|
||||||
|
{
|
||||||
|
$row = [0, 'XX', 2, '', 'BA', 5, 6, 7, 'XX', 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('XX XX', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See if the description is removed
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunGTRemoveDescr(): void
|
||||||
|
{
|
||||||
|
$iban = 'NL66INGB0665877351';
|
||||||
|
$row = [0, 1, 2, $iban, 'GT', 5, 6, 7, 'Bla bla bla Omschrijving: Should be removed IBAN: ' . $iban, 9, 10];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('Should be removed', $result[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Specifics\IngDescription
|
||||||
|
*/
|
||||||
|
public function testRunShortArray(): void
|
||||||
|
{
|
||||||
|
$row = [0, 1, 2, 3];
|
||||||
|
|
||||||
|
$parser = new IngDescription;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
|
||||||
|
$this->assertEquals($row, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
61
tests/Unit/Import/Specifics/PresidentsChoiceTest.php
Normal file
61
tests/Unit/Import/Specifics/PresidentsChoiceTest.php
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PresidentsChoiceTest.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\Import\Specifics;
|
||||||
|
|
||||||
|
|
||||||
|
use FireflyIII\Import\Specifics\PresidentsChoice;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PresidentsChoiceTest
|
||||||
|
*/
|
||||||
|
class PresidentsChoiceTest extends TestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Specifics\PresidentsChoice
|
||||||
|
*/
|
||||||
|
public function testRunBasic():void {
|
||||||
|
$row = [''];
|
||||||
|
|
||||||
|
$parser = new PresidentsChoice;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals($row, $result);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Import\Specifics\PresidentsChoice
|
||||||
|
*/
|
||||||
|
public function testRunAmount():void {
|
||||||
|
$row = ['','Descr','12.34','',''];
|
||||||
|
|
||||||
|
$parser = new PresidentsChoice;
|
||||||
|
$result = $parser->run($row);
|
||||||
|
$this->assertEquals('-12.34', $result[3]);
|
||||||
|
$this->assertEquals('Descr', $result[2]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
tests/Unit/Import/Specifics/RabobankDescriptionTest.php
Normal file
39
tests/Unit/Import/Specifics/RabobankDescriptionTest.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* RabobankDescriptionTest.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\Import\Specifics;
|
||||||
|
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class RabobankDescriptionTest
|
||||||
|
*/
|
||||||
|
class RabobankDescriptionTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testRunBasic(): void
|
||||||
|
{
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user