public async Task Scaffolding_HTML_trydotnet_js_autoEnable_useWasmRunner_is_true_when_package_is_specified_and_supports_Wasm() { var(name, addSource) = await Create.NupkgWithBlazorEnabled("packageName"); var startupOptions = new StartupOptions( dir: TestAssets.SampleConsole, addPackageSource: new WorkspaceServer.PackageSource(addSource.FullName), package: name); using (var agent = new AgentService(startupOptions)) { var response = await agent.GetAsync(@"/Subdirectory/Tutorial.md"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var scripts = document.DocumentNode .Descendants("body") .Single() .Descendants("script") .Select(s => s.InnerHtml); scripts.Should() .Contain(s => s.Contains(@"trydotnet.autoEnable({ apiBaseAddress: new URL(""http://localhost""), useWasmRunner: true });")); } }
public async Task Embeddable_returns_referrer() { using (var agent = new AgentService()) { var referrer = "http://coolreferrer"; var response = await agent.GetAsync(@"/ide", referrer); response.EnsureSuccess(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var script = document.DocumentNode .Descendants("script") .FirstOrDefault(s => s.Attributes["id"]?.Value == "bundlejs"); script.Should().NotBeNull(); var additionalParameters = script.Attributes["data-client-parameters"]; additionalParameters.Should().NotBeNull(); var json = HttpUtility.HtmlDecode(additionalParameters.Value); var paramsObject = json.FromJsonTo <EmbeddableController.ClientParameters>(); paramsObject.Referrer.Should().Be(new Uri(referrer)); } }
public async Task Request_for_non_existent_markdown_file_returns_404() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"/DOESNOTEXIST"); response.Should().BeNotFound(); } }
public async Task Returns_200_if_the_package_exists() { var packageVersion = "1.0.0"; using (var agent = new AgentService()) { var response = await agent.GetAsync($@"/packages/console/{packageVersion}"); response.StatusCode.Should().Be(HttpStatusCode.OK); } }
public async Task Can_serve_nodatime_code_runner() { using (var agent = new AgentService(StartupOptions.FromCommandLine("hosted"))) { var response = await agent.GetAsync(@"/LocalCodeRunner/blazor-nodatime.api"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); } }
public async Task Returns_404_if_the_package_does_not_exist() { var packageName = Guid.NewGuid().ToString(); var packageVersion = "1.0.0"; using (var agent = new AgentService()) { var response = await agent.GetAsync($@"/packages/{packageName}/{packageVersion}"); response.StatusCode.Should().Be(HttpStatusCode.NotFound); } }
public async Task Can_serve_from_webassembly_controller() { var(name, addSource) = await Create.NupkgWithBlazorEnabled(); using (var agent = new AgentService(new StartupOptions(addPackageSource: new WorkspaceServer.PackageSource(addSource.FullName)))) { var response = await agent.GetAsync($@"/LocalCodeRunner/{name}"); response.EnsureSuccess(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); response = await agent.GetAsync($@"/LocalCodeRunner/{name}/interop.js"); response.EnsureSuccess(); result = await response.Content.ReadAsStringAsync(); result.Should().Contain("DotNet.invokeMethodAsync"); } }
public async Task Can_serve_blazor_console_code_runner() { using (var agent = new AgentService()) { var response = await agent.GetAsync(@"/LocalCodeRunner/blazor-console"); response.EnsureSuccess(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); } }
public async Task Can_serve_from_webassembly_controller() { var(name, addSource) = await Create.NupkgWithBlazorEnabled(); using (var agent = new AgentService(new StartupOptions(addPackageSource: new PackageSource(addSource.FullName)))) { var response = await agent.GetAsync($@"/LocalCodeRunner/{name}"); response.EnsureSuccess(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); response = await agent.GetAsync($@"/LocalCodeRunner/{name}/interop.js"); response.EnsureSuccess(); result = await response.Content.ReadAsStringAsync(); result.Should().Contain("invokeMethodAsync"); } // Now do the same thing in hosted mode using the already installed package using (var agent = new AgentService(StartupOptions.FromCommandLine("hosted"))) { var response = await agent.GetAsync($@"/LocalCodeRunner/{name}"); response.EnsureSuccess(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); response = await agent.GetAsync($@"/LocalCodeRunner/{name}/interop.js"); response.EnsureSuccess(); result = await response.Content.ReadAsStringAsync(); result.Should().Contain("invokeMethodAsync"); } }
public async Task Return_html_for_existing_markdown_files_in_a_subdirectory() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"Subdirectory/Tutorial.md"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("<em>tutorial file</em>"); } }
public async Task Return_html_for_an_existing_markdown_file() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"Readme.md"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); response.Content.Headers.ContentType.MediaType.Should().Be("text/html"); result.Should().Contain("<em>markdown file</em>"); } }
public async Task Can_serve_nodatime_code_runner() { var registry = await Default.PackageRegistry.ValueAsync(); var nodatime = await registry.Get <WorkspaceServer.Packaging.Package2>("blazor-nodatime.api"); using (var agent = new AgentService(StartupOptions.FromCommandLine("hosted"))) { var response = await agent.GetAsync(@"/LocalCodeRunner/blazor-nodatime.api"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.Should().Contain("Loading..."); } }
public async Task Returns_IsWasmSupported_false_if_the_package_does_not_contain_wasm_runner() { var packageVersion = "1.0.0"; using (var agent = new AgentService()) { var response = await agent.GetAsync($@"/packages/console/{packageVersion}"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.FromJsonTo <Package>() .IsWasmSupported .Should() .BeFalse(); } }
public async Task Returns_IsWasmSupported_true_if_the_package_contains_wasm_runner() { var package = await Create.InstalledPackageWithBlazorEnabled(); var packageVersion = "1.0.0"; using (var agent = new AgentService()) { var response = await agent.GetAsync($"/packages/{package.Name}/{packageVersion}"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.FromJsonTo <Package>() .IsWasmSupported .Should() .BeTrue(); } }
public async Task Is_able_to_serve_static_files() { using (var disposableDirectory = DisposableDirectory.Create()) { System.IO.File.WriteAllText(Path.Combine(disposableDirectory.Directory.FullName, "a.js"), "alert('This is an alert from javascript');"); var options = new StartupOptions(dir: disposableDirectory.Directory); using (var agent = new AgentService(options: options)) { var response = await agent.GetAsync(@"/a.js"); response.Should().BeSuccessful(); response.Content.Headers.ContentType.MediaType.Should().Be("application/javascript"); var html = await response.Content.ReadAsStringAsync(); html.Should().Be("alert('This is an alert from javascript');"); } } }
public async Task Returns_blazor_false_if_the_package_does_not_contain_blazor_runner() { var package = await Create.ConsoleWorkspaceCopy(); var packageVersion = "1.0.0"; using (var agent = new AgentService()) { var response = await agent.GetAsync($@"/packages/{package.Name}/{packageVersion}"); response.Should().BeSuccessful(); var result = await response.Content.ReadAsStringAsync(); result.FromJsonTo <Package>() .IsBlazorSupported .Should() .BeFalse(); } }
public async Task Scaffolding_HTML_trydotnet_js_autoEnable_useBlazor_is_true_when_package_is_not_specified_and_supports_wasmrunner() { var(name, addSource) = await Create.NupkgWithBlazorEnabled("packageName"); using (var dir = DisposableDirectory.Create()) { var text = $@" ```cs --package {name} ```"; var path = Path.Combine(dir.Directory.FullName, "BlazorTutorial.md"); File.WriteAllText(path, text); var startupOptions = new StartupOptions( dir: dir.Directory, addPackageSource: new WorkspaceServer.PackageSource(addSource.FullName)); using (var agent = new AgentService(startupOptions)) { var response = await agent.GetAsync(@"/BlazorTutorial.md"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var scripts = document.DocumentNode .Descendants("body") .Single() .Descendants("script") .Select(s => s.InnerHtml); scripts.Should() .Contain(s => s.Contains(@"trydotnet.autoEnable({ apiBaseAddress: new URL(""http://localhost""), useWasmRunner: true });")); } } }
public async Task Scaffolding_HTML_includes_trydotnet_js_script_link() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"Subdirectory/Tutorial.md"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var script = document.DocumentNode .Descendants("head") .Single() .Descendants("script") .FirstOrDefault(); script.Attributes["src"].Value.Should().StartWith("/api/trydotnet.min.js?v="); } }
public async Task Lists_markdown_files_when_a_folder_is_requested() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"/"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var links = htmlDoc.DocumentNode .SelectNodes("//a") .Select(a => a.Attributes["href"].Value) .ToArray(); links.Should().Contain("./Readme.md"); links.Should().Contain("./Subdirectory/Tutorial.md"); } }
public async Task Scaffolding_HTML_includes_trydotnet_js_autoEnable_invocation() { using (var agent = new AgentService(new StartupOptions(dir: TestAssets.SampleConsole))) { var response = await agent.GetAsync(@"Subdirectory/Tutorial.md"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var script = document.DocumentNode .Descendants("body") .Single() .Descendants("script") .FirstOrDefault(s => s.InnerHtml.Contains(@"trydotnet.autoEnable({ apiBaseAddress: new URL(""http://localhost""), useBlazor:false });")); script.Should().NotBeNull(); } }
public async Task Scaffolding_HTML_includes_trydotnet_js_autoEnable_invocation_with_useBlazor_defaulting_to_false() { using (var agent = new AgentService(new StartupOptions(rootDirectory: new FileSystemDirectoryAccessor(TestAssets.SampleConsole)))) { var response = await agent.GetAsync(@"Subdirectory/Tutorial.md"); response.Should().BeSuccessful(); var html = await response.Content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(html); var scripts = document.DocumentNode .Descendants("body") .Single() .Descendants("script") .Select(s => s.InnerHtml); scripts.Should() .Contain(s => s.Contains(@"trydotnet.autoEnable({ apiBaseAddress: new URL(""http://localhost""), useWasmRunner: false });")); } }