Browse Source

Fixes and tests for hosting in subfolder. (#875)

* Fixes and tests for hosting in subfolder.

* Fix image names.

* Fix Mongo Version.

* Fix CI

* Frontend tests

* Try custom build image.

* Fix folder.
pull/876/head
Sebastian Stehle 4 years ago
committed by GitHub
parent
commit
a9a6c1928c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 25
      .github/workflows/dev.yml
  2. 25
      .github/workflows/release.yml
  3. 2
      backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
  4. 2
      backend/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj
  5. 2
      backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
  6. 4
      backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
  7. 2
      backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
  8. 6
      backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs
  9. 4
      backend/src/Squidex/Areas/IdentityServer/Views/Account/AccessDenied.cshtml
  10. 2
      backend/src/Squidex/Areas/IdentityServer/Views/Account/LockedOut.cshtml
  11. 2
      backend/src/Squidex/Areas/IdentityServer/Views/Account/LogoutCompleted.cshtml
  12. 2
      backend/src/Squidex/Areas/IdentityServer/Views/Error/Error.cshtml
  13. 2
      backend/src/Squidex/Areas/IdentityServer/Views/Profile/Profile.cshtml
  14. 2
      backend/src/Squidex/Areas/IdentityServer/Views/Setup/Setup.cshtml
  15. 8
      backend/src/Squidex/Areas/IdentityServer/Views/_Layout.cshtml
  16. 20
      backend/src/Squidex/Squidex.csproj
  17. 67
      backend/tests/docker-compose.yml
  18. 2
      backend/tools/TestSuite/TestSuite.ApiTests/AssetFixture.cs
  19. BIN
      backend/tools/TestSuite/TestSuite.ApiTests/Assets/Frontend_Home.jpg
  20. BIN
      backend/tools/TestSuite/TestSuite.ApiTests/Assets/Frontend_Login.jpg
  21. 62
      backend/tools/TestSuite/TestSuite.ApiTests/FrontendTests.cs
  22. 8
      backend/tools/TestSuite/TestSuite.ApiTests/GraphQLTests.cs
  23. 8
      backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj
  24. 2
      backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

25
.github/workflows/dev.yml

@ -90,10 +90,15 @@ jobs:
- name: Load Image - name: Load Image
run: docker load < squidex-tmp.tar.gz run: docker load < squidex-tmp.tar.gz
- name: Replace Image Name - name: Replace Image Name1
uses: mikefarah/yq@v4.9.1 uses: mikefarah/yq@v4.9.1
with: with:
cmd: yq e '.services.squidex.image = "squidex-tmp"' -i backend/tests/docker-compose.yml cmd: yq e '.services.squidex1.image = "squidex-tmp"' -i backend/tests/docker-compose.yml
- name: Replace Image Name2
uses: mikefarah/yq@v4.9.1
with:
cmd: yq e '.services.squidex2.image = "squidex-tmp"' -i backend/tests/docker-compose.yml
- name: Start Test - name: Start Test
run: docker-compose up -d run: docker-compose up -d
@ -102,12 +107,24 @@ jobs:
- name: RUN TEST - name: RUN TEST
uses: kohlerdominik/docker-run-action@v1.0.0 uses: kohlerdominik/docker-run-action@v1.0.0
with: with:
image: mcr.microsoft.com/dotnet/sdk:6.0 image: squidex/build
environment: | environment: |
CONFIG__WAIT=60 CONFIG__WAIT=60
CONFIG__SERVER__URL=http://localhost:8080 CONFIG__SERVER__URL=http://localhost:8080
default_network: host default_network: host
options: --name test options: --name test1
volumes: ${{ github.workspace }}:/src
run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated
- name: RUN TEST on path
uses: kohlerdominik/docker-run-action@v1.0.0
with:
image: squidex/build
environment: |
CONFIG__WAIT=60
CONFIG__SERVER__URL=http://localhost:8081/squidex
default_network: host
options: --name test2
volumes: ${{ github.workspace }}:/src volumes: ${{ github.workspace }}:/src
run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated

25
.github/workflows/release.yml

@ -73,10 +73,15 @@ jobs:
- name: Load Image - name: Load Image
run: docker load < squidex-tmp.tar.gz run: docker load < squidex-tmp.tar.gz
- name: Replace Image Name - name: Replace Image Name1
uses: mikefarah/yq@v4.9.1 uses: mikefarah/yq@v4.9.1
with: with:
cmd: yq e '.services.squidex.image = "squidex-tmp"' -i backend/tests/docker-compose.yml cmd: yq e '.services.squidex1.image = "squidex-tmp"' -i backend/tests/docker-compose.yml
- name: Replace Image Name2
uses: mikefarah/yq@v4.9.1
with:
cmd: yq e '.services.squidex2.image = "squidex-tmp"' -i backend/tests/docker-compose.yml
- name: Start Test - name: Start Test
run: docker-compose up -d run: docker-compose up -d
@ -85,12 +90,24 @@ jobs:
- name: RUN TEST - name: RUN TEST
uses: kohlerdominik/docker-run-action@v1.0.0 uses: kohlerdominik/docker-run-action@v1.0.0
with: with:
image: mcr.microsoft.com/dotnet/sdk:6.0 image: squidex/build
environment: | environment: |
CONFIG__WAIT=60 CONFIG__WAIT=60
CONFIG__SERVER__URL=http://localhost:8080 CONFIG__SERVER__URL=http://localhost:8080
default_network: host default_network: host
options: --name test options: --name test1
volumes: ${{ github.workspace }}:/src
run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated
- name: RUN TEST on path
uses: kohlerdominik/docker-run-action@v1.0.0
with:
image: squidex/build
environment: |
CONFIG__WAIT=60
CONFIG__SERVER__URL=http://localhost:8081/squidex
default_network: host
options: --name test2
volumes: ${{ github.workspace }}:/src volumes: ${{ github.workspace }}:/src
run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated run: dotnet test /src/backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated

2
backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj

@ -23,7 +23,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="MongoDB.Driver" Version="2.14.1" /> <PackageReference Include="MongoDB.Driver" Version="2.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" /> <PackageReference Include="System.ValueTuple" Version="4.5.0" />

2
backend/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj

@ -34,7 +34,7 @@
<PackageReference Include="Microsoft.Orleans.Core" Version="3.6.0" /> <PackageReference Include="Microsoft.Orleans.Core" Version="3.6.0" />
<PackageReference Include="Notifo.SDK" Version="1.0.1" /> <PackageReference Include="Notifo.SDK" Version="1.0.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.CLI.Core" Version="8.8.0" /> <PackageReference Include="Squidex.CLI.Core" Version="8.11.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="6.0.0" /> <PackageReference Include="System.Collections.Immutable" Version="6.0.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" /> <PackageReference Include="System.ValueTuple" Version="4.5.0" />

2
backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj

@ -24,7 +24,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
<PackageReference Include="MongoDB.Driver" Version="2.14.1" /> <PackageReference Include="MongoDB.Driver" Version="2.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />

4
backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj

@ -18,8 +18,8 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="MongoDB.Driver" Version="2.14.1" /> <PackageReference Include="MongoDB.Driver" Version="2.15.0" />
<PackageReference Include="MongoDB.Driver.GridFS" Version="2.14.1" /> <PackageReference Include="MongoDB.Driver.GridFS" Version="2.15.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Threading.Tasks.Dataflow" Version="6.0.0" /> <PackageReference Include="System.Threading.Tasks.Dataflow" Version="6.0.0" />

2
backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj

@ -31,7 +31,7 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="OpenTelemetry.Api" Version="1.1.0" /> <PackageReference Include="OpenTelemetry.Api" Version="1.1.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="2.18.0" /> <PackageReference Include="Squidex.Assets" Version="3.0.0" />
<PackageReference Include="Squidex.Caching" Version="1.9.0" /> <PackageReference Include="Squidex.Caching" Version="1.9.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="2.13.0" /> <PackageReference Include="Squidex.Hosting.Abstractions" Version="2.13.0" />
<PackageReference Include="Squidex.Log" Version="1.6.0" /> <PackageReference Include="Squidex.Log" Version="1.6.0" />

6
backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs

@ -22,6 +22,12 @@ namespace Squidex.Web.Pipeline
public async Task InvokeAsync(HttpContext context, IUserService userService) public async Task InvokeAsync(HttpContext context, IUserService userService)
{ {
if (context.Request.Query.ContainsKey("skip-setup"))
{
await next(context);
return;
}
if (!isUserFound && await userService.IsEmptyAsync(context.RequestAborted)) if (!isUserFound && await userService.IsEmptyAsync(context.RequestAborted))
{ {
var url = context.Request.PathBase.Add("/identity-server/setup"); var url = context.Request.PathBase.Add("/identity-server/setup");

4
backend/src/Squidex/Areas/IdentityServer/Views/Account/AccessDenied.cshtml

@ -2,7 +2,7 @@
ViewBag.Title = T.Get("users.accessDenied.title"); ViewBag.Title = T.Get("users.accessDenied.title");
} }
<img class="splash-image" src="@Url.RootContentUrl("~/squid.svg?title=STOP%20HERE&text=You%20shall%20not%20pass!")" /> <img class="splash-image" src="squid.svg?title=STOP%20HERE&text=You%20shall%20not%20pass!" />
<h1 class="splash-h1">@T.Get("users.accessDenied.title")</h1> <h1 class="splash-h1">@T.Get("users.accessDenied.title")</h1>
@ -11,5 +11,5 @@
</p> </p>
<p class="splash-text"> <p class="splash-text">
<a href="~/account/logout-redirect">@T.Get("common.logout")</a> <a href="account/logout-redirect">@T.Get("common.logout")</a>
</p> </p>

2
backend/src/Squidex/Areas/IdentityServer/Views/Account/LockedOut.cshtml

@ -2,7 +2,7 @@
ViewBag.Title = T.Get("users.lockedOutTitle"); ViewBag.Title = T.Get("users.lockedOutTitle");
} }
<img class="splash-image" src="@Url.RootContentUrl("~/squid.svg?title=STOP HERE&text=You%20shall%20not%20pass!")" /> <img class="splash-image" src="squid.svg?title=STOP HERE&text=You%20shall%20not%20pass!" />
<h1 class="splash-h1">@T.Get("users.lockedOutTitle")</h1> <h1 class="splash-h1">@T.Get("users.lockedOutTitle")</h1>

2
backend/src/Squidex/Areas/IdentityServer/Views/Account/LogoutCompleted.cshtml

@ -2,7 +2,7 @@
ViewBag.Title = T.Get("users.logout.title"); ViewBag.Title = T.Get("users.logout.title");
} }
<img class="splash-image" src="@Url.RootContentUrl("~/squid.svg?title=BYE%20BYE&text=Hope%20to%20see%20you%20again%20soon!&face=happy")" /> <img class="splash-image" src="squid.svg?title=BYE%20BYE&text=Hope%20to%20see%20you%20again%20soon!&face=happy" />
<h1 class="splash-h1">@T.Get("users.logout.headline")</h1> <h1 class="splash-h1">@T.Get("users.logout.headline")</h1>

2
backend/src/Squidex/Areas/IdentityServer/Views/Error/Error.cshtml

@ -4,7 +4,7 @@
ViewBag.Title = T.Get("users.error.title"); ViewBag.Title = T.Get("users.error.title");
} }
<img class="splash-image" src="@Url.RootContentUrl("~/squid.svg?title=OH%20DAMN&text=I%20am%20sorry%2C%20that%20something%20went%20wrong")" /> <img class="splash-image" src="squid.svg?title=OH%20DAMN&text=I%20am%20sorry%2C%20that%20something%20went%20wrong" />
<h1 class="splash-h1">@T.Get("users.error.headline")</h1> <h1 class="splash-h1">@T.Get("users.error.headline")</h1>

2
backend/src/Squidex/Areas/IdentityServer/Views/Profile/Profile.cshtml

@ -34,7 +34,7 @@
<div class="row profile-section-sm"> <div class="row profile-section-sm">
<div class="col profile-picture-col"> <div class="col profile-picture-col">
<img class="profile-picture" src="@Url.RootContentUrl($"~/api/users/{Model!.Id}/picture/?q={Guid.NewGuid()}")" /> <img class="profile-picture" src="api/users/{Model!.Id}/picture/?q={@Guid.NewGuid()}" />
</div> </div>
<div class="col"> <div class="col">
<form id="pictureForm" class="profile-picture-form" asp-controller="Profile" asp-action="UploadPicture" method="post" enctype="multipart/form-data"> <form id="pictureForm" class="profile-picture-form" asp-controller="Profile" asp-action="UploadPicture" method="post" enctype="multipart/form-data">

2
backend/src/Squidex/Areas/IdentityServer/Views/Setup/Setup.cshtml

@ -67,7 +67,7 @@
<h1>@T.Get("setup.headline")</h1> <h1>@T.Get("setup.headline")</h1>
<img style="height: 250px" class="mt-2 mb-2" src="@Url.RootContentUrl("~/squid.svg?title=Welcome&text=Welcome%20to%20the%20Installation%20Process&face=happy")" /> <img style="height: 250px" class="mt-2 mb-2" src="squid.svg?title=Welcome&text=Welcome%20to%20the%20Installation%20Process&face=happy" />
<div class="mt-2 mb-2"> <div class="mt-2 mb-2">
<small class="form-text text-muted">@T.Get("setup.hint")</small> <small class="form-text text-muted">@T.Get("setup.hint")</small>

8
backend/src/Squidex/Areas/IdentityServer/Views/_Layout.cshtml

@ -8,7 +8,7 @@
<title>@ViewBag.Title - @T.Get("common.product")</title> <title>@ViewBag.Title - @T.Get("common.product")</title>
<link rel="stylesheet" asp-append-version="true" href="@Url.RootContentUrl("~/styles.css")" /> <link rel="stylesheet" asp-append-version="true" href="styles.css" />
@if (IsSectionDefined("header")) @if (IsSectionDefined("header"))
{ {
@ -16,13 +16,13 @@
} }
<environment include="Development"> <environment include="Development">
<script type="text/javascript" src="@Url.RootContentUrl("~/runtime.js")"></script> <script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="@Url.RootContentUrl("~/polyfills.js")"></script> <script type="text/javascript" src="polyfills.js"></script>
</environment> </environment>
</head> </head>
<body class="profile"> <body class="profile">
<div class="profile-container"> <div class="profile-container">
<img class="profile-logo" alt="@T.Get("common.product")" title="@T.Get("common.product")" src="@Url.RootContentUrl("~/images/logo.svg")" /> <img class="profile-logo" alt="@T.Get("common.product")" title="@T.Get("common.product")" src="images/logo.svg" />
<div class="profile-card card"> <div class="profile-card card">
<div class="profile-card-body card-body"> <div class="profile-card-body card-body">

20
backend/src/Squidex/Squidex.csproj

@ -60,7 +60,7 @@
<PackageReference Include="Microsoft.Orleans.Core.Abstractions" Version="3.6.0" /> <PackageReference Include="Microsoft.Orleans.Core.Abstractions" Version="3.6.0" />
<PackageReference Include="Microsoft.Orleans.Hosting.Kubernetes" Version="3.6.0" /> <PackageReference Include="Microsoft.Orleans.Hosting.Kubernetes" Version="3.6.0" />
<PackageReference Include="Microsoft.Orleans.OrleansRuntime" Version="3.6.0" /> <PackageReference Include="Microsoft.Orleans.OrleansRuntime" Version="3.6.0" />
<PackageReference Include="MongoDB.Driver" Version="2.14.1" /> <PackageReference Include="MongoDB.Driver" Version="2.15.0" />
<PackageReference Include="Namotion.Reflection" Version="2.0.10" /> <PackageReference Include="Namotion.Reflection" Version="2.0.10" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NJsonSchema" Version="10.6.10" /> <PackageReference Include="NJsonSchema" Version="10.6.10" />
@ -74,16 +74,16 @@
<PackageReference Include="OrleansDashboard.EmbeddedAssets" Version="3.6.1" /> <PackageReference Include="OrleansDashboard.EmbeddedAssets" Version="3.6.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="ReportGenerator" Version="5.0.3" PrivateAssets="all" /> <PackageReference Include="ReportGenerator" Version="5.0.3" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets.Azure" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.Azure" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.GoogleCloud" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.GoogleCloud" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.FTP" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.FTP" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.ImageMagick" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.ImageMagick" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.ImageSharp" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.Mongo" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.Mongo" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.S3" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.S3" Version="3.0.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="2.18.0" /> <PackageReference Include="Squidex.Assets.TusAdapter" Version="3.0.0" />
<PackageReference Include="Squidex.Caching.Orleans" Version="1.9.0" /> <PackageReference Include="Squidex.Caching.Orleans" Version="1.9.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="8.12.0" /> <PackageReference Include="Squidex.ClientLibrary" Version="8.18.0" />
<PackageReference Include="Squidex.Hosting" Version="2.13.0" /> <PackageReference Include="Squidex.Hosting" Version="2.13.0" />
<PackageReference Include="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" /> <PackageReference Include="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />

67
backend/tests/docker-compose.yml

@ -3,18 +3,17 @@ services:
mongo: mongo:
image: mongo:latest image: mongo:latest
ports: ports:
- "27018:27017" - "27019:27017"
networks: networks:
- internal - internal
squidex: squidex1:
image: squidex image: squidex
ports:
- "8080:80"
environment: environment:
- URLS__BASEURL=http://localhost:8080 - URLS__BASEURL=http://localhost:8080
- ASSETS__RESIZERURL=http://resizer - ASSETS__RESIZERURL=http://resizer
- EVENTSTORE__MONGODB__CONFIGURATION=mongodb://mongo - EVENTSTORE__MONGODB__CONFIGURATION=mongodb://mongo
- EVENTSTORE__MONGODB__DATABASE=squidex1
- GRAPHQL__CACHEDURATION=0 - GRAPHQL__CACHEDURATION=0
- IDENTITY__ADMINCLIENTID=root - IDENTITY__ADMINCLIENTID=root
- IDENTITY__ADMINCLIENTSECRET=xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0= - IDENTITY__ADMINCLIENTSECRET=xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0=
@ -22,8 +21,36 @@ services:
- SCRIPTING__TIMEOUTEXECUTION=00:00:10 - SCRIPTING__TIMEOUTEXECUTION=00:00:10
- SCRIPTING__TIMEOUTSCRIPT=00:00:10 - SCRIPTING__TIMEOUTSCRIPT=00:00:10
- STORE__MONGODB__CONFIGURATION=mongodb://mongo - STORE__MONGODB__CONFIGURATION=mongodb://mongo
- STORE__MONGODB__DATABASE=squidex1
- STORE__MONGODB__CONTENTDATABASE=squidex1_content
- STORE__TYPE=MongoDB - STORE__TYPE=MongoDB
- TEMPLATES__LOCALURL=http://localhost:80 - TEMPLATES__LOCALURL=http://localhost:5000
- ASPNETCORE_URLS=http://+:5000
networks:
- internal
depends_on:
- mongo
squidex2:
image: squidex
environment:
- URLS__BASEURL=http://localhost:8081/squidex/
- URLS__BASEPATH=squidex/
- ASSETS__RESIZERURL=http://resizer
- EVENTSTORE__MONGODB__CONFIGURATION=mongodb://mongo
- EVENTSTORE__MONGODB__DATABASE=squidex2
- GRAPHQL__CACHEDURATION=0
- IDENTITY__ADMINCLIENTID=root
- IDENTITY__ADMINCLIENTSECRET=xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0=
- IDENTITY__MULTIPLEDOMAINS=true
- SCRIPTING__TIMEOUTEXECUTION=00:00:10
- SCRIPTING__TIMEOUTSCRIPT=00:00:10
- STORE__MONGODB__CONFIGURATION=mongodb://mongo
- STORE__MONGODB__DATABASE=squidex2
- STORE__MONGODB__CONTENTDATABASE=squidex2_content
- STORE__TYPE=MongoDB
- TEMPLATES__LOCALURL=http://localhost:5000
- ASPNETCORE_URLS=http://+:5000
networks: networks:
- internal - internal
depends_on: depends_on:
@ -31,13 +58,39 @@ services:
resizer: resizer:
image: squidex/resizer:dev-40 image: squidex/resizer:dev-40
ports:
- "8081:80"
networks: networks:
- internal - internal
depends_on: depends_on:
- mongo - mongo
squidex_proxy1:
image: squidex/caddy-proxy
ports:
- "8080:8080"
environment:
- SITE_ADDRESS=http://localhost:8080
- SITE_PATH=*
- SITE_SERVER="squidex1:5000"
depends_on:
- squidex1
networks:
- internal
restart: unless-stopped
squidex_proxy2:
image: squidex/caddy-proxy-path
ports:
- "8081:8081"
environment:
- SITE_ADDRESS=http://localhost:8081
- SITE_PATH=/squidex/*
- SITE_SERVER="squidex2:5000"
depends_on:
- squidex2
networks:
- internal
restart: unless-stopped
networks: networks:
internal: internal:
driver: bridge driver: bridge

2
backend/tools/TestSuite/TestSuite.ApiTests/AssetFixture.cs

@ -20,7 +20,7 @@ namespace TestSuite.ApiTests
{ {
client.BaseAddress = new Uri(ServerUrl); client.BaseAddress = new Uri(ServerUrl);
var url = asset._links["content"].Href; var url = asset._links["content"].Href[1..];
if (version > 0) if (version > 0)
{ {

BIN
backend/tools/TestSuite/TestSuite.ApiTests/Assets/Frontend_Home.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
backend/tools/TestSuite/TestSuite.ApiTests/Assets/Frontend_Login.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

62
backend/tools/TestSuite/TestSuite.ApiTests/FrontendTests.cs

@ -0,0 +1,62 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Codeuctivity.ImageSharpCompare;
using PuppeteerSharp;
using TestSuite.Fixtures;
using Xunit;
#pragma warning disable SA1300 // Element should begin with upper-case letter
namespace TestSuite.ApiTests
{
public sealed class FrontendTests : IClassFixture<ClientFixture>
{
public ClientFixture _ { get; }
public FrontendTests(ClientFixture fixture)
{
_ = fixture;
}
[Theory]
[InlineData("Frontend_Home", "")]
[InlineData("Frontend_Login", "identity-server/account/login")]
public async Task Should_render_properly(string name, string url)
{
using (var browserFetcher = new BrowserFetcher())
{
await browserFetcher.DownloadAsync();
}
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
DefaultViewport = new ViewPortOptions
{
Height = 800,
IsLandscape = true,
IsMobile = false,
Width = 1000
},
Args = new string[]
{
"--no-sandbox"
}
});
await using var page = await browser.NewPageAsync();
await page.GoToAsync(_.ClientManager.Options.Url + url + "?skip-setup");
await page.ScreenshotAsync($"__{name}.jpg");
var diff = ImageSharpCompare.CalcDiff($"__{name}.jpg", $"Assets/{name}.jpg");
Assert.InRange(diff.MeanError, 0, 10);
}
}
}

8
backend/tools/TestSuite/TestSuite.ApiTests/GraphQLTests.cs

@ -105,6 +105,14 @@ namespace TestSuite.ApiTests
try try
{ {
await CreateSchemasAsync(); await CreateSchemasAsync();
}
catch
{
// Do nothing
}
try
{
await CreateContentsAsync(); await CreateContentsAsync();
} }
catch catch

8
backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj

@ -14,12 +14,14 @@
<None Remove="Assets\SampleImage_WEBP_350kb - Copy.webp" /> <None Remove="Assets\SampleImage_WEBP_350kb - Copy.webp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Codeuctivity.ImageSharpCompare" Version="2.0.46" />
<PackageReference Include="Meziantou.Analyzer" Version="1.0.698"> <PackageReference Include="Meziantou.Analyzer" Version="1.0.698">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="NSwag.Core" Version="13.15.10" /> <PackageReference Include="NSwag.Core" Version="13.15.10" />
<PackageReference Include="PuppeteerSharp" Version="7.0.0" />
<PackageReference Include="Squidex.Assets" Version="2.18.0" /> <PackageReference Include="Squidex.Assets" Version="2.18.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
@ -35,6 +37,12 @@
<ProjectReference Include="..\TestSuite.Shared\TestSuite.Shared.csproj" /> <ProjectReference Include="..\TestSuite.Shared\TestSuite.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="Assets\Frontend_Home.jpg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Assets\Frontend_Login.jpg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Assets\logo-squared.png"> <None Update="Assets\logo-squared.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>

2
backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

@ -16,7 +16,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.ClientLibrary" Version="8.17.0" /> <PackageReference Include="Squidex.ClientLibrary" Version="8.18.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
</ItemGroup> </ItemGroup>

Loading…
Cancel
Save