diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/CDNTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/CDNTests.cs new file mode 100644 index 000000000..20b9d83d7 --- /dev/null +++ b/backend/tools/TestSuite/TestSuite.ApiTests/CDNTests.cs @@ -0,0 +1,102 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Net.Http; +using System.Threading.Tasks; +using TestSuite.Fixtures; +using TestSuite.Model; +using Xunit; + +#pragma warning disable SA1300 // Element should begin with upper-case letter +#pragma warning disable SA1507 // Code should not contain multiple blank lines in a row + +namespace TestSuite.ApiTests +{ + public sealed class CDNTests : IClassFixture + { + public CloudFixture _ { get; } + + public CDNTests(CloudFixture fixture) + { + _ = fixture; + } + + [Fact] + public void Should_provide_asset_url_from_cdn() + { + var id = "ef4286f9-8b1d-4dda-bd52-c5bd191c47bb"; + + var url = _.CDNClientManager.GenerateImageUrl(id); + + Assert.StartsWith("https://assets.squidex.io/", url); + } + + [Fact] + public async Task Should_download_asset_url_from_cdn() + { + var id = "ef4286f9-8b1d-4dda-bd52-c5bd191c47bb"; + + var url = _.CDNClientManager.GenerateImageUrl(id); + + await DownloadAsync(url); + } + + [Fact] + public void Should_provide_asset_url_from_cloud_when_cdn_not_configured() + { + var id = "ef4286f9-8b1d-4dda-bd52-c5bd191c47bb"; + + var url = _.ClientManager.GenerateImageUrl(id); + + Assert.StartsWith("https://cloud.squidex.io/", url); + } + + [Fact] + public async Task Should_download_asset_url_from_cloud_when_cdn_not_configured() + { + var id = "ef4286f9-8b1d-4dda-bd52-c5bd191c47bb"; + + var url = _.ClientManager.GenerateImageUrl(id); + + await DownloadAsync(url); + } + + [Fact] + public async Task Should_get_blog_items_from_cdn() + { + var client = _.CDNClientManager.CreateContentsClient("blog"); + + var result = await client.GetAsync(); + + Assert.NotEmpty(result.Items); + } + + [Fact] + public async Task Should_get_blog_items_from_cloud_when_cdn_not_configured() + { + var client = _.ClientManager.CreateContentsClient("blog"); + + var result = await client.GetAsync(); + + Assert.NotEmpty(result.Items); + } + + private static async Task DownloadAsync(string url) + { + using (var client = new HttpClient()) + { + var response = await client.GetAsync(url); + + response.EnsureSuccessStatusCode(); + + var buffer = await response.Content.ReadAsByteArrayAsync(); + + Assert.True(buffer.Length > 1000); + } + } + } +} diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs index fa0736671..e56ef3362 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs @@ -34,7 +34,7 @@ namespace TestSuite.ApiTests // STEP 1: Create a schema. var schema = await TestEntity.CreateSchemaAsync(_.Schemas, _.AppName, schemaName); - var contents = _.ClientManager.GetClient(schemaName); + var contents = _.ClientManager.CreateContentsClient(schemaName); // STEP 2: Create a content for this schema. @@ -64,7 +64,7 @@ namespace TestSuite.ApiTests // STEP 1: Create a schema. await TestEntityWithReferences.CreateSchemaAsync(_.Schemas, _.AppName, schemaName); - var contents = _.ClientManager.GetClient(schemaName); + var contents = _.ClientManager.CreateContentsClient(schemaName); // STEP 2: Create a referenced content. @@ -74,7 +74,7 @@ namespace TestSuite.ApiTests // STEP 3: Create a content with a reference. - var dataB = new TestEntityWithReferencesData { References = new[] { Guid.Parse(contentA_1.Id) } }; + var dataB = new TestEntityWithReferencesData { References = new[] { contentA_1.Id } }; var contentB_1 = await contents.CreateAsync(dataB); diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs index 1ad8eb3b8..d9b685e2d 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs @@ -35,7 +35,7 @@ namespace TestSuite.ApiTests { var items = await _.Contents.GetAsync(new ContentQuery { OrderBy = "data/number/iv asc" }); - var itemsById = await _.Contents.GetAsync(new HashSet(items.Items.Take(3).Select(x => x.EntityId))); + var itemsById = await _.Contents.GetAsync(new HashSet(items.Items.Take(3).Select(x => x.Id))); Assert.Equal(3, itemsById.Items.Count); Assert.Equal(3, itemsById.Total); @@ -249,7 +249,7 @@ namespace TestSuite.ApiTests public int Number { get; set; } } - private void AssertItems(SquidexEntities entities, int total, int[] expected) + private void AssertItems(ContentsResult entities, int total, int[] expected) { Assert.Equal(total, entities.Total); Assert.Equal(expected, entities.Items.Select(x => x.Data.Number).ToArray()); diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs index 9e0005739..306a60e47 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs @@ -41,7 +41,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -60,7 +60,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -79,7 +79,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -99,7 +99,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -120,7 +120,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -142,7 +142,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -165,7 +165,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } @@ -188,7 +188,7 @@ namespace TestSuite.ApiTests } finally { - if (content.Id != null) + if (content != null) { await _.Contents.DeleteAsync(content.Id); } diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs index 901567c7c..4b714ab66 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ClientManagerFixture.cs @@ -24,10 +24,14 @@ namespace TestSuite.Fixtures public ClientManagerFixture() { - ClientManager = new SquidexClientManager(ServerUrl, AppName, ClientId, ClientSecret) + ClientManager = new SquidexClientManager(new SquidexOptions { - ReadResponseAsString = true - }; + AppName = AppName, + ClientId = ClientId, + ClientSecret = ClientSecret, + ReadResponseAsString = true, + Url = ServerUrl + }); } public virtual void Dispose() diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/CloudFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/CloudFixture.cs new file mode 100644 index 000000000..fe135f7e4 --- /dev/null +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/CloudFixture.cs @@ -0,0 +1,39 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.ClientLibrary; + +namespace TestSuite.Fixtures +{ + public sealed class CloudFixture + { + public SquidexClientManager ClientManager { get; private set; } + + public SquidexClientManager CDNClientManager { get; private set; } + + public CloudFixture() + { + ClientManager = new SquidexClientManager( + new SquidexOptions + { + AppName = "squidex-website", + ClientId = "squidex-website:reader", + ClientSecret = "yy9x4dcxsnp1s34r2z19t88wedbzxn1tfq7uzmoxf60x" + }); + + CDNClientManager = new SquidexClientManager( + new SquidexOptions + { + AppName = "squidex-website", + AssetCDN = "https://assets.squidex.io", + ClientId = "squidex-website:reader", + ClientSecret = "yy9x4dcxsnp1s34r2z19t88wedbzxn1tfq7uzmoxf60x", + ContentCDN = "https://contents.squidex.io", + }); + } + } +} diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentFixture.cs index 81c0aaedd..5cde9aca8 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentFixture.cs @@ -14,7 +14,7 @@ namespace TestSuite.Fixtures { public class ContentFixture : CreatedAppFixture { - public SquidexClient Contents { get; } + public IContentsClient Contents { get; } public string SchemaName { get; } @@ -42,7 +42,7 @@ namespace TestSuite.Fixtures } }).Wait(); - Contents = ClientManager.GetClient(SchemaName); + Contents = ClientManager.CreateContentsClient(SchemaName); } } } diff --git a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture.cs b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture.cs index 4e8399769..b2387f46a 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture.cs @@ -36,7 +36,7 @@ namespace TestSuite.Fixtures { Task.Run(async () => { - var contents = await Contents.GetAllAsync(); + var contents = await Contents.GetAsync(); foreach (var content in contents.Items) { diff --git a/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs b/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs index e8b0570ac..0c8d243e9 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs @@ -13,7 +13,7 @@ using Squidex.ClientLibrary.Management; namespace TestSuite.Model { - public sealed class TestEntity : SquidexEntityBase + public sealed class TestEntity : Content { public static async Task CreateSchemaAsync(ISchemasClient schemas, string appName, string name) { diff --git a/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs b/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs index 58bb140fd..a009cd68b 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs @@ -14,7 +14,7 @@ using Squidex.ClientLibrary.Management; namespace TestSuite.Model { - public sealed class TestEntityWithReferences : SquidexEntityBase + public sealed class TestEntityWithReferences : Content { public static async Task CreateSchemaAsync(ISchemasClient schemas, string appName, string name) { diff --git a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj index 55f789aa0..90cbcdec6 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj +++ b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj @@ -4,7 +4,7 @@ - +