123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- <?php
- namespace Maatwebsite\Excel\Tests;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Foundation\Bus\PendingDispatch;
- use Illuminate\Support\Collection;
- use Maatwebsite\Excel\Concerns\FromCollection;
- use Maatwebsite\Excel\Concerns\ToModel;
- use Maatwebsite\Excel\Facades\Excel as ExcelFacade;
- use Maatwebsite\Excel\Fakes\ExcelFake;
- use Maatwebsite\Excel\Tests\Data\Stubs\ChainedJobStub;
- use Maatwebsite\Excel\Tests\Data\Stubs\Database\User;
- use Symfony\Component\HttpFoundation\BinaryFileResponse;
- class ExcelFakeTest extends TestCase
- {
- /**
- * @test
- */
- public function can_fake_an_export()
- {
- ExcelFacade::fake();
- // Excel instance should be swapped to the fake now.
- $this->assertInstanceOf(ExcelFake::class, $this->app->make('excel'));
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_downloaded_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::download($this->givenExport(), 'downloaded-filename.csv');
- $this->assertInstanceOf(BinaryFileResponse::class, $response);
- ExcelFacade::assertDownloaded('downloaded-filename.csv');
- ExcelFacade::assertDownloaded('downloaded-filename.csv', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertDownloaded('/\w{10}-\w{8}\.csv/');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_stored_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::store($this->givenExport(), 'stored-filename.csv', 's3');
- $this->assertTrue($response);
- ExcelFacade::assertStored('stored-filename.csv', 's3');
- ExcelFacade::assertStored('stored-filename.csv', 's3', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertStored('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_regex_against_a_fake_stored_export_with_multiple_files()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::store($this->givenExport(), 'stored-filename-one.csv', 's3');
- $this->assertTrue($response);
- $response = ExcelFacade::store($this->givenExport(), 'stored-filename-two.csv', 's3');
- $this->assertTrue($response);
- ExcelFacade::matchByRegex();
- ExcelFacade::assertStored('/\w{6}-\w{8}-one\.csv/', 's3');
- ExcelFacade::assertStored('/\w{6}-\w{8}-two\.csv/', 's3');
- }
- /**
- * @test
- */
- public function a_callback_can_be_passed_as_the_second_argument_when_asserting_against_a_faked_stored_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::store($this->givenExport(), 'stored-filename.csv');
- $this->assertTrue($response);
- ExcelFacade::assertStored('stored-filename.csv');
- ExcelFacade::assertStored('stored-filename.csv', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertStored('/\w{6}-\w{8}\.csv/');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_queued_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::queue($this->givenExport(), 'queued-filename.csv', 's3');
- $this->assertInstanceOf(PendingDispatch::class, $response);
- ExcelFacade::assertQueued('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertQueued('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_implicitly_queued_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::store($this->givenQueuedExport(), 'queued-filename.csv', 's3');
- $this->assertInstanceOf(PendingDispatch::class, $response);
- ExcelFacade::assertStored('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertQueued('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_queued_export_with_chain()
- {
- ExcelFacade::fake();
- ExcelFacade::queue(
- $this->givenQueuedExport(), 'queued-filename.csv', 's3'
- )->chain([
- new ChainedJobStub(),
- ]);
- ExcelFacade::assertQueuedWithChain([
- new ChainedJobStub(),
- ]);
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_raw_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::raw($this->givenExport(), \Maatwebsite\Excel\Excel::XLSX);
- $this->assertIsString($response);
- ExcelFacade::assertExportedInRaw(get_class($this->givenExport()));
- ExcelFacade::assertExportedInRaw(get_class($this->givenExport()), function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_import()
- {
- ExcelFacade::fake();
- ExcelFacade::import($this->givenImport(), 'stored-filename.csv', 's3');
- ExcelFacade::assertImported('stored-filename.csv', 's3');
- ExcelFacade::assertImported('stored-filename.csv', 's3', function (ToModel $import) {
- return $import->model([]) instanceof User;
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertImported('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_import_with_uploaded_file()
- {
- ExcelFacade::fake();
- ExcelFacade::import($this->givenImport(), $this->givenUploadedFile(__DIR__ . '/Data/Disks/Local/import.xlsx'));
- ExcelFacade::assertImported('import.xlsx');
- ExcelFacade::assertImported('import.xlsx', function (ToModel $import) {
- return $import->model([]) instanceof User;
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertImported('/\w{6}\.xlsx/');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_queued_import()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::queueImport($this->givenQueuedImport(), 'queued-filename.csv', 's3');
- $this->assertInstanceOf(PendingDispatch::class, $response);
- ExcelFacade::assertImported('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3', function (ToModel $import) {
- return $import->model([]) instanceof User;
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertQueued('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_implicitly_queued_import()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::import($this->givenQueuedImport(), 'queued-filename.csv', 's3');
- $this->assertInstanceOf(PendingDispatch::class, $response);
- ExcelFacade::assertImported('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3');
- ExcelFacade::assertQueued('queued-filename.csv', 's3', function (ToModel $import) {
- return $import->model([]) instanceof User;
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertQueued('/\w{6}-\w{8}\.csv/', 's3');
- }
- /**
- * @test
- */
- public function can_assert_against_a_fake_queued_import_with_chain()
- {
- ExcelFacade::fake();
- ExcelFacade::queueImport(
- $this->givenQueuedImport(), 'queued-filename.csv', 's3'
- )->chain([
- new ChainedJobStub(),
- ]);
- ExcelFacade::assertQueuedWithChain([
- new ChainedJobStub(),
- ]);
- }
- /**
- * @test
- */
- public function a_callback_can_be_passed_as_the_second_argument_when_asserting_against_a_faked_queued_export()
- {
- ExcelFacade::fake();
- $response = ExcelFacade::queue($this->givenExport(), 'queued-filename.csv');
- $this->assertInstanceOf(PendingDispatch::class, $response);
- ExcelFacade::assertQueued('queued-filename.csv');
- ExcelFacade::assertQueued('queued-filename.csv', function (FromCollection $export) {
- return $export->collection()->contains('foo');
- });
- ExcelFacade::matchByRegex();
- ExcelFacade::assertQueued('/\w{6}-\w{8}\.csv/');
- }
- /**
- * @return FromCollection
- */
- private function givenExport()
- {
- return new class implements FromCollection
- {
- /**
- * @return Collection
- */
- public function collection()
- {
- return collect(['foo', 'bar']);
- }
- };
- }
- /**
- * @return FromCollection
- */
- private function givenQueuedExport()
- {
- return new class implements FromCollection, ShouldQueue
- {
- /**
- * @return Collection
- */
- public function collection()
- {
- return collect(['foo', 'bar']);
- }
- };
- }
- /**
- * @return object
- */
- private function givenImport()
- {
- return new class implements ToModel
- {
- /**
- * @param array $row
- * @return Model|null
- */
- public function model(array $row)
- {
- return new User([]);
- }
- };
- }
- /**
- * @return object
- */
- private function givenQueuedImport()
- {
- return new class implements ToModel, ShouldQueue
- {
- /**
- * @param array $row
- * @return Model|null
- */
- public function model(array $row)
- {
- return new User([]);
- }
- };
- }
- }
|