mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 12:07:33 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			645 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			645 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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\Factory\BankIntegrationFactory;
 | |
| use App\Factory\BankTransactionFactory;
 | |
| use App\Helpers\Bank\Yodlee\Yodlee;
 | |
| use App\Helpers\Invoice\InvoiceSum;
 | |
| use App\Jobs\Bank\MatchBankTransactions;
 | |
| use App\Jobs\Bank\ProcessBankTransactionsYodlee;
 | |
| use App\Models\BankIntegration;
 | |
| use App\Models\BankTransaction;
 | |
| use App\Models\Expense;
 | |
| use App\Models\Invoice;
 | |
| use App\Models\Payment;
 | |
| use App\Services\Bank\BankService;
 | |
| use Illuminate\Foundation\Testing\DatabaseTransactions;
 | |
| use Tests\MockAccountData;
 | |
| use Tests\TestCase;
 | |
| 
 | |
| class YodleeApiTest extends TestCase
 | |
| {
 | |
|     use DatabaseTransactions;
 | |
|     use MockAccountData;
 | |
| 
 | |
|     protected function setUp(): void
 | |
|     {
 | |
|         parent::setUp();
 | |
| 
 | |
|         // if(!config('ninja.yodlee.client_id'))
 | |
|         $this->markTestSkipped('Skip test no Yodlee API credentials found');
 | |
| 
 | |
|         $this->makeTestData();
 | |
|     }
 | |
| 
 | |
|     public function testExpenseGenerationFromBankFeed()
 | |
|     {
 | |
|         $bi = BankIntegrationFactory::create($this->company->id, $this->user->id, $this->account->id);
 | |
|         $bi->save();
 | |
| 
 | |
|         $bt = BankTransactionFactory::create($this->company->id, $this->user->id);
 | |
|         $bt->bank_integration_id = $bi->id;
 | |
|         $bt->description = 'Fuel';
 | |
|         $bt->amount = 10;
 | |
|         $bt->currency_code = $this->client->currency()->code;
 | |
|         $bt->date = now()->format('Y-m-d');
 | |
|         $bt->transaction_id = 1234567890;
 | |
|         $bt->category_id = 10000003;
 | |
|         $bt->base_type = 'DEBIT';
 | |
|         $bt->save();
 | |
| 
 | |
|         $data = [];
 | |
| 
 | |
|         $data['transactions'][] = [
 | |
|             'id' => $bt->id,
 | |
|         ];
 | |
| 
 | |
|         MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
 | |
| 
 | |
|         $expense = Expense::where('transaction_reference', 'Fuel')->first();
 | |
| 
 | |
|         $this->assertNotNull($expense);
 | |
|         $this->assertEquals(10, (int) $expense->amount);
 | |
|     }
 | |
| 
 | |
|     public function testIncomeMatchingAndPaymentGeneration()
 | |
|     {
 | |
|         $this->account->bank_integration_account_id = 'sbMem62e1e69547bfb2';
 | |
|         $this->account->save();
 | |
| 
 | |
|         $invoice = Invoice::factory()->create(['user_id' => $this->user->id, 'company_id' => $this->company->id, 'client_id' => $this->client->id]);
 | |
|         $invoice->status_id = Invoice::STATUS_DRAFT;
 | |
| 
 | |
|         $invoice->line_items = $this->buildLineItems();
 | |
|         $invoice->uses_inclusive_taxes = false;
 | |
|         $invoice->tax_rate1 = 0;
 | |
|         $invoice->tax_rate2 = 0;
 | |
|         $invoice->tax_rate3 = 0;
 | |
|         $invoice->discount = 0;
 | |
|         $invoice->number = 'TESTMATCHING';
 | |
|         $invoice->date = now()->format('Y-m-d');
 | |
| 
 | |
|         $invoice->save();
 | |
| 
 | |
|         $invoice_calc = new InvoiceSum($invoice);
 | |
|         $invoice_calc->build();
 | |
| 
 | |
|         $invoice = $invoice_calc->getInvoice();
 | |
|         $invoice->save();
 | |
|         $invoice = $invoice->service()->markSent()->save();
 | |
| 
 | |
|         $this->assertEquals(Invoice::STATUS_SENT, $invoice->status_id);
 | |
|         $this->assertEquals(10, $invoice->amount);
 | |
|         $this->assertEquals(10, $invoice->balance);
 | |
| 
 | |
|         $bi = BankIntegrationFactory::create($this->company->id, $this->user->id, $this->account->id);
 | |
|         $bi->save();
 | |
| 
 | |
|         $bt = BankTransactionFactory::create($this->company->id, $this->user->id);
 | |
|         $bt->bank_integration_id = $bi->id;
 | |
|         $bt->description = $invoice->number;
 | |
|         $bt->amount = 10;
 | |
|         $bt->currency_code = $this->client->currency()->code;
 | |
|         $bt->date = now()->format('Y-m-d');
 | |
|         $bt->transaction_id = 123456;
 | |
|         $bt->save();
 | |
| 
 | |
|         $data['transactions'][] = [
 | |
|             'id' => $bt->id,
 | |
|             'invoice_ids' => $invoice->hashed_id
 | |
|         ];
 | |
| 
 | |
|         MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
 | |
| 
 | |
|         $payment = Payment::where('transaction_reference', $bt->description)->first();
 | |
|         $payment_count = Payment::where('transaction_reference', $bt->description)->count();
 | |
| 
 | |
|         $this->assertNotNull($payment);
 | |
| 
 | |
|         $this->assertEquals(10, (int) $payment->amount);
 | |
|         $this->assertEquals(4, $payment->status_id);
 | |
|         $this->assertEquals(1, $payment->invoices()->count());
 | |
| 
 | |
|         $invoice = $invoice->fresh();
 | |
| 
 | |
|         $this->assertEquals(Invoice::STATUS_PAID, $invoice->status_id);
 | |
|         $this->assertEquals(0, $invoice->balance);
 | |
|         $this->assertEquals(1, $payment_count);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public function testCategoryPropertyExists()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb2');
 | |
| 
 | |
|         $transactions = $yodlee->getTransactionCategories();
 | |
| 
 | |
|         $this->assertTrue(property_exists($transactions, 'transactionCategory'));
 | |
| 
 | |
|         $t = collect($transactions->transactionCategory);
 | |
| 
 | |
|         $x = $t->firstWhere('highLevelCategoryId', 10000003);
 | |
| 
 | |
|         $this->assertNotNull($x);
 | |
| 
 | |
|         $this->assertEquals('Automotive Expenses', $x->highLevelCategoryName);
 | |
|     }
 | |
| 
 | |
|     //     public function testFunctionalMatching()
 | |
|     //     {
 | |
| 
 | |
|     //         $yodlee = new Yodlee('sbMem62e1e69547bfb1');
 | |
| 
 | |
|     //         $accounts = $yodlee->getAccounts();
 | |
| 
 | |
|     //         foreach($accounts as $account)
 | |
|     //         {
 | |
| 
 | |
|     //             if(!BankIntegration::where('bank_account_id', $account['id'])->where('company_id', $this->company->id)->exists())
 | |
|     //             {
 | |
|     //                 $bank_integration = new BankIntegration();
 | |
|     //                 $bank_integration->company_id = $this->company->id;
 | |
|     //                 $bank_integration->account_id = $this->company->account_id;
 | |
|     //                 $bank_integration->user_id = $this->user->id;
 | |
|     //                 $bank_integration->bank_account_id = $account['id'];
 | |
|     //                 $bank_integration->bank_account_type = $account['account_type'];
 | |
|     //                 $bank_integration->bank_account_name = $account['account_name'];
 | |
|     //                 $bank_integration->bank_account_status = $account['account_status'];
 | |
|     //                 $bank_integration->bank_account_number = $account['account_number'];
 | |
|     //                 $bank_integration->provider_id = $account['provider_id'];
 | |
|     //                 $bank_integration->provider_name = $account['provider_name'];
 | |
|     //                 $bank_integration->nickname = $account['nickname'];
 | |
|     //                 $bank_integration->balance = $account['current_balance'];
 | |
|     //                 $bank_integration->currency = $account['account_currency'];
 | |
| 
 | |
|     //                 $bank_integration->save();
 | |
| 
 | |
|     //                 ProcessBankTransactions::dispatchSync('sbMem62e1e69547bfb1', $bank_integration);
 | |
| 
 | |
|     //             }
 | |
|     //         }
 | |
| 
 | |
|     //         $this->assertGreaterThan(0, BankIntegration::count());
 | |
|     //         $this->assertGreaterThan(0, BankTransaction::count());
 | |
| 
 | |
|     //         $this->invoice->company_id = $this->company->id;
 | |
|     //         $this->invoice->number = "XXXXXX8501";
 | |
|     //         $this->invoice->save();
 | |
| 
 | |
|     //         BankService::dispatchSync($this->company->id, $this->company->db);
 | |
| 
 | |
|     //         $bt = BankTransaction::where('invoice_ids', $this->invoice->hashed_id)->first();
 | |
| 
 | |
|     // nlog(BankTransaction::where('company_id', $this->company->id)->pluck('invoice_ids'));
 | |
| 
 | |
|     //         $this->assertNotNull($bt);
 | |
| 
 | |
|     //         $this->assertEquals(BankTransaction::STATUS_MATCHED, $bt->status_id);
 | |
| 
 | |
|     //     }
 | |
| 
 | |
| 
 | |
|     public function testDataMatching()
 | |
|     {
 | |
|         $transaction = collect([
 | |
|             (object) [
 | |
|                 'description' => 'tinkertonkton'
 | |
|             ],
 | |
|             (object) [
 | |
|                 'description' => 'spud'
 | |
|             ],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertEquals(2, $transaction->count());
 | |
| 
 | |
|         $hit = $transaction->where('description', 'spud')->first();
 | |
| 
 | |
|         $this->assertNotNull($hit);
 | |
| 
 | |
|         $hit = $transaction->where('description', 'tinkertonkton')->first();
 | |
| 
 | |
|         $this->assertNotNull($hit);
 | |
| 
 | |
|         $hit = $transaction->contains('description', 'tinkertonkton');
 | |
| 
 | |
|         $this->assertTrue($hit);
 | |
| 
 | |
| 
 | |
|         $transaction = collect([
 | |
|             (object) [
 | |
|                 'description' => 'tinker and spice'
 | |
|             ],
 | |
|             (object) [
 | |
|                 'description' => 'spud with water'
 | |
|             ],
 | |
|         ]);
 | |
| 
 | |
|         $hit = $transaction->contains('description', 'tinker and spice');
 | |
| 
 | |
|         $this->assertTrue($hit);
 | |
| 
 | |
| 
 | |
|         $invoice = $transaction->first(function ($value, $key) {
 | |
|             return str_contains($value->description, 'tinker');
 | |
|         });
 | |
| 
 | |
|         $this->assertNotNull($invoice);
 | |
|     }
 | |
| 
 | |
|     public function testYodleeInstance()
 | |
|     {
 | |
|         $yodlee = new Yodlee();
 | |
| 
 | |
|         $this->assertNotNull($yodlee);
 | |
| 
 | |
|         $this->assertInstanceOf(Yodlee::class, $yodlee);
 | |
|     }
 | |
| 
 | |
|     public function testAccessTokenGeneration()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb1');
 | |
| 
 | |
|         $access_token = $yodlee->getAccessToken();
 | |
| 
 | |
|         $this->assertNotNull($access_token);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
| 
 | |
|        [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
 | |
|                     )
 | |
| 
 | |
|     */
 | |
| 
 | |
| 
 | |
|     public function testGetCategories()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb2');
 | |
| 
 | |
|         $transactions = $yodlee->getTransactionCategories();
 | |
| 
 | |
|         $this->assertIsArray($transactions->transactionCategory);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|     [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
 | |
|                                     )
 | |
| 
 | |
|                             )
 | |
| 
 | |
|                     )
 | |
|             [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
 | |
|                                     )
 | |
| 
 | |
|                             )
 | |
| 
 | |
|                     )
 | |
|     */
 | |
|     public function testGetAccounts()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb1');
 | |
| 
 | |
|         $accounts = $yodlee->getAccounts();
 | |
| 
 | |
|         $this->assertIsArray($accounts);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|     [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
 | |
|                     )
 | |
| 
 | |
| 
 | |
|      */
 | |
| 
 | |
|     public function testGetTransactions()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb1');
 | |
| 
 | |
|         $transactions = $yodlee->getTransactions(['categoryId' => 2, 'fromDate' => '2000-01-01']);
 | |
| 
 | |
|         $this->assertIsArray($transactions);
 | |
|     }
 | |
| 
 | |
|     public function testGetTransactionsWithParams()
 | |
|     {
 | |
|         $yodlee = new Yodlee('sbMem62e1e69547bfb1');
 | |
| 
 | |
|         $data = [
 | |
|             'basetype' => 'DEBIT', //CREDIT
 | |
|             'CONTAINER' => 'bank',
 | |
|             'top' => 500,
 | |
|             'fromDate' => '2000-10-10', /// YYYY-MM-DD
 | |
|         ];
 | |
| 
 | |
|         $accounts = $yodlee->getTransactions($data);
 | |
| 
 | |
|         $this->assertIsArray($accounts);
 | |
|     }
 | |
| }
 |