</head>
<body class="@yield('body-class')">
+ @include('layouts.parts.base-body-start')
@include('common.skip-to-content')
@include('common.notifications')
@include('common.header')
<script src="{{ versioned_asset('dist/app.js') }}" nonce="{{ $cspNonce }}"></script>
@yield('scripts')
+ @include('layouts.parts.base-body-end')
</body>
</html>
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
+use Illuminate\Support\Str;
use League\CommonMark\ConfigurableEnvironmentInterface;
class ThemeTest extends TestCase
$this->assertStringContainsString('Command ran!', $output);
}
+ public function test_body_start_and_end_template_files_can_be_used()
+ {
+ $bodyStartStr = 'barry-fought-against-the-panther';
+ $bodyEndStr = 'barry-lost-his-fight-with-grace';
+
+ $this->usingThemeFolder(function(string $folder) use ($bodyStartStr, $bodyEndStr) {
+ $viewDir = theme_path('layouts/parts');
+ mkdir($viewDir, 0777, true);
+ file_put_contents($viewDir . '/base-body-start.blade.php', $bodyStartStr);
+ file_put_contents($viewDir . '/base-body-end.blade.php', $bodyEndStr);
+
+ $resp = $this->asEditor()->get('/');
+ $resp->assertSee($bodyStartStr);
+ $resp->assertSee($bodyEndStr);
+ });
+ }
+
protected function usingThemeFolder(callable $callback)
{
// Create a folder and configure a theme
$themeFolderPath = theme_path('');
File::makeDirectory($themeFolderPath);
- call_user_func($callback, $themeFolderName);
+ // Run provided callback with theme env option set
+ $this->runWithEnv('APP_THEME', $themeFolderName, function() use ($callback, $themeFolderName) {
+ call_user_func($callback, $themeFolderName);
+ });
// Cleanup the custom theme folder we created
File::deleteDirectory($themeFolderPath);