'DatabaseSeeder', '--force' => true]); Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]); $user = User::find(1); $this->company = $user->companies()->first(); $this->withHeaders(['company' => $this->company->id]); Sanctum::actingAs($user, ['*']); Storage::fake('pdf_templates'); Storage::fake('public'); // The disk and the view namespace are registered separately, and only the // disk is faked. Point the namespace at the same place so a template written // here is the one Blade resolves. View::addNamespace('pdf_templates', Storage::disk('pdf_templates')->path('')); View::getFinder()->flush(); config(['pdf.driver' => 'dompdf']); $this->override = function (string $type, string $name, string $markup) { $dir = Storage::disk('pdf_templates')->path($type); File::ensureDirectoryExists($dir); File::put("{$dir}/{$name}.blade.php", $markup); View::getFinder()->flush(); }; }); test('the built-in view is used when nothing overrides it', function () { expect(PdfTemplateUtils::resolveView('payment', 'payment'))->toBe('app.pdf.payment.payment'); expect(PdfTemplateUtils::resolveView('reports', 'expenses'))->toBe('app.pdf.reports.expenses'); }); test('a custom file takes over', function () { ($this->override)('payment', 'payment', ''); expect(PdfTemplateUtils::resolveView('payment', 'payment'))->toBe('pdf_templates::payment.payment'); }); test('an overridden payment receipt is what actually renders', function () { ($this->override)('payment', 'payment', 'OVERRIDDEN RECEIPT {{ $payment->payment_number }}'); $payment = Payment::factory()->create(['company_id' => $this->company->id]); get("/payments/pdf/{$payment->unique_hash}?preview=true") ->assertOk() ->assertSee('OVERRIDDEN RECEIPT') ->assertSee($payment->payment_number); }); test('an overridden report is what actually renders', function () { ($this->override)('reports', 'expenses', 'OVERRIDDEN REPORT for {{ $company->name }}'); get("/reports/expenses/{$this->company->unique_hash}?from_date=2020-01-01&to_date=2030-12-31&preview=true") ->assertOk() ->assertSee('OVERRIDDEN REPORT') ->assertSee($this->company->name); }); /** * The override receives the same shared data the built-in does, so a custom file * can use every variable the original template used. */ test('an overridden report still renders as a pdf', function () { ($this->override)('reports', 'expenses', '{{ $currency->name }} {{ $from_date }}'); $response = get("/reports/expenses/{$this->company->unique_hash}?from_date=2020-01-01&to_date=2030-12-31"); $response->assertOk(); expect($response->getContent())->toStartWith('%PDF-'); });