2022-07-28 07:07:35 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Invoice Ninja (https://invoiceninja.com).
|
|
|
|
*
|
|
|
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
|
|
*
|
|
|
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
|
|
|
*
|
|
|
|
* @license https://www.elastic.co/licensing/elastic-license
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Tests\Feature\Bank;
|
|
|
|
|
|
|
|
use App\Helpers\Bank\Yodlee\Yodlee;
|
|
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
class YodleeApiTest extends TestCase
|
|
|
|
{
|
|
|
|
use DatabaseTransactions;
|
|
|
|
|
|
|
|
protected function setUp(): void
|
|
|
|
{
|
|
|
|
parent::setUp();
|
2022-07-28 09:33:47 +02:00
|
|
|
|
2022-08-08 00:32:28 +02:00
|
|
|
if(!config('ninja.yodlee.client_id'))
|
|
|
|
$this->markTestSkipped('Skip test no Yodlee API credentials found');
|
2022-07-28 09:33:47 +02:00
|
|
|
|
2022-07-28 07:07:35 +02:00
|
|
|
}
|
|
|
|
|
2022-08-08 00:32:28 +02:00
|
|
|
public function testYodleeInstance()
|
2022-08-06 08:58:48 +02:00
|
|
|
{
|
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$yodlee = new Yodlee();
|
|
|
|
$yodlee->setTestMode();
|
2022-08-06 08:58:48 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$this->assertNotNull($yodlee);
|
2022-08-08 00:32:28 +02:00
|
|
|
|
|
|
|
$this->assertInstanceOf(Yodlee::class, $yodlee);
|
2022-08-06 08:58:48 +02:00
|
|
|
}
|
|
|
|
|
2022-07-28 07:07:35 +02:00
|
|
|
public function testAccessTokenGeneration()
|
|
|
|
{
|
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$yodlee = new Yodlee('sbMem62e1e69547bfb1');
|
|
|
|
$yodlee->setTestMode();
|
2022-07-28 07:07:35 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$access_token = $yodlee->getAccessToken(true);
|
2022-07-28 07:07:35 +02:00
|
|
|
|
|
|
|
$this->assertNotNull($access_token);
|
|
|
|
}
|
|
|
|
|
2022-08-05 03:37:31 +02:00
|
|
|
/**
|
|
|
|
|
|
|
|
[transactionCategory] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1
|
|
|
|
[source] => SYSTEM
|
|
|
|
[classification] => PERSONAL
|
|
|
|
[category] => Uncategorized
|
|
|
|
[type] => UNCATEGORIZE
|
|
|
|
[highLevelCategoryId] => 10000017
|
|
|
|
[highLevelCategoryName] => Uncategorized
|
|
|
|
[defaultCategoryName] => Uncategorized
|
|
|
|
[defaultHighLevelCategoryName] => Uncategorized
|
|
|
|
)
|
|
|
|
|
|
|
|
[1] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 2
|
|
|
|
[source] => SYSTEM
|
|
|
|
[classification] => PERSONAL
|
|
|
|
[category] => Automotive/Fuel
|
|
|
|
[type] => EXPENSE
|
|
|
|
[detailCategory] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1041
|
|
|
|
[name] => Registration/Licensing
|
|
|
|
)
|
|
|
|
|
|
|
|
[1] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1145
|
|
|
|
[name] => Automotive
|
|
|
|
)
|
|
|
|
|
|
|
|
[2] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1218
|
|
|
|
[name] => Auto Fees/Penalties
|
|
|
|
)
|
|
|
|
|
|
|
|
[3] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1260
|
|
|
|
[name] => Car Appraisers
|
|
|
|
)
|
|
|
|
|
|
|
|
[4] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1261
|
|
|
|
[name] => Car Dealers
|
|
|
|
)
|
|
|
|
|
|
|
|
[5] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1262
|
|
|
|
[name] => Car Dealers and Leasing
|
|
|
|
)
|
|
|
|
|
|
|
|
[6] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1263
|
|
|
|
[name] => Car Parts and Accessories
|
|
|
|
)
|
|
|
|
|
|
|
|
[7] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1264
|
|
|
|
[name] => Car Wash and Detail
|
|
|
|
)
|
|
|
|
|
|
|
|
[8] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1265
|
|
|
|
[name] => Classic and Antique Car
|
|
|
|
)
|
|
|
|
|
|
|
|
[9] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1267
|
|
|
|
[name] => Maintenance and Repair
|
|
|
|
)
|
|
|
|
|
|
|
|
[10] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1268
|
|
|
|
[name] => Motorcycles/Mopeds/Scooters
|
|
|
|
)
|
|
|
|
|
|
|
|
[11] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1269
|
|
|
|
[name] => Oil and Lube
|
|
|
|
)
|
|
|
|
|
|
|
|
[12] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1270
|
|
|
|
[name] => Motorcycle Repair
|
|
|
|
)
|
|
|
|
|
|
|
|
[13] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1271
|
|
|
|
[name] => RVs and Motor Homes
|
|
|
|
)
|
|
|
|
|
|
|
|
[14] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1272
|
|
|
|
[name] => Motorcycle Sales
|
|
|
|
)
|
|
|
|
|
|
|
|
[15] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1273
|
|
|
|
[name] => Salvage Yards
|
|
|
|
)
|
|
|
|
|
|
|
|
[16] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1274
|
|
|
|
[name] => Smog Check
|
|
|
|
)
|
|
|
|
|
|
|
|
[17] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1275
|
|
|
|
[name] => Tires
|
|
|
|
)
|
|
|
|
|
|
|
|
[18] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1276
|
|
|
|
[name] => Towing
|
|
|
|
)
|
|
|
|
|
|
|
|
[19] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1277
|
|
|
|
[name] => Transmissions
|
|
|
|
)
|
|
|
|
|
|
|
|
[20] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1278
|
|
|
|
[name] => Used Cars
|
|
|
|
)
|
|
|
|
|
|
|
|
[21] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1240
|
|
|
|
[name] => e-Charging
|
|
|
|
)
|
|
|
|
|
|
|
|
[22] => stdClass Object
|
|
|
|
(
|
|
|
|
[id] => 1266
|
|
|
|
[name] => Gas Stations
|
|
|
|
)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
[highLevelCategoryId] => 10000003
|
|
|
|
[highLevelCategoryName] => Automotive Expenses
|
|
|
|
[defaultCategoryName] => Automotive Expenses
|
|
|
|
[defaultHighLevelCategoryName] => Automotive Expenses
|
|
|
|
)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2022-07-30 04:10:42 +02:00
|
|
|
public function testGetCategories()
|
2022-07-28 08:29:42 +02:00
|
|
|
{
|
2022-07-28 09:33:47 +02:00
|
|
|
|
2022-07-30 04:10:42 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$yodlee = new Yodlee('sbMem62e1e69547bfb2');
|
|
|
|
$yodlee->setTestMode();
|
2022-07-30 04:10:42 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$transactions = $yodlee->getTransactionCategories();
|
2022-08-08 04:46:41 +02:00
|
|
|
|
2022-08-08 00:32:28 +02:00
|
|
|
// nlog($transactions);
|
2022-07-30 04:10:42 +02:00
|
|
|
|
2022-08-08 00:32:28 +02:00
|
|
|
$this->assertIsArray($transactions->transactionCategory);
|
2022-07-30 04:10:42 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-08-05 03:37:31 +02:00
|
|
|
/**
|
|
|
|
[2022-08-05 01:29:45] local.INFO: stdClass Object
|
|
|
|
(
|
|
|
|
[account] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[CONTAINER] => bank
|
|
|
|
[providerAccountId] => 11308693
|
|
|
|
[accountName] => My CD - 8878
|
|
|
|
[accountStatus] => ACTIVE
|
|
|
|
[accountNumber] => xxxx8878
|
|
|
|
[aggregationSource] => USER
|
|
|
|
[isAsset] => 1
|
|
|
|
[balance] => stdClass Object
|
|
|
|
(
|
|
|
|
[currency] => USD
|
|
|
|
[amount] => 49778.07
|
|
|
|
)
|
|
|
|
|
|
|
|
[id] => 12331861
|
|
|
|
[includeInNetWorth] => 1
|
|
|
|
[providerId] => 18769
|
|
|
|
[providerName] => Dag Site Captcha
|
|
|
|
[isManual] =>
|
|
|
|
[currentBalance] => stdClass Object
|
|
|
|
(
|
|
|
|
[currency] => USD
|
|
|
|
[amount] => 49778.07
|
|
|
|
)
|
|
|
|
|
|
|
|
[accountType] => CD
|
|
|
|
[displayedName] => LORETTA
|
|
|
|
[createdDate] => 2022-07-28T06:55:33Z
|
|
|
|
[lastUpdated] => 2022-07-28T06:56:09Z
|
|
|
|
[dataset] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[name] => BASIC_AGG_DATA
|
|
|
|
[additionalStatus] => AVAILABLE_DATA_RETRIEVED
|
|
|
|
[updateEligibility] => ALLOW_UPDATE
|
|
|
|
[lastUpdated] => 2022-07-28T06:55:50Z
|
|
|
|
[lastUpdateAttempt] => 2022-07-28T06:55:50Z
|
|
|
|
)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
2022-08-05 04:58:45 +02:00
|
|
|
)
|
|
|
|
[1] => stdClass Object
|
|
|
|
(
|
|
|
|
[CONTAINER] => bank
|
|
|
|
[providerAccountId] => 11308693
|
|
|
|
[accountName] => Joint Savings - 7159
|
|
|
|
[accountStatus] => ACTIVE
|
|
|
|
[accountNumber] => xxxx7159
|
|
|
|
[aggregationSource] => USER
|
|
|
|
[isAsset] => 1
|
|
|
|
[balance] => stdClass Object
|
|
|
|
(
|
|
|
|
[currency] => USD
|
|
|
|
[amount] => 186277.45
|
|
|
|
)
|
|
|
|
|
|
|
|
[id] => 12331860
|
|
|
|
[includeInNetWorth] => 1
|
|
|
|
[providerId] => 18769
|
|
|
|
[providerName] => Dag Site Captcha
|
|
|
|
[isManual] =>
|
|
|
|
[availableBalance] => stdClass Object
|
|
|
|
(
|
|
|
|
[currency] => USD
|
|
|
|
[amount] => 186277.45
|
|
|
|
)
|
|
|
|
|
|
|
|
[currentBalance] => stdClass Object
|
|
|
|
(
|
|
|
|
[currency] => USD
|
|
|
|
[amount] => 186277.45
|
|
|
|
)
|
|
|
|
|
|
|
|
[accountType] => SAVINGS
|
|
|
|
[displayedName] => LYDIA
|
|
|
|
[createdDate] => 2022-07-28T06:55:33Z
|
|
|
|
[classification] => PERSONAL
|
|
|
|
[lastUpdated] => 2022-07-28T06:56:09Z
|
|
|
|
[dataset] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[name] => BASIC_AGG_DATA
|
|
|
|
[additionalStatus] => AVAILABLE_DATA_RETRIEVED
|
|
|
|
[updateEligibility] => ALLOW_UPDATE
|
|
|
|
[lastUpdated] => 2022-07-28T06:55:50Z
|
|
|
|
[lastUpdateAttempt] => 2022-07-28T06:55:50Z
|
|
|
|
)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
2022-08-05 03:37:31 +02:00
|
|
|
)
|
|
|
|
*/
|
2022-07-30 04:10:42 +02:00
|
|
|
public function testGetAccounts()
|
|
|
|
{
|
2022-07-28 08:29:42 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$yodlee = new Yodlee('sbMem62e1e69547bfb1');
|
|
|
|
$yodlee->setTestMode();
|
2022-07-28 08:29:42 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$accounts = $yodlee->getAccounts();
|
2022-07-28 09:33:47 +02:00
|
|
|
|
2022-08-08 01:15:31 +02:00
|
|
|
$this->assertIsArray($accounts);
|
2022-07-30 04:10:42 +02:00
|
|
|
}
|
|
|
|
|
2022-08-05 03:37:31 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
[2022-08-05 01:36:34] local.INFO: stdClass Object
|
|
|
|
(
|
|
|
|
[transaction] => Array
|
|
|
|
(
|
|
|
|
[0] => stdClass Object
|
|
|
|
(
|
|
|
|
[CONTAINER] => bank
|
|
|
|
[id] => 103953585
|
|
|
|
[amount] => stdClass Object
|
|
|
|
(
|
|
|
|
[amount] => 480.66
|
|
|
|
[currency] => USD
|
|
|
|
)
|
|
|
|
|
|
|
|
[categoryType] => UNCATEGORIZE
|
|
|
|
[categoryId] => 1
|
|
|
|
[category] => Uncategorized
|
|
|
|
[categorySource] => SYSTEM
|
|
|
|
[highLevelCategoryId] => 10000017
|
|
|
|
[createdDate] => 2022-08-04T21:50:17Z
|
|
|
|
[lastUpdated] => 2022-08-04T21:50:17Z
|
|
|
|
[description] => stdClass Object
|
|
|
|
(
|
|
|
|
[original] => CHEROKEE NATION TAX TA TAHLEQUAH OK
|
|
|
|
)
|
|
|
|
|
|
|
|
[isManual] =>
|
|
|
|
[sourceType] => AGGREGATED
|
|
|
|
[date] => 2022-08-03
|
|
|
|
[transactionDate] => 2022-08-03
|
|
|
|
[postDate] => 2022-08-03
|
|
|
|
[status] => POSTED
|
|
|
|
[accountId] => 12331794
|
|
|
|
[runningBalance] => stdClass Object
|
|
|
|
(
|
|
|
|
[amount] => 480.66
|
|
|
|
[currency] => USD
|
|
|
|
)
|
|
|
|
|
|
|
|
[checkNumber] => 998
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
2022-07-30 04:10:42 +02:00
|
|
|
public function testGetTransactions()
|
|
|
|
{
|
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$yodlee = new Yodlee('sbMem62e1e69547bfb1');
|
|
|
|
$yodlee->setTestMode();
|
2022-08-05 05:45:53 +02:00
|
|
|
|
2022-08-08 00:26:27 +02:00
|
|
|
$transactions = $yodlee->getTransactions(['categoryId' => 2, 'fromDate' => '2000-01-01']);
|
2022-07-30 04:10:42 +02:00
|
|
|
|
2022-08-08 00:32:28 +02:00
|
|
|
$this->assertIsArray($transactions->transaction);
|
|
|
|
//nlog($transactions);
|
2022-07-30 04:10:42 +02:00
|
|
|
|
2022-07-28 08:29:42 +02:00
|
|
|
}
|
|
|
|
|
2022-07-28 09:33:47 +02:00
|
|
|
|
2022-08-08 04:46:41 +02:00
|
|
|
public function testGetTransactionsWithParams()
|
|
|
|
{
|
|
|
|
|
|
|
|
$yodlee = new Yodlee('sbMem62e1e69547bfb1');
|
|
|
|
$yodlee->setTestMode();
|
|
|
|
|
|
|
|
$data = [
|
|
|
|
'CONTAINER' => 'bank',
|
|
|
|
'categoryType' => 'INCOME, UNCATEGORIZE',
|
|
|
|
'top' => 500,
|
|
|
|
'fromDate' => '2000-10-10', /// YYYY-MM-DD
|
|
|
|
];
|
|
|
|
|
|
|
|
$accounts = $yodlee->getTransactions($data);
|
|
|
|
|
|
|
|
|
|
|
|
nlog($accounts);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-28 07:07:35 +02:00
|
|
|
}
|