diff --git a/backend/tools/TestSuite/TestSuite.Shared/ClientManagerFactory.cs b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerFactory.cs new file mode 100644 index 000000000..097d75a5a --- /dev/null +++ b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerFactory.cs @@ -0,0 +1,35 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; + +namespace TestSuite +{ + public static class ClientManagerFactory + { + private static Task manager; + + public static Task CreateAsync() + { + if (manager == null) + { + manager = CreateInternalAsync(); + } + + return manager; + } + + private static async Task CreateInternalAsync() + { + var clientManager = new ClientManagerWrapper(); + + await clientManager.ConnectAsync(); + + return clientManager; + } + } +} diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFactory.cs b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs similarity index 67% rename from backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFactory.cs rename to backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs index e51b34f3c..0dd967e1e 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFactory.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs @@ -8,33 +8,48 @@ using System; using System.Threading; using System.Threading.Tasks; +using Lazy; using Squidex.ClientLibrary; using Squidex.ClientLibrary.Configuration; +using Squidex.ClientLibrary.Management; -namespace TestSuite.Fixtures +namespace TestSuite { - public static class ClientManagerFactory + public sealed class ClientManagerWrapper { - private static Task manager; + private static Task manager; - public static Task CreateAsync() - { - if (manager == null) - { - manager = CreateInternalAsync(); - } + public SquidexClientManager ClientManager { get; set; } - return manager; - } + [Lazy] + public IAppsClient Apps => ClientManager.CreateAppsClient(); + + [Lazy] + public IAssetsClient Assets => ClientManager.CreateAssetsClient(); - private static async Task CreateInternalAsync() + [Lazy] + public IBackupsClient Backups => ClientManager.CreateBackupsClient(); + + [Lazy] + public ILanguagesClient Languages => ClientManager.CreateLanguagesClient(); + + [Lazy] + public IPingClient Ping => ClientManager.CreatePingClient(); + + [Lazy] + public IRulesClient Rules => ClientManager.CreateRulesClient(); + + [Lazy] + public ISchemasClient Schemas => ClientManager.CreateSchemasClient(); + + public ClientManagerWrapper() { var appName = GetValue("APP__NAME", "integration-tests"); var clientId = GetValue("CLIENT__ID", "root"); var clientSecret = GetValue("CLIENT__SECRET", "xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0="); var serviceURl = GetValue("SERVER__URL", "https://localhost:5001"); - var clientManager = new SquidexClientManager(new SquidexOptions + ClientManager = new SquidexClientManager(new SquidexOptions { AppName = appName, ClientId = clientId, @@ -43,12 +58,34 @@ namespace TestSuite.Fixtures Configurator = AcceptAllCertificatesConfigurator.Instance, Url = serviceURl }); + } + + public static Task CreateAsync() + { + if (manager == null) + { + manager = CreateInternalAsync(); + } + + return manager; + } + + private static async Task CreateInternalAsync() + { + var clientManager = new ClientManagerWrapper(); + + await clientManager.ConnectAsync(); + + return clientManager; + } + public async Task ConnectAsync() + { if (TryGetTimeout(out var waitSeconds)) { Console.WriteLine("Waiting {0} seconds to access server", waitSeconds); - var pingClient = clientManager.CreatePingClient(); + var pingClient = ClientManager.CreatePingClient(); using (var cts = new CancellationTokenSource(waitSeconds * 1000)) { @@ -67,8 +104,6 @@ namespace TestSuite.Fixtures } } } - - return clientManager; } private static bool TryGetTimeout(out int timeout) diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/AssetFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/AssetFixture.cs index e422cbad7..c5d0ccd64 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/AssetFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/AssetFixture.cs @@ -15,12 +15,7 @@ namespace TestSuite.Fixtures { public class AssetFixture : CreatedAppFixture { - public IAssetsClient Assets { get; } - - public AssetFixture() - { - Assets = ClientManager.CreateAssetsClient(); - } + public IAssetsClient Assets => Squidex.Assets; public async Task DownloadAsync(AssetDto asset) { diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs index 9c265aa95..9f4154726 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs @@ -11,33 +11,16 @@ namespace TestSuite.Fixtures { public class ClientFixture : ClientManagerFixture { - public IAppsClient Apps { get; } + public IAppsClient Apps => Squidex.Apps; - public IBackupsClient Backups { get; } + public IBackupsClient Backups => Squidex.Backups; - public ILanguagesClient Languages { get; } + public ILanguagesClient Languages => Squidex.Languages; - public IPingClient Ping { get; } + public IPingClient Ping => Squidex.Ping; - public IRulesClient Rules { get; } + public IRulesClient Rules => Squidex.Rules; - public ISchemasClient Schemas { get; } - - public ClientFixture() - { - Apps = ClientManager.CreateAppsClient(); - - Backups = ClientManager.CreateBackupsClient(); - - Languages = ClientManager.CreateLanguagesClient(); - - Languages = ClientManager.CreateLanguagesClient(); - - Ping = ClientManager.CreatePingClient(); - - Rules = ClientManager.CreateRulesClient(); - - Schemas = ClientManager.CreateSchemasClient(); - } + public ISchemasClient Schemas => Squidex.Schemas; } } diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs index 4d3ef8b45..0b9e78ca6 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs @@ -12,6 +12,8 @@ namespace TestSuite.Fixtures { public class ClientManagerFixture : IDisposable { + public ClientManagerWrapper Squidex { get; } + public string AppName => ClientManager.Options.AppName; public string ClientId => ClientManager.Options.ClientId; @@ -20,11 +22,11 @@ namespace TestSuite.Fixtures public string ServerUrl => ClientManager.Options.Url; - public SquidexClientManager ClientManager { get; } + public SquidexClientManager ClientManager => Squidex.ClientManager; public ClientManagerFixture() { - ClientManager = ClientManagerFactory.CreateAsync().Result; + Squidex = ClientManagerWrapper.CreateAsync().Result; } public virtual void Dispose() diff --git a/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xml b/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xml new file mode 100644 index 000000000..6ef705866 --- /dev/null +++ b/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xsd b/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xsd new file mode 100644 index 000000000..fe819e8ea --- /dev/null +++ b/backend/tools/TestSuite/TestSuite.Shared/FodyWeavers.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj index 432de718e..b5c42a165 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj +++ b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj @@ -3,6 +3,11 @@ netcoreapp3.1 + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + +