Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/aspnetcore.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/ProjectTemplates/test/Templates.Blazor.Tests/EmptyBlazorWasmTemplateTest.cs')
-rw-r--r--src/ProjectTemplates/test/Templates.Blazor.Tests/EmptyBlazorWasmTemplateTest.cs114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/EmptyBlazorWasmTemplateTest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/EmptyBlazorWasmTemplateTest.cs
new file mode 100644
index 0000000000..9d9fa41057
--- /dev/null
+++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/EmptyBlazorWasmTemplateTest.cs
@@ -0,0 +1,114 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Testing;
+using Newtonsoft.Json.Linq;
+using Templates.Test.Helpers;
+using Xunit;
+using Xunit.Abstractions;
+using Xunit.Sdk;
+
+namespace Templates.Blazor.Test;
+
+public class EmptyBlazorWasmTemplateTest : BlazorTemplateTest
+{
+ public EmptyBlazorWasmTemplateTest(ProjectFactoryFixture projectFactory)
+ : base(projectFactory) { }
+
+ public override string ProjectType { get; } = "blazorwasm-empty";
+
+ [Fact]
+ public async Task EmptyBlazorWasmStandaloneTemplateCanCreateBuildPublish()
+ {
+ var project = await CreateBuildPublishAsync();
+
+ // The service worker assets manifest isn't generated for non-PWA projects
+ var publishDir = Path.Combine(project.TemplatePublishDir, "wwwroot");
+ Assert.False(File.Exists(Path.Combine(publishDir, "service-worker-assets.js")), "Non-PWA templates should not produce service-worker-assets.js");
+ }
+
+ [Fact]
+ public async Task EmptyBlazorWasmStandaloneTemplateNoHttpsCanCreateBuildPublish()
+ {
+ var project = await CreateBuildPublishAsync(args: new[] { ArgConstants.NoHttps });
+
+ // The service worker assets manifest isn't generated for non-PWA projects
+ var publishDir = Path.Combine(project.TemplatePublishDir, "wwwroot");
+ Assert.False(File.Exists(Path.Combine(publishDir, "service-worker-assets.js")), "Non-PWA templates should not produce service-worker-assets.js");
+ }
+
+ [Fact]
+ public Task EmptyBlazorWasmHostedTemplateCanCreateBuildPublish()
+ => CreateBuildPublishAsync(args: new[] { ArgConstants.Hosted }, serverProject: true);
+
+ [Fact]
+ public Task EmptyBlazorWasmHostedTemplateNoHttpsCanCreateBuildPublish()
+ => CreateBuildPublishAsync(args: new[] { ArgConstants.Hosted, ArgConstants.NoHttps }, serverProject: true);
+
+ [Fact]
+ public Task EmptyBlazorWasmStandalonePwaTemplateCanCreateBuildPublish()
+ => CreateBuildPublishAsync(args: new[] { ArgConstants.Pwa });
+
+ [Fact]
+ public Task EmptyBlazorWasmStandalonePwaTemplateNoHttpsCanCreateBuildPublish()
+ => CreateBuildPublishAsync(args: new[] { ArgConstants.Pwa, ArgConstants.NoHttps });
+
+ [Fact]
+ public async Task EmptyBlazorWasmHostedPwaTemplateCanCreateBuildPublish()
+ {
+ var project = await CreateBuildPublishAsync(args: new[] { ArgConstants.Hosted, ArgConstants.Pwa }, serverProject: true);
+
+ var serverProject = GetSubProject(project, "Server", $"{project.ProjectName}.Server");
+
+ ValidatePublishedServiceWorker(serverProject);
+ }
+
+ [Fact]
+ public async Task EmptyBlazorWasmHostedPwaTemplateNoHttpsCanCreateBuildPublish()
+ {
+ var project = await CreateBuildPublishAsync(args: new[] { ArgConstants.Hosted, ArgConstants.Pwa, ArgConstants.NoHttps }, serverProject: true);
+
+ var serverProject = GetSubProject(project, "Server", $"{project.ProjectName}.Server");
+
+ ValidatePublishedServiceWorker(serverProject);
+ }
+
+ private void ValidatePublishedServiceWorker(Project project)
+ {
+ var publishDir = Path.Combine(project.TemplatePublishDir, "wwwroot");
+
+ // When publishing the PWA template, we generate an assets manifest
+ // and move service-worker.published.js to overwrite service-worker.js
+ Assert.False(File.Exists(Path.Combine(publishDir, "service-worker.published.js")), "service-worker.published.js should not be published");
+ Assert.True(File.Exists(Path.Combine(publishDir, "service-worker.js")), "service-worker.js should be published");
+ Assert.True(File.Exists(Path.Combine(publishDir, "service-worker-assets.js")), "service-worker-assets.js should be published");
+
+ // We automatically append the SWAM version as a comment in the published service worker file
+ var serviceWorkerAssetsManifestContents = ReadFile(publishDir, "service-worker-assets.js");
+ var serviceWorkerContents = ReadFile(publishDir, "service-worker.js");
+
+ // Parse the "version": "..." value from the SWAM, and check it's in the service worker
+ var serviceWorkerAssetsManifestVersionMatch = new Regex(@"^\s*\""version\"":\s*(\""[^\""]+\"")", RegexOptions.Multiline)
+ .Match(serviceWorkerAssetsManifestContents);
+ Assert.True(serviceWorkerAssetsManifestVersionMatch.Success);
+ var serviceWorkerAssetsManifestVersionJson = serviceWorkerAssetsManifestVersionMatch.Groups[1].Captures[0].Value;
+ var serviceWorkerAssetsManifestVersion = JsonSerializer.Deserialize<string>(serviceWorkerAssetsManifestVersionJson);
+ Assert.True(serviceWorkerContents.Contains($"/* Manifest version: {serviceWorkerAssetsManifestVersion} */", StringComparison.Ordinal));
+ }
+
+ private string ReadFile(string basePath, string path)
+ {
+ var fullPath = Path.Combine(basePath, path);
+ var doesExist = File.Exists(fullPath);
+
+ Assert.True(doesExist, $"Expected file to exist, but it doesn't: {path}");
+ return File.ReadAllText(Path.Combine(basePath, path));
+ }
+}