diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json index 942a997b30..4ec99f9909 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json @@ -1,5 +1,5 @@ { - "name": "Company.WebApplication1", + "name": "company.webapplication1", "version": "0.0.0", "scripts": { "ng": "ng", diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/package.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/package.json index 7b28c46f8d..be76209b81 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/package.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/package.json @@ -1,5 +1,5 @@ { - "name": "Company.WebApplication1", + "name": "company.webapplication1", "version": "0.1.0", "private": true, "dependencies": { diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ClientApp/package.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ClientApp/package.json index b32b1b9b1f..bfe4d07021 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ClientApp/package.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ClientApp/package.json @@ -1,5 +1,5 @@ { - "name": "Company.WebApplication1", + "name": "company.webapplication1", "version": "0.1.0", "private": true, "dependencies": { diff --git a/src/ProjectTemplates/test/SpaTemplateTest/SpaTemplateTestBase.cs b/src/ProjectTemplates/test/SpaTemplateTest/SpaTemplateTestBase.cs index 49257d9592..325ca911fb 100644 --- a/src/ProjectTemplates/test/SpaTemplateTest/SpaTemplateTestBase.cs +++ b/src/ProjectTemplates/test/SpaTemplateTest/SpaTemplateTestBase.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Net; using System.Runtime.InteropServices; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.AspNetCore.E2ETesting; using Newtonsoft.Json.Linq; @@ -51,7 +52,7 @@ namespace Templates.Test.SpaTemplateTest // multiple NPM installs run concurrently which otherwise causes errors when // tests run in parallel. var clientAppSubdirPath = Path.Combine(Project.TemplateOutputDir, "ClientApp"); - Assert.True(File.Exists(Path.Combine(clientAppSubdirPath, "package.json")), "Missing a package.json"); + ValidatePackageJson(clientAppSubdirPath); var projectFileContents = ReadFile(Project.TemplateOutputDir, $"{Project.ProjectName}.csproj"); if (usesAuth && !useLocalDb) @@ -137,6 +138,17 @@ namespace Templates.Test.SpaTemplateTest } } + private void ValidatePackageJson(string clientAppSubdirPath) + { + Assert.True(File.Exists(Path.Combine(clientAppSubdirPath, "package.json")), "Missing a package.json"); + var packageJson = JObject.Parse(ReadFile(clientAppSubdirPath, "package.json")); + + // NPM package names must match ^(?:@[a-z0-9-~][a-z0-9-._~]*/)?[a-z0-9-~][a-z0-9-._~]*$ + var packageName = (string)packageJson["name"]; + Regex regex = new Regex("^(?:@[a-z0-9-~][a-z0-9-._~]*/)?[a-z0-9-~][a-z0-9-._~]*$"); + Assert.True(regex.IsMatch(packageName), "package.json name is invalid format"); + } + private static async Task WarmUpServer(AspNetProcess aspNetProcess) { var attempt = 0;