get('/bookmarklets/ccli-import.js'); $response->assertStatus(200); $response->assertHeader('Content-Type', 'text/javascript; charset=utf-8'); } public function test_bookmarklet_response_starts_with_javascript_prefix(): void { $response = $this->get('/bookmarklets/ccli-import.js'); expect($response->getContent())->toStartWith('javascript:'); } public function test_bookmarklet_response_is_a_single_line_with_no_actual_newlines(): void { $response = $this->get('/bookmarklets/ccli-import.js'); $content = (string) $response->getContent(); expect(substr_count($content, "\n"))->toBe(0); } public function test_bookmarklet_response_contains_app_url_and_import_path(): void { $response = $this->get('/bookmarklets/ccli-import.js'); $content = $response->getContent(); expect($content)->toContain('import-from-ccli-paste'); expect($content)->toContain('songselect.ccli.com'); expect($content)->toContain('btoa'); } public function test_bookmarklet_response_uses_request_host_instead_of_configured_app_url(): void { config(['app.url' => 'http://pp-planer.test']); $response = $this ->withServerVariables(['HTTP_HOST' => 'pp-planer.ddev.site', 'HTTPS' => 'on']) ->get('/bookmarklets/ccli-import.js'); $content = $response->getContent(); expect($content)->toContain('pp-planer.ddev.site') ->not->toContain('pp-planer.test'); } public function test_bookmarklet_endpoint_does_not_require_authentication(): void { $response = $this->get('/bookmarklets/ccli-import.js'); $response->assertStatus(200); $response->assertHeader('Content-Type', 'text/javascript; charset=utf-8'); } }