From 4e924ab46d869860e045ba081235c4986136b036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Sun, 23 May 2021 17:13:13 +0300 Subject: [PATCH] fixed tests and bulk action export --- app/Abstracts/BulkAction.php | 31 ++++++++- app/Abstracts/Http/Controller.php | 85 ++---------------------- app/BulkActions/Banking/Transactions.php | 2 +- app/BulkActions/Banking/Transfers.php | 2 +- app/BulkActions/Common/Items.php | 2 +- app/BulkActions/Purchases/Bills.php | 2 +- app/BulkActions/Purchases/Payments.php | 2 +- app/BulkActions/Purchases/Vendors.php | 2 +- app/BulkActions/Sales/Customers.php | 2 +- app/BulkActions/Sales/Invoices.php | 2 +- app/BulkActions/Sales/Revenues.php | 2 +- app/Utilities/Export.php | 51 ++++++++++++++ app/Utilities/Import.php | 71 ++++++++++++++++++++ tests/Feature/Banking/TransfersTest.php | 20 ++++-- tests/Feature/Common/ItemsTest.php | 23 ++++--- tests/Feature/Purchases/BillsTest.php | 22 +++--- tests/Feature/Purchases/PaymentsTest.php | 20 ++++-- tests/Feature/Purchases/VendorsTest.php | 20 ++++-- tests/Feature/Sales/CustomersTest.php | 20 ++++-- tests/Feature/Sales/InvoicesTest.php | 22 +++--- tests/Feature/Sales/RevenuesTest.php | 20 ++++-- 21 files changed, 274 insertions(+), 149 deletions(-) create mode 100644 app/Utilities/Export.php create mode 100644 app/Utilities/Import.php diff --git a/app/Abstracts/BulkAction.php b/app/Abstracts/BulkAction.php index 41c2c1cf2..7057eda90 100644 --- a/app/Abstracts/BulkAction.php +++ b/app/Abstracts/BulkAction.php @@ -7,7 +7,8 @@ use App\Jobs\Common\UpdateContact; use App\Jobs\Banking\DeleteTransaction; use App\Traits\Jobs; use App\Traits\Relationships; -use Artisan; +use App\Utilities\Export; +use App\Utilities\Import; abstract class BulkAction { @@ -164,4 +165,32 @@ abstract class BulkAction } } } + + /** + * Import the excel file or catch errors + * + * @param $class + * @param $request + * @param $translation + * + * @return array + */ + public function importExcel($class, $request, $translation) + { + return Import::fromExcel($class, $request, $translation); + } + + /** + * Export the excel file or catch errors + * + * @param $class + * @param $translation + * @param $extension + * + * @return mixed + */ + public function exportExcel($class, $translation, $extension = 'xlsx') + { + return Export::toExcel($class, $translation, $extension); + } } diff --git a/app/Abstracts/Http/Controller.php b/app/Abstracts/Http/Controller.php index b5e1202e1..dbe2a5727 100644 --- a/app/Abstracts/Http/Controller.php +++ b/app/Abstracts/Http/Controller.php @@ -3,19 +3,17 @@ namespace App\Abstracts\Http; use App\Abstracts\Http\Response; -use App\Jobs\Auth\NotifyUser; -use App\Jobs\Common\CreateMediableForExport; -use App\Notifications\Common\ImportCompleted; use App\Traits\Jobs; use App\Traits\Permissions; use App\Traits\Relationships; +use App\Utilities\Export; +use App\Utilities\Import; use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Routing\Controller as BaseController; -use Illuminate\Support\Str; abstract class Controller extends BaseController { @@ -78,57 +76,11 @@ abstract class Controller extends BaseController * @param $request * @param $translation * - * @return mixed + * @return array */ public function importExcel($class, $request, $translation) { - try { - $file = $request->file('import'); - - if (should_queue()) { - $class->queue($file)->onQueue('imports')->chain([ - new NotifyUser(user(), new ImportCompleted), - ]); - - $message = trans('messages.success.import_queued', ['type' => $translation]); - } else { - $class->import($file); - - $message = trans('messages.success.imported', ['type' => $translation]); - } - - $response = [ - 'success' => true, - 'error' => false, - 'data' => null, - 'message' => $message, - ]; - } catch (\Throwable $e) { - if ($e instanceof \Maatwebsite\Excel\Validators\ValidationException) { - foreach ($e->failures() as $failure) { - $message = trans('messages.error.import_column', [ - 'message' => collect($failure->errors())->first(), - 'column' => $failure->attribute(), - 'line' => $failure->row(), - ]); - - flash($message)->error()->important(); - } - - $message = ''; - } else { - $message = $e->getMessage(); - } - - $response = [ - 'success' => false, - 'error' => true, - 'data' => null, - 'message' => $message, - ]; - } - - return $response; + return Import::fromExcel($class, $request, $translation); } /** @@ -142,33 +94,6 @@ abstract class Controller extends BaseController */ public function exportExcel($class, $translation, $extension = 'xlsx') { - try { - $file_name = Str::filename($translation) . '-' . time() . '.' . $extension; - - if (should_queue()) { - $disk = 'temp'; - - if (config('excel.temporary_files.remote_disk') !== null) { - $disk = config('excel.temporary_files.remote_disk'); - $file_name = config('excel.temporary_files.remote_prefix') . $file_name; - } - - $class->queue($file_name, $disk)->onQueue('exports')->chain([ - new CreateMediableForExport(user(), $file_name), - ]); - - $message = trans('messages.success.export_queued', ['type' => $translation]); - - flash($message)->success(); - - return back(); - } else { - return $class->download($file_name); - } - } catch (\Throwable $e) { - flash($e->getMessage())->error()->important(); - - return back(); - } + return Export::toExcel($class, $translation, $extension); } } diff --git a/app/BulkActions/Banking/Transactions.php b/app/BulkActions/Banking/Transactions.php index 6c26a728c..eb53cc14d 100644 --- a/app/BulkActions/Banking/Transactions.php +++ b/app/BulkActions/Banking/Transactions.php @@ -32,6 +32,6 @@ class Transactions extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.transactions', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.transactions', 2)); } } diff --git a/app/BulkActions/Banking/Transfers.php b/app/BulkActions/Banking/Transfers.php index 2f2f99410..d2065319a 100644 --- a/app/BulkActions/Banking/Transfers.php +++ b/app/BulkActions/Banking/Transfers.php @@ -41,6 +41,6 @@ class Transfers extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.transfers', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.transfers', 2)); } } diff --git a/app/BulkActions/Common/Items.php b/app/BulkActions/Common/Items.php index 2a62296f7..8cc06f8de 100644 --- a/app/BulkActions/Common/Items.php +++ b/app/BulkActions/Common/Items.php @@ -55,6 +55,6 @@ class Items extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), trans_choice('general.items', 2) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.items', 2)); } } diff --git a/app/BulkActions/Purchases/Bills.php b/app/BulkActions/Purchases/Bills.php index b8d3aca1c..97bafb589 100644 --- a/app/BulkActions/Purchases/Bills.php +++ b/app/BulkActions/Purchases/Bills.php @@ -104,6 +104,6 @@ class Bills extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.bills', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.bills', 2)); } } diff --git a/app/BulkActions/Purchases/Payments.php b/app/BulkActions/Purchases/Payments.php index 4cf2d1b6a..862f1cc30 100644 --- a/app/BulkActions/Purchases/Payments.php +++ b/app/BulkActions/Purchases/Payments.php @@ -32,6 +32,6 @@ class Payments extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.payments', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.payments', 2)); } } diff --git a/app/BulkActions/Purchases/Vendors.php b/app/BulkActions/Purchases/Vendors.php index 7f6040ea0..92b39286a 100644 --- a/app/BulkActions/Purchases/Vendors.php +++ b/app/BulkActions/Purchases/Vendors.php @@ -47,6 +47,6 @@ class Vendors extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.vendors', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.vendors', 2)); } } diff --git a/app/BulkActions/Sales/Customers.php b/app/BulkActions/Sales/Customers.php index 0855c100a..8e7f57ed5 100644 --- a/app/BulkActions/Sales/Customers.php +++ b/app/BulkActions/Sales/Customers.php @@ -47,6 +47,6 @@ class Customers extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.customers', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.customers', 2)); } } diff --git a/app/BulkActions/Sales/Invoices.php b/app/BulkActions/Sales/Invoices.php index 9ad8298e6..176a40a0a 100644 --- a/app/BulkActions/Sales/Invoices.php +++ b/app/BulkActions/Sales/Invoices.php @@ -108,6 +108,6 @@ class Invoices extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.invoices', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.invoices', 2)); } } diff --git a/app/BulkActions/Sales/Revenues.php b/app/BulkActions/Sales/Revenues.php index ebb07f795..199ce6431 100644 --- a/app/BulkActions/Sales/Revenues.php +++ b/app/BulkActions/Sales/Revenues.php @@ -32,6 +32,6 @@ class Revenues extends BulkAction { $selected = $this->getSelectedInput($request); - return \Excel::download(new Export($selected), \Str::filename(trans_choice('general.revenues', 2)) . '.xlsx'); + return $this->exportExcel(new Export($selected), trans_choice('general.revenues', 2)); } } diff --git a/app/Utilities/Export.php b/app/Utilities/Export.php new file mode 100644 index 000000000..8d11a89ce --- /dev/null +++ b/app/Utilities/Export.php @@ -0,0 +1,51 @@ +queue($file_name, $disk)->onQueue('exports')->chain([ + new CreateMediableForExport(user(), $file_name), + ]); + + $message = trans('messages.success.export_queued', ['type' => $translation]); + + flash($message)->success(); + + return back(); + } else { + return $class->download($file_name); + } + } catch (Throwable $e) { + flash($e->getMessage())->error()->important(); + + return back(); + } + } +} diff --git a/app/Utilities/Import.php b/app/Utilities/Import.php new file mode 100644 index 000000000..e177bfd41 --- /dev/null +++ b/app/Utilities/Import.php @@ -0,0 +1,71 @@ +file('import'); + + if (should_queue()) { + $class->queue($file)->onQueue('imports')->chain([ + new NotifyUser(user(), new ImportCompleted), + ]); + + $message = trans('messages.success.import_queued', ['type' => $translation]); + } else { + $class->import($file); + + $message = trans('messages.success.imported', ['type' => $translation]); + } + + $response = [ + 'success' => true, + 'error' => false, + 'data' => null, + 'message' => $message, + ]; + } catch (Throwable $e) { + if ($e instanceof ValidationException) { + foreach ($e->failures() as $failure) { + $message = trans('messages.error.import_column', [ + 'message' => collect($failure->errors())->first(), + 'column' => $failure->attribute(), + 'line' => $failure->row(), + ]); + + flash($message)->error()->important(); + } + + $message = ''; + } else { + $message = $e->getMessage(); + } + + $response = [ + 'success' => false, + 'error' => true, + 'data' => null, + 'message' => $message, + ]; + } + + return $response; + } +} diff --git a/tests/Feature/Banking/TransfersTest.php b/tests/Feature/Banking/TransfersTest.php index 27afbc121..719fe43d0 100644 --- a/tests/Feature/Banking/TransfersTest.php +++ b/tests/Feature/Banking/TransfersTest.php @@ -84,8 +84,10 @@ class TransfersTest extends FeatureTestCase ->get(route('transfers.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.transfers', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.transfers', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. return $export->collection()->count() === $count; @@ -95,22 +97,26 @@ class TransfersTest extends FeatureTestCase public function testItShouldExportSelectedTransfers() { - $count = 5; - $transfers = Transfer::factory()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $transfers = Transfer::factory()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'banking', 'type' => 'transfers']), - ['handle' => 'export', 'selected' => [$transfers->random()->id]] + ['handle' => 'export', 'selected' => $transfers->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.transfers', 2)) . '.xlsx', - function (Export $export) { - return $export->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.transfers', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Common/ItemsTest.php b/tests/Feature/Common/ItemsTest.php index eb696e0ca..e83900502 100644 --- a/tests/Feature/Common/ItemsTest.php +++ b/tests/Feature/Common/ItemsTest.php @@ -96,33 +96,40 @@ class ItemsTest extends FeatureTestCase ->get(route('items.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.items', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.items', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. - return $export->sheets()['items']->collection()->count() === $count; + return $export->sheets()[0]->collection()->count() === $count; } ); } public function testItShouldExportSelectedItems() { - $count = 5; - $items = Item::factory()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $items = Item::factory()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'common', 'type' => 'items']), - ['handle' => 'export', 'selected' => [$items->random()->id]] + ['handle' => 'export', 'selected' => $items->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.items', 2)) . '.xlsx', - function (Export $export) { - return $export->sheets()['items']->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.items', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + // Assert that the correct export is downloaded. + return $export->sheets()[0]->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Purchases/BillsTest.php b/tests/Feature/Purchases/BillsTest.php index 10a7866bc..74c5f25e5 100644 --- a/tests/Feature/Purchases/BillsTest.php +++ b/tests/Feature/Purchases/BillsTest.php @@ -118,33 +118,39 @@ class BillsTest extends FeatureTestCase ->get(route('bills.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.bills', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.bills', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. - return $export->sheets()['bills']->collection()->count() === $count; + return $export->sheets()[0]->collection()->count() === $count; } ); } public function testItShouldExportSelectedBills() { - $count = 5; - $bills = Document::factory()->bill()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $bills = Document::factory()->bill()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'purchases', 'type' => 'bills']), - ['handle' => 'export', 'selected' => [$bills->random()->id]] + ['handle' => 'export', 'selected' => $bills->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.bills', 2)) . '.xlsx', - function (Export $export) { - return $export->sheets()['bills']->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.bills', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->sheets()[0]->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Purchases/PaymentsTest.php b/tests/Feature/Purchases/PaymentsTest.php index 11a6ea6ab..46101dc01 100644 --- a/tests/Feature/Purchases/PaymentsTest.php +++ b/tests/Feature/Purchases/PaymentsTest.php @@ -96,8 +96,10 @@ class PaymentsTest extends FeatureTestCase ->get(route('payments.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.payments', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.payments', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. return $export->collection()->count() === $count; @@ -107,22 +109,26 @@ class PaymentsTest extends FeatureTestCase public function testItShouldExportSelectedPayments() { - $count = 5; - $payments = Transaction::factory()->expense()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $payments = Transaction::factory()->expense()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'purchases', 'type' => 'payments']), - ['handle' => 'export', 'selected' => [$payments->random()->id]] + ['handle' => 'export', 'selected' => $payments->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.payments', 2)) . '.xlsx', - function (Export $export) { - return $export->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.payments', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Purchases/VendorsTest.php b/tests/Feature/Purchases/VendorsTest.php index f96c57145..064479742 100644 --- a/tests/Feature/Purchases/VendorsTest.php +++ b/tests/Feature/Purchases/VendorsTest.php @@ -110,8 +110,10 @@ class VendorsTest extends FeatureTestCase ->get(route('vendors.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.vendors', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.vendors', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. return $export->collection()->count() === $count; @@ -121,22 +123,26 @@ class VendorsTest extends FeatureTestCase public function testItShouldExportSelectedVendors() { - $count = 5; - $vendors = Contact::factory()->vendor()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $vendors = Contact::factory()->vendor()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'purchases', 'type' => 'vendors']), - ['handle' => 'export', 'selected' => [$vendors->random()->id]] + ['handle' => 'export', 'selected' => $vendors->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.vendors', 2)) . '.xlsx', - function (Export $export) { - return $export->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.vendors', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Sales/CustomersTest.php b/tests/Feature/Sales/CustomersTest.php index 5bd73dde2..14b7153a6 100644 --- a/tests/Feature/Sales/CustomersTest.php +++ b/tests/Feature/Sales/CustomersTest.php @@ -131,8 +131,10 @@ class CustomersTest extends FeatureTestCase ->get(route('customers.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.customers', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.customers', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. return $export->collection()->count() === $count; @@ -142,22 +144,26 @@ class CustomersTest extends FeatureTestCase public function testItShouldExportSelectedCustomers() { - $count = 5; - $customers = Contact::factory()->customer()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $customers = Contact::factory()->customer()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'sales', 'type' => 'customers']), - ['handle' => 'export', 'selected' => [$customers->random()->id]] + ['handle' => 'export', 'selected' => $customers->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.customers', 2)) . '.xlsx', - function (Export $export) { - return $export->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.customers', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Sales/InvoicesTest.php b/tests/Feature/Sales/InvoicesTest.php index 5ead4eaa9..d6ad4254a 100644 --- a/tests/Feature/Sales/InvoicesTest.php +++ b/tests/Feature/Sales/InvoicesTest.php @@ -129,33 +129,39 @@ class InvoicesTest extends FeatureTestCase ->get(route('invoices.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.invoices', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.invoices', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. - return $export->sheets()['invoices']->collection()->count() === $count; + return $export->sheets()[0]->collection()->count() === $count; } ); } public function testItShouldExportSelectedInvoices() { - $count = 5; - $invoices = Document::factory()->invoice()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $invoices = Document::factory()->invoice()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'sales', 'type' => 'invoices']), - ['handle' => 'export', 'selected' => [$invoices->random()->id]] + ['handle' => 'export', 'selected' => $invoices->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.invoices', 2)) . '.xlsx', - function (Export $export) { - return $export->sheets()['invoices']->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.invoices', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->sheets()[0]->collection()->count() === $select_count; } ); } diff --git a/tests/Feature/Sales/RevenuesTest.php b/tests/Feature/Sales/RevenuesTest.php index 38ebf6766..ca37b8606 100644 --- a/tests/Feature/Sales/RevenuesTest.php +++ b/tests/Feature/Sales/RevenuesTest.php @@ -96,8 +96,10 @@ class RevenuesTest extends FeatureTestCase ->get(route('revenues.export')) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.revenues', 2)) . '.xlsx', + '/' . \Str::filename(trans_choice('general.revenues', 2)) . '-\d{10}\.xlsx/', function (Export $export) use ($count) { // Assert that the correct export is downloaded. return $export->collection()->count() === $count; @@ -107,22 +109,26 @@ class RevenuesTest extends FeatureTestCase public function testItShouldExportSelectedRevenues() { - $count = 5; - $revenues = Transaction::factory()->income()->count($count)->create(); + $create_count = 5; + $select_count = 3; + + $revenues = Transaction::factory()->income()->count($create_count)->create(); \Excel::fake(); $this->loginAs() ->post( route('bulk-actions.action', ['group' => 'sales', 'type' => 'revenues']), - ['handle' => 'export', 'selected' => [$revenues->random()->id]] + ['handle' => 'export', 'selected' => $revenues->take($select_count)->pluck('id')->toArray()] ) ->assertStatus(200); + \Excel::matchByRegex(); + \Excel::assertDownloaded( - \Str::filename(trans_choice('general.revenues', 2)) . '.xlsx', - function (Export $export) { - return $export->collection()->count() === 1; + '/' . \Str::filename(trans_choice('general.revenues', 2)) . '-\d{10}\.xlsx/', + function (Export $export) use ($select_count) { + return $export->collection()->count() === $select_count; } ); }