// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Collections.Concurrent; using Squidex.ClientLibrary; using Squidex.ClientLibrary.Management; using TestSuite.Model; namespace TestSuite { public static class SharedInstances { private static readonly string[] Contributors = { "hello@squidex.io" }; private static readonly Task ClientManager = CreateClientManagerInternalAsync(); private static readonly ConcurrentDictionary ReferenceSchemas = new ConcurrentDictionary(); private static readonly ConcurrentDictionary DefaultSchemas = new ConcurrentDictionary(); private static readonly Task App = CreateAppInternalAsync(); private static Task CreateClientManagerInternalAsync() { var clientManager = new ClientManagerWrapper(); return clientManager.ConnectAsync(); } private static async Task CreateAppInternalAsync() { var wrapper = await ClientManager; try { await wrapper.Apps.PostAppAsync(new CreateAppDto { Name = wrapper.ClientManager.App }); } catch (SquidexManagementException ex) { if (ex.StatusCode != 400) { throw; } } var invite = new AssignContributorDto { Invite = true, Role = "Owner" }; foreach (var contributor in Contributors) { invite.ContributorId = contributor; await wrapper.Apps.PostContributorAsync(wrapper.ClientManager.App, invite); } try { await wrapper.Apps.PostLanguageAsync(wrapper.ClientManager.App, new AddLanguageDto { Language = "de" }); } catch (SquidexManagementException ex) { if (ex.StatusCode != 400) { throw; } } } public static Task CreateClientManagerAsync() { return ClientManager; } public static async Task> CreateReferenceSchema(string name) { var wrapper = await ClientManager; async Task CreateAsync() { try { await TestEntityWithReferences.CreateSchemaAsync(wrapper.Schemas, wrapper.ClientManager.App, name); } catch (SquidexManagementException ex) { if (ex.StatusCode != 400) { throw; } } } await ReferenceSchemas.GetOrAdd(name, _ => CreateAsync()); return wrapper.ClientManager.CreateContentsClient(name); } public static async Task> CreateDefaultSchema(string name) { var wrapper = await ClientManager; async Task CreateAsync() { try { await TestEntity.CreateSchemaAsync(wrapper.Schemas, wrapper.ClientManager.App, name); } catch (SquidexManagementException ex) { if (ex.StatusCode != 400) { throw; } } } await DefaultSchemas.GetOrAdd(name, _ => CreateAsync()); return wrapper.ClientManager.CreateContentsClient(name); } } }