mirror of https://github.com/Squidex/squidex.git
5 changed files with 156 additions and 10 deletions
@ -0,0 +1,131 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using Squidex.ClientLibrary; |
|||
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 class ContentLanguageTests : IClassFixture<ContentFixture> |
|||
{ |
|||
public ContentFixture _ { get; } |
|||
|
|||
public ContentLanguageTests(ContentFixture fixture) |
|||
{ |
|||
_ = fixture; |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_filter_language() |
|||
{ |
|||
// STEP 1: Create content
|
|||
var content = await _.Contents.CreateAsync(new TestEntityData |
|||
{ |
|||
Localized = new Dictionary<string, string> |
|||
{ |
|||
["de"] = "Hallo", |
|||
["en"] = "Hello" |
|||
} |
|||
}, ContentCreateOptions.AsPublish, QueryContext.Default.WithLanguages("de")); |
|||
|
|||
Assert.False(content.Data.Localized.ContainsKey("en")); |
|||
Assert.Equal("Hallo", content.Data.Localized["de"]); |
|||
} |
|||
|
|||
[Theory] |
|||
[InlineData("de", "Hallo")] |
|||
[InlineData("en", "Hello")] |
|||
public async Task Should_flatten_language(string code, string expected) |
|||
{ |
|||
// STEP 1: Create content
|
|||
var content = await _.Contents.CreateAsync(new TestEntityData |
|||
{ |
|||
Localized = new Dictionary<string, string> |
|||
{ |
|||
["de"] = "Hallo", |
|||
["en"] = "Hello" |
|||
} |
|||
}, ContentCreateOptions.AsPublish); |
|||
|
|||
|
|||
// STEP 2: Get content.
|
|||
var contents = _.ClientManager.CreateDynamicContentsClient(_.Contents.SchemaName); |
|||
|
|||
var contentFlatten = await contents.GetAsync(content.Id, QueryContext.Default.Flatten().WithLanguages(code)); |
|||
|
|||
Assert.Equal(expected, (string)contentFlatten.Data["localized"]); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_provide_etag_based_on_headers() |
|||
{ |
|||
// STEP 1: Create content
|
|||
var content = await _.Contents.CreateAsync(new TestEntityData |
|||
{ |
|||
Localized = new Dictionary<string, string> |
|||
{ |
|||
["de"] = "Hallo", |
|||
["en"] = "Hello" |
|||
} |
|||
}, ContentCreateOptions.AsPublish); |
|||
|
|||
|
|||
// STEP 2: Get content.
|
|||
var (etag1, _) = await GetEtagAsync(content.Id, new Dictionary<string, string>()); |
|||
|
|||
var (etag2, _) = await GetEtagAsync(content.Id, new Dictionary<string, string> |
|||
{ |
|||
["X-Flatten"] = "1" |
|||
}); |
|||
|
|||
var (etag3, _) = await GetEtagAsync(content.Id, new Dictionary<string, string> |
|||
{ |
|||
["X-Languages"] = "en" |
|||
}); |
|||
|
|||
var (etag4, _) = await GetEtagAsync(content.Id, new Dictionary<string, string> |
|||
{ |
|||
["X-Languages"] = "en", |
|||
["X-Flatten"] = "1" |
|||
}); |
|||
|
|||
static void AssertValue(string value, string not = null) |
|||
{ |
|||
Assert.NotNull(value); |
|||
Assert.NotEmpty(value); |
|||
Assert.NotEqual(not, value); |
|||
} |
|||
|
|||
AssertValue(etag1); |
|||
AssertValue(etag2, etag1); |
|||
AssertValue(etag3, etag1); |
|||
AssertValue(etag4, etag1); |
|||
} |
|||
|
|||
private async Task<(string, string)> GetEtagAsync(string id, Dictionary<string, string> headers) |
|||
{ |
|||
var url = $"{_.ClientManager.Options.Url}/api/content/{_.AppName}/{_.SchemaName}/{id}"; |
|||
|
|||
using (var httpClient = _.ClientManager.CreateHttpClient()) |
|||
{ |
|||
foreach (var (key, value) in headers) |
|||
{ |
|||
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(key, value); |
|||
} |
|||
|
|||
var response = await httpClient.GetAsync(url); |
|||
|
|||
return (response.Headers.GetValues("ETag").FirstOrDefault(), response.Headers.Vary.ToString()); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue