From af1f809cfb6a6e6a578c555e01cb2c18c78d3882 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 26 Oct 2023 15:46:26 +1100 Subject: [PATCH] Fixes for test refactoring --- app/Export/CSV/PaymentExport.php | 2 - .../Reports/ARSummaryReportController.php | 7 +- .../Reports/CreditReportController.php | 22 +- .../Reports/DocumentReportController.php | 22 +- .../Reports/ExpenseReportController.php | 22 +- .../Reports/InvoiceItemReportController.php | 21 +- app/Jobs/Report/PreviewReport.php | 2 +- routes/api.php | 3 +- .../Export/ReportCsvGenerationTest.php | 404 +++++++++++++----- 9 files changed, 324 insertions(+), 181 deletions(-) diff --git a/app/Export/CSV/PaymentExport.php b/app/Export/CSV/PaymentExport.php index 7f77563f9b92..48f996fae794 100644 --- a/app/Export/CSV/PaymentExport.php +++ b/app/Export/CSV/PaymentExport.php @@ -71,8 +71,6 @@ class PaymentExport extends BaseExport return ['identifier' => $key, 'display_value' => $headerdisplay[$value]]; })->toArray(); - nlog($header); - $report = $query->cursor() ->map(function ($resource) { $row = $this->buildRow($resource); diff --git a/app/Http/Controllers/Reports/ARSummaryReportController.php b/app/Http/Controllers/Reports/ARSummaryReportController.php index a9c9f6e68946..cde4779451e3 100644 --- a/app/Http/Controllers/Reports/ARSummaryReportController.php +++ b/app/Http/Controllers/Reports/ARSummaryReportController.php @@ -61,14 +61,17 @@ class ARSummaryReportController extends BaseController */ public function __invoke(GenericReportRequest $request) { + /** @var \App\Models\User $user */ + $user = auth()->user(); + if ($request->has('send_email') && $request->get('send_email')) { - SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ARSummaryReport::class, $this->filename); + SendToAdmin::dispatch($user->company(), $request->all(), ARSummaryReport::class, $this->filename); return response()->json(['message' => 'working...'], 200); } // expect a list of visible fields, or use the default - $export = new ARSummaryReport(auth()->user()->company(), $request->all()); + $export = new ARSummaryReport($user->company(), $request->all()); $csv = $export->run(); diff --git a/app/Http/Controllers/Reports/CreditReportController.php b/app/Http/Controllers/Reports/CreditReportController.php index 5a1a952d6359..533a45e046e7 100644 --- a/app/Http/Controllers/Reports/CreditReportController.php +++ b/app/Http/Controllers/Reports/CreditReportController.php @@ -71,28 +71,12 @@ class CreditReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), CreditExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), CreditExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new CreditExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/DocumentReportController.php b/app/Http/Controllers/Reports/DocumentReportController.php index e7db3f74186c..fb592f9909ab 100644 --- a/app/Http/Controllers/Reports/DocumentReportController.php +++ b/app/Http/Controllers/Reports/DocumentReportController.php @@ -72,28 +72,12 @@ class DocumentReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), DocumentExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), DocumentExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new DocumentExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/ExpenseReportController.php b/app/Http/Controllers/Reports/ExpenseReportController.php index 2cd849891f1f..12e3c7cf813e 100644 --- a/app/Http/Controllers/Reports/ExpenseReportController.php +++ b/app/Http/Controllers/Reports/ExpenseReportController.php @@ -73,28 +73,12 @@ class ExpenseReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), ExpenseExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), ExpenseExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new ExpenseExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/InvoiceItemReportController.php b/app/Http/Controllers/Reports/InvoiceItemReportController.php index 3bb534b7f0e8..847db7a339f5 100644 --- a/app/Http/Controllers/Reports/InvoiceItemReportController.php +++ b/app/Http/Controllers/Reports/InvoiceItemReportController.php @@ -72,26 +72,11 @@ class InvoiceItemReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), InvoiceItemExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), InvoiceItemExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new InvoiceItemExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Jobs/Report/PreviewReport.php b/app/Jobs/Report/PreviewReport.php index 1c1ce99f02ac..d00a99d08008 100644 --- a/app/Jobs/Report/PreviewReport.php +++ b/app/Jobs/Report/PreviewReport.php @@ -39,7 +39,7 @@ class PreviewReport implements ShouldQueue /** @var \App\Export\CSV\CreditExport $export */ $export = new $this->report_class($this->company, $this->request); - if($this->request['output'] == 'json' ?? false) + if(isset($this->request['output']) && $this->request['output'] == 'json') $report = $export->returnJson(); else $report = $export->run(); diff --git a/routes/api.php b/routes/api.php index 5c24dd087290..e9a685cbf870 100644 --- a/routes/api.php +++ b/routes/api.php @@ -89,6 +89,7 @@ use App\Http\Controllers\Auth\PasswordTimeoutController; use App\Http\Controllers\PreviewPurchaseOrderController; use App\Http\Controllers\Reports\ClientReportController; use App\Http\Controllers\Reports\CreditReportController; +use App\Http\Controllers\Reports\ReportExportController; use App\Http\Controllers\Reports\VendorReportController; use App\Http\Controllers\Reports\ExpenseReportController; use App\Http\Controllers\Reports\InvoiceReportController; @@ -322,7 +323,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('reports/tax_summary_report', TaxSummaryReportController::class); Route::post('reports/user_sales_report', UserSalesReportController::class); Route::post('reports/preview/{hash}', ReportPreviewController::class); - Route::post('exports/preview/{hash}', ReportPreviewController::class); + Route::post('exports/preview/{hash}', ReportExportController::class); Route::post('templates/preview/{hash}', TemplatePreviewController::class); Route::post('search', SearchController::class); diff --git a/tests/Feature/Export/ReportCsvGenerationTest.php b/tests/Feature/Export/ReportCsvGenerationTest.php index 90b12ab96adc..5f097bc4ad66 100644 --- a/tests/Feature/Export/ReportCsvGenerationTest.php +++ b/tests/Feature/Export/ReportCsvGenerationTest.php @@ -11,25 +11,26 @@ namespace Tests\Feature\Export; -use Tests\TestCase; -use App\Models\User; -use App\Models\Client; -use App\Models\Credit; -use League\Csv\Reader; -use App\Models\Account; -use App\Models\Company; -use App\Models\Expense; -use App\Models\Invoice; -use App\Models\CompanyToken; -use App\Models\ClientContact; -use App\Export\CSV\TaskExport; -use App\Utils\Traits\MakesHash; -use App\Export\CSV\VendorExport; -use App\Export\CSV\ProductExport; use App\DataMapper\CompanySettings; use App\Export\CSV\PaymentExport; +use App\Export\CSV\ProductExport; +use App\Export\CSV\TaskExport; +use App\Export\CSV\VendorExport; use App\Factory\CompanyUserFactory; +use App\Models\Account; +use App\Models\Client; +use App\Models\ClientContact; +use App\Models\Company; +use App\Models\CompanyToken; +use App\Models\Credit; +use App\Models\Expense; +use App\Models\Invoice; +use App\Models\User; +use App\Utils\Traits\MakesHash; use Illuminate\Routing\Middleware\ThrottleRequests; +use Illuminate\Support\Facades\Http; +use League\Csv\Reader; +use Tests\TestCase; /** * @test @@ -113,7 +114,7 @@ class ReportCsvGenerationTest extends TestCase "contact.custom_value4", ]; - private $all_payment_report_keys = [ + private $all_payment_report_keys = [ 'payment.date', 'payment.amount', 'payment.refunded', @@ -275,9 +276,19 @@ class ReportCsvGenerationTest extends TestCase } + private function poll($hash) + { + $response = Http::retry(20, 1000, throw: false) + ->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post(config('ninja.app_url')."/api/v1/exports/preview/{$hash}"); + + return $response; + } public function testVendorCsvGeneration() { - + $vendor = \App\Models\Vendor::factory()->create( [ @@ -292,14 +303,13 @@ class ReportCsvGenerationTest extends TestCase 'private_notes' => 'private_notes', 'public_notes' => 'public_notes', 'website' => 'website', - 'number' => '1234', + 'number' => '1234', ] ); $data = [ 'date_range' => 'all', 'report_keys' => [], - // 'report_keys' => ["vendor.name","purchase_order.number","purchase_order.amount", "item.quantity", "item.cost", "item.line_total", "item.discount", "item.notes", "item.product_key", "item.custom_value1", "item.tax_name1", "item.tax_rate1",], 'send_email' => false, ]; @@ -308,7 +318,15 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/vendors', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); $this->assertEquals('Vendor 1', $this->getFirstValueByColumn($csv, 'Vendor Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Vendor Number')); @@ -334,8 +352,7 @@ class ReportCsvGenerationTest extends TestCase $data = $export->returnJson(); $this->assertNotNull($data); - // nlog($data); - // $this->assertEquals(0, $this->traverseJson($data, 'columns.0.identifier')); + $this->assertEquals('Vendor Name', $this->traverseJson($data, 'columns.9.display_value')); $this->assertEquals('vendor', $this->traverseJson($data, '0.0.entity')); $this->assertEquals('address1', $this->traverseJson($data, '0.0.id')); @@ -345,7 +362,7 @@ class ReportCsvGenerationTest extends TestCase $this->assertEquals('address1', $this->traverseJson($data, '0.0.display_value')); } - public function testVendorCustomColumnCsvGeneration() + public function testVendorCustomColumnCsvGeneration() { \App\Models\Vendor::query()->cursor()->each(function ($t) { @@ -366,7 +383,7 @@ class ReportCsvGenerationTest extends TestCase 'private_notes' => 'private_notes', 'public_notes' => 'public_notes', 'website' => 'website', - 'number' => '1234', + 'number' => '1234', ] ); @@ -381,7 +398,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/vendors', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('Vendor 1', $this->getFirstValueByColumn($csv, 'Vendor Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Vendor Number')); @@ -405,7 +431,7 @@ class ReportCsvGenerationTest extends TestCase } - public function testTaskCustomColumnsCsvGeneration() + public function testTaskCustomColumnsCsvGeneration() { $invoice = \App\Models\Invoice::factory()->create([ @@ -463,7 +489,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/tasks', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals(3600, $this->getFirstValueByColumn($csv, 'Task Duration')); $this->assertEquals('test1', $this->getFirstValueByColumn($csv, 'Task Description')); @@ -515,12 +550,19 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/tasks', $data); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + } - - - public function testTasksCsvGeneration() { @@ -553,7 +595,15 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/tasks', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); $this->assertEquals(3600, $this->getFirstValueByColumn($csv, 'Task Duration')); $this->assertEquals('test', $this->getFirstValueByColumn($csv, 'Task Description')); @@ -592,8 +642,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/products', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('product_key', $this->getFirstValueByColumn($csv, 'Product')); $this->assertEquals('notes', $this->getFirstValueByColumn($csv, 'Notes')); @@ -602,7 +661,7 @@ class ReportCsvGenerationTest extends TestCase $this->assertEquals('Custom 1', $this->getFirstValueByColumn($csv, 'Custom Value 1')); $this->assertEquals('Custom 2', $this->getFirstValueByColumn($csv, 'Custom Value 2')); $this->assertEquals('Custom 3', $this->getFirstValueByColumn($csv, 'Custom Value 3')); - $this->assertEquals('Custom 4', $this->getFirstValueByColumn($csv, 'Custom Value 4')); + $this->assertEquals('Custom 4', $this->getFirstValueByColumn($csv, 'Custom Value 4')); $export = new ProductExport($this->company, $data); $data = $export->returnJson(); @@ -664,8 +723,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/payments', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals(100, $this->getFirstValueByColumn($csv, 'Payment Amount')); $this->assertEquals(now()->addSeconds($this->company->timezone()->utc_offset)->format('Y-m-d'), $this->getFirstValueByColumn($csv, 'Payment Date')); @@ -712,7 +780,7 @@ class ReportCsvGenerationTest extends TestCase $data = [ 'date_range' => 'all', - 'report_keys' => array_merge(["payment.amount","payment.date"],$this->all_invoice_report_keys), + 'report_keys' => array_merge(["payment.amount","payment.date"], $this->all_invoice_report_keys), 'send_email' => false, ]; @@ -721,6 +789,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/payments', $data); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + + } @@ -746,8 +825,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/payments', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals(500, $this->getFirstValueByColumn($csv, 'Payment Amount')); $this->assertEquals(0, $this->getFirstValueByColumn($csv, 'Payment Applied')); @@ -771,9 +859,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/clients', $data); - - $csv = $response->streamedContent(); -// nlog($csv); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $reader = Reader::createFromString($csv); $reader->setHeaderOffset(0); @@ -802,8 +898,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/clients', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Name')); $this->assertEquals(100, $this->getFirstValueByColumn($csv, 'Balance')); @@ -848,8 +953,6 @@ class ReportCsvGenerationTest extends TestCase $arr = $response->json(); - // nlog($arr['message']); - $response = $this->withHeaders([ 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, @@ -857,16 +960,6 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(409); - // sleep(1); - - // $response = $this->withHeaders([ - // 'X-API-SECRET' => config('ninja.api_secret'), - // 'X-API-TOKEN' => $this->token, - // ])->postJson('/api/v1/reports/preview/'.$arr['message']); - - // $response->assertStatus(200); - - // nlog($response->json()); } @@ -899,7 +992,11 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/credits', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Credit Credit Number')); @@ -917,6 +1014,11 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/credits', $data)->assertStatus(200); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); + } public function testInvoiceCustomColumnsCsvGeneration() @@ -947,29 +1049,29 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/invoices', $data); - - $csv = $response->streamedContent(); -// nlog($csv); + + $response->assertStatus(200); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Invoice Invoice Number')); $this->assertEquals('Unpaid', $this->getFirstValueByColumn($csv, 'Payment Amount')); $this->assertEquals('', $this->getFirstValueByColumn($csv, 'Payment Date')); - $data = [ 'date_range' => 'all', 'report_keys' => $this->all_client_report_keys, 'send_email' => false, ]; - $response = $this->withHeaders([ 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/invoices', $data)->assertStatus(200); - - $data = [ 'date_range' => 'all', 'report_keys' => $this->all_payment_report_keys, @@ -981,7 +1083,6 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/invoices', $data)->assertStatus(200); - } public function testRecurringInvoiceCustomColumnsCsvGeneration() @@ -1013,14 +1114,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/recurring_invoices', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Recurring Invoice Invoice Number')); $this->assertEquals('Daily', $this->getFirstValueByColumn($csv, 'Recurring Invoice How Often')); - $data = [ 'date_range' => 'all', 'report_keys' => $this->all_client_report_keys, @@ -1066,7 +1170,15 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/recurring_invoices', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Recurring Invoice Invoice Number')); $this->assertEquals('Daily', $this->getFirstValueByColumn($csv, 'Recurring Invoice How Often')); @@ -1121,9 +1233,15 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/invoice_items', $data); - - $csv = $response->streamedContent(); -// nlog($csv);// + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Invoice Invoice Number')); $this->assertEquals('Unpaid', $this->getFirstValueByColumn($csv, 'Payment Amount')); @@ -1215,7 +1333,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/quote_items', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Quote Number')); @@ -1283,9 +1410,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/purchase_orders', $data); + $response->assertStatus(200); - $csv = $response->streamedContent(); + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Balance')); @@ -1355,7 +1490,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/purchase_order_items', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('Vendor 1', $this->getFirstValueByColumn($csv, 'Vendor Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Purchase Order Number')); @@ -1400,7 +1544,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/quotes', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('1234', $this->getFirstValueByColumn($csv, 'Quote Number')); @@ -1442,7 +1595,7 @@ class ReportCsvGenerationTest extends TestCase 'terms' => 'Terms', ]); - $invoice->service()->markPaid()->save(); + $invoice->service()->markPaid()->save(); $data = [ 'date_range' => 'all', @@ -1455,7 +1608,16 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/invoices', $data); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('12345', $this->getFirstValueByColumn($csv, 'Invoice Invoice Number')); @@ -1478,8 +1640,17 @@ class ReportCsvGenerationTest extends TestCase 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/contacts', $data); - - $csv = $response->streamedContent(); + + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $reader = Reader::createFromString($csv); $reader->setHeaderOffset(0); @@ -1549,7 +1720,16 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Credit Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Credit Balance')); @@ -1634,7 +1814,16 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); - $csv = $response->streamedContent(); + $response->assertStatus(200); + + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Invoice Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Invoice Balance')); @@ -1709,7 +1898,14 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); - $csv = $response->streamedContent(); + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); + $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Recurring Invoice Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Recurring Invoice Balance')); @@ -1785,9 +1981,13 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); - $csv = $response->streamedContent(); - - //nlog($csv); + $arr = $response->json(); + + $hash = $arr['message']; + + $response = $this->poll($hash); + + $csv = $response->body(); $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Quote Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Quote Balance')); @@ -1824,7 +2024,7 @@ class ReportCsvGenerationTest extends TestCase 'client_id' => $this->client->id, 'amount' => 100, 'public_notes' => 'Public', - 'private_notes' => 'Private', + 'private_notes' => 'Private', ]); $data = [ @@ -1838,42 +2038,43 @@ class ReportCsvGenerationTest extends TestCase 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/expenses', $data); - $response->assertStatus(200); - - $csv = $response->streamedContent(); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Expense Amount')); $this->assertEquals('Public', $this->getFirstValueByColumn($csv, 'Expense Public Notes')); $this->assertEquals('Private', $this->getFirstValueByColumn($csv, 'Expense Private Notes')); $this->assertEquals($this->user->present()->name(), $this->getFirstValueByColumn($csv, 'Expense User')); - - + $data = [ 'date_range' => 'all', 'report_keys' => $this->all_client_report_keys, 'send_email' => false, ]; - $response = $this->withHeaders([ 'X-API-SECRET' => config('ninja.api_secret'), 'X-API-TOKEN' => $this->token, ])->post('/api/v1/reports/expenses', $data)->assertStatus(200); - + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); } public function testExpenseCustomColumnsCsvGeneration() { - $vendor = + $vendor = \App\Models\Vendor::factory()->create( [ 'user_id' => $this->user->id, 'company_id' => $this->company->id, 'name' => 'Vendor 1', ] - ); Expense::factory()->create([ @@ -1883,8 +2084,8 @@ class ReportCsvGenerationTest extends TestCase 'vendor_id' => $vendor->id, 'amount' => 100, 'public_notes' => 'Public', - 'private_notes' => 'Private', - 'currency_id' => 1, + 'private_notes' => 'Private', + 'currency_id' => 1, ]); $data = [ @@ -1900,7 +2101,10 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); - $csv = $response->streamedContent(); + $arr = $response->json(); + $hash = $arr['message']; + $response = $this->poll($hash); + $csv = $response->body(); $this->assertEquals('bob', $this->getFirstValueByColumn($csv, 'Client Name')); $this->assertEquals('Vendor 1', $this->getFirstValueByColumn($csv, 'Vendor Name')); @@ -1910,4 +2114,4 @@ class ReportCsvGenerationTest extends TestCase } -} \ No newline at end of file +}