mirror of https://github.com/Squidex/squidex.git
27 changed files with 553 additions and 231 deletions
@ -0,0 +1,114 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Squidex.ClientLibrary.Management; |
||||
|
using TestSuite.Fixtures; |
||||
|
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 AppLanguagesTests : IClassFixture<ClientFixture> |
||||
|
{ |
||||
|
public ClientFixture _ { get; } |
||||
|
|
||||
|
public AppLanguagesTests(ClientFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_manage_languages() |
||||
|
{ |
||||
|
var appName = Guid.NewGuid().ToString(); |
||||
|
|
||||
|
// STEP 1: Add app
|
||||
|
var createRequest = new CreateAppDto { Name = appName }; |
||||
|
|
||||
|
await _.Apps.PostAppAsync(createRequest); |
||||
|
|
||||
|
|
||||
|
// STEP 2: Add languages
|
||||
|
await _.Apps.PostLanguageAsync(appName, new AddLanguageDto { Language = "de" }); |
||||
|
await _.Apps.PostLanguageAsync(appName, new AddLanguageDto { Language = "it" }); |
||||
|
await _.Apps.PostLanguageAsync(appName, new AddLanguageDto { Language = "fr" }); |
||||
|
|
||||
|
var languages = await _.Apps.GetLanguagesAsync(appName); |
||||
|
|
||||
|
var languageEN = languages.Items.First(x => x.Iso2Code == "en"); |
||||
|
|
||||
|
Assert.Equal(new string[] { "en", "de", "fr", "it" }, languages.Items.Select(x => x.Iso2Code).ToArray()); |
||||
|
Assert.True(languageEN.IsMaster); |
||||
|
|
||||
|
|
||||
|
// STEP 3: Update language1
|
||||
|
var updateRequest1 = new UpdateLanguageDto |
||||
|
{ |
||||
|
Fallback = new string[] |
||||
|
{ |
||||
|
"fr", |
||||
|
"it" |
||||
|
}, |
||||
|
IsOptional = true |
||||
|
}; |
||||
|
|
||||
|
languages = await _.Apps.PutLanguageAsync(appName, "de", updateRequest1); |
||||
|
|
||||
|
var languageDE = languages.Items.First(x => x.Iso2Code == "de"); |
||||
|
|
||||
|
Assert.Equal(new string[] { "fr", "it" }, languageDE.Fallback.ToArray()); |
||||
|
Assert.True(languageDE.IsOptional); |
||||
|
|
||||
|
|
||||
|
// STEP 4: Update language2
|
||||
|
var updateRequest2 = new UpdateLanguageDto |
||||
|
{ |
||||
|
Fallback = new string[] |
||||
|
{ |
||||
|
"fr", |
||||
|
"it" |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
languages = await _.Apps.PutLanguageAsync(appName, "en", updateRequest2); |
||||
|
|
||||
|
languageEN = languages.Items.First(x => x.Iso2Code == "en"); |
||||
|
|
||||
|
Assert.Equal(new string[] { "fr", "it" }, updateRequest2.Fallback.ToArray()); |
||||
|
|
||||
|
|
||||
|
// STEP 5: Change master language
|
||||
|
var masterRequest = new UpdateLanguageDto { IsMaster = true }; |
||||
|
|
||||
|
languages = await _.Apps.PutLanguageAsync(appName, "de", masterRequest); |
||||
|
|
||||
|
languageDE = languages.Items.First(x => x.Iso2Code == "de"); |
||||
|
languageEN = languages.Items.First(x => x.Iso2Code == "en"); |
||||
|
|
||||
|
Assert.True(languageDE.IsMaster); |
||||
|
Assert.False(languageDE.IsOptional); |
||||
|
Assert.False(languageEN.IsMaster); |
||||
|
Assert.Empty(languageDE.Fallback); |
||||
|
Assert.Equal(new string[] { "de", "en", "fr", "it" }, languages.Items.Select(x => x.Iso2Code).ToArray()); |
||||
|
|
||||
|
|
||||
|
// STEP 6: RemoveRequest
|
||||
|
languages = await _.Apps.DeleteLanguageAsync(appName, "fr"); |
||||
|
|
||||
|
languageEN = languages.Items.First(x => x.Iso2Code == "en"); |
||||
|
|
||||
|
Assert.Equal(new string[] { "it" }, languageEN.Fallback.ToArray()); |
||||
|
Assert.Equal(new string[] { "de", "en", "it" }, languages.Items.Select(x => x.Iso2Code).ToArray()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,142 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Squidex.ClientLibrary.Management; |
||||
|
using TestSuite.Fixtures; |
||||
|
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 class AssetFormatTests : IClassFixture<AssetFixture> |
||||
|
{ |
||||
|
public AssetFixture _ { get; } |
||||
|
|
||||
|
public AssetFormatTests(AssetFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_image_gif() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleGIFImage_40kbmb.gif", "image/gif"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.True(asset.IsImage); |
||||
|
Assert.Equal(312, asset.PixelHeight); |
||||
|
Assert.Equal(312, asset.PixelWidth); |
||||
|
Assert.Equal(312L, asset.Metadata["pixelHeight"]); |
||||
|
Assert.Equal(312L, asset.Metadata["pixelWidth"]); |
||||
|
Assert.Equal(AssetType.Image, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_image_gif_without_extension() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleGIFImage_40kbmb.gif", "image/gif", Guid.NewGuid().ToString()); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.True(asset.IsImage); |
||||
|
Assert.Equal(312, asset.PixelHeight); |
||||
|
Assert.Equal(312, asset.PixelWidth); |
||||
|
Assert.Equal(312L, asset.Metadata["pixelHeight"]); |
||||
|
Assert.Equal(312L, asset.Metadata["pixelWidth"]); |
||||
|
Assert.Equal(AssetType.Image, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_image_png() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SamplePNGImage_100kbmb.png", "image/png"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.True(asset.IsImage); |
||||
|
Assert.Equal(170, asset.PixelHeight); |
||||
|
Assert.Equal(272, asset.PixelWidth); |
||||
|
Assert.Equal(170L, asset.Metadata["pixelHeight"]); |
||||
|
Assert.Equal(272L, asset.Metadata["pixelWidth"]); |
||||
|
Assert.Equal(AssetType.Image, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_image_jpg() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleJPGImage_50kbmb.jpg", "image/jpg"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.True(asset.IsImage); |
||||
|
Assert.Equal(300, asset.PixelHeight); |
||||
|
Assert.Equal(300, asset.PixelWidth); |
||||
|
Assert.Equal(300L, asset.Metadata["pixelHeight"]); |
||||
|
Assert.Equal(300L, asset.Metadata["pixelWidth"]); |
||||
|
Assert.Equal(96L, asset.Metadata["imageQuality"]); |
||||
|
Assert.Equal(AssetType.Image, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_audio_mp3() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleAudio_0.4mb.mp3", "audio/mp3"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.False(asset.IsImage); |
||||
|
Assert.Equal("00:00:28.2708750", asset.Metadata["duration"]); |
||||
|
Assert.Equal(128L, asset.Metadata["audioBitrate"]); |
||||
|
Assert.Equal(2L, asset.Metadata["audioChannels"]); |
||||
|
Assert.Equal(44100L, asset.Metadata["audioSampleRate"]); |
||||
|
Assert.Equal(AssetType.Audio, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_video_mp4() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleVideo_1280x720_1mb.mp4", "audio/mp4"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.False(asset.IsImage); |
||||
|
Assert.Equal("00:00:05.3120000", asset.Metadata["duration"]); |
||||
|
Assert.Equal(384L, asset.Metadata["audioBitrate"]); |
||||
|
Assert.Equal(2L, asset.Metadata["audioChannels"]); |
||||
|
Assert.Equal(48000L, asset.Metadata["audioSampleRate"]); |
||||
|
Assert.Equal(1280L, asset.Metadata["videoWidth"]); |
||||
|
Assert.Equal(720L, asset.Metadata["videoHeight"]); |
||||
|
Assert.Equal(AssetType.Video, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_video_mkv() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleVideo_1280x720_1mb.flv", "audio/webm"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.Equal(AssetType.Unknown, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_video_flv() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleVideo_1280x720_1mb.flv", "audio/x-flv"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.Equal(AssetType.Unknown, asset.Type); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_upload_video_3gp() |
||||
|
{ |
||||
|
var asset = await _.UploadFileAsync("Assets/SampleVideo_176x144_1mb.3gp", "audio/3gpp"); |
||||
|
|
||||
|
// Should create metadata.
|
||||
|
Assert.Equal(AssetType.Unknown, asset.Type); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 102 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,34 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System.Threading.Tasks; |
||||
|
using TestSuite.Fixtures; |
||||
|
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 class LanguagesTests : IClassFixture<ClientFixture> |
||||
|
{ |
||||
|
public ClientFixture _ { get; } |
||||
|
|
||||
|
public LanguagesTests(ClientFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_provide_languages() |
||||
|
{ |
||||
|
var languages = await _.Languages.GetLanguagesAsync(); |
||||
|
|
||||
|
Assert.True(languages.Count > 100); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System.Threading.Tasks; |
||||
|
using TestSuite.Fixtures; |
||||
|
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 class PingTests : IClassFixture<CreatedAppFixture> |
||||
|
{ |
||||
|
public CreatedAppFixture _ { get; } |
||||
|
|
||||
|
public PingTests(CreatedAppFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_ping_service() |
||||
|
{ |
||||
|
await _.Ping.GetPingAsync(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_ping_app() |
||||
|
{ |
||||
|
await _.Ping.GetAppPingAsync(_.AppName); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_get_info() |
||||
|
{ |
||||
|
var infos = await _.Ping.GetInfoAsync(); |
||||
|
|
||||
|
Assert.NotNull(infos); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System; |
||||
|
using Squidex.ClientLibrary; |
||||
|
|
||||
|
namespace TestSuite.Fixtures |
||||
|
{ |
||||
|
public class ClientManagerFixture : IDisposable |
||||
|
{ |
||||
|
public string ServerUrl { get; } = "http://localhost:5000"; |
||||
|
|
||||
|
public string ClientId { get; } = "root"; |
||||
|
|
||||
|
public string ClientSecret { get; } = "xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0="; |
||||
|
|
||||
|
public string AppName { get; } = "integration-tests"; |
||||
|
|
||||
|
public SquidexClientManager ClientManager { get; } |
||||
|
|
||||
|
public ClientManagerFixture() |
||||
|
{ |
||||
|
ClientManager = new SquidexClientManager(ServerUrl, AppName, ClientId, ClientSecret) |
||||
|
{ |
||||
|
ReadResponseAsString = true |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
public virtual void Dispose() |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,31 +0,0 @@ |
|||||
// ==========================================================================
|
|
||||
// Squidex Headless CMS
|
|
||||
// ==========================================================================
|
|
||||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|
||||
// All rights reserved. Licensed under the MIT license.
|
|
||||
// ==========================================================================
|
|
||||
|
|
||||
using Squidex.ClientLibrary; |
|
||||
|
|
||||
namespace TestSuite.Model |
|
||||
{ |
|
||||
internal static class TestClient |
|
||||
{ |
|
||||
public const string ServerUrl = "http://localhost:5000"; |
|
||||
|
|
||||
public const string ClientId = "root"; |
|
||||
public const string ClientSecret = "xeLd6jFxqbXJrfmNLlO2j1apagGGGSyZJhFnIuHp4I0="; |
|
||||
|
|
||||
public const string TestAppName = "integration-tests"; |
|
||||
|
|
||||
public static readonly SquidexClientManager ClientManager = |
|
||||
new SquidexClientManager( |
|
||||
ServerUrl, |
|
||||
TestAppName, |
|
||||
ClientId, |
|
||||
ClientSecret) |
|
||||
{ |
|
||||
ReadResponseAsString = true |
|
||||
}; |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue