Browse Source

Improve tests (#974)

* Improve tests

* Integrate tests

* Fix for deletion.
pull/978/head
Sebastian Stehle 3 years ago
committed by GitHub
parent
commit
1ef8dfbef4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      backend/src/Squidex.Infrastructure/Commands/DomainObject.cs
  2. 1311
      tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs
  3. 2
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_json_with_dot.verified.txt
  4. 2
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_non_published_content.verified.txt
  5. 2
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_null_localized_text.verified.txt
  6. 9
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_published_content.verified.txt
  7. 2
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_strange_text.verified.txt
  8. 20
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_to_null.verified.txt
  9. 27
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_with_bulk.verified.txt
  10. 27
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_with_upsert.verified.txt
  11. 24
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_id_data_value.verified.txt
  12. 40
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_recreate_deleted_content.verified.txt
  13. 40
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_recreate_deleted_content_with_upsert.verified.txt
  14. 2
      tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_update_singleton_content_with_special_id.verified.txt
  15. 233
      tools/TestSuite/TestSuite.Shared/Strategies.cs
  16. 4
      tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

15
backend/src/Squidex.Infrastructure/Commands/DomainObject.cs

@ -181,8 +181,19 @@ public abstract partial class DomainObject<T> : IAggregate where T : class, IDom
var deletedId = DomainId.Combine(UniqueId, DomainId.Create("deleted"));
var deletedStream = persistenceFactory.WithEventSourcing(GetType(), deletedId, null);
// Write to the deleted stream first so we never loose this information.
await deletedStream.WriteEventsAsync(uncomittedEvents, ct);
try
{
// Write to the deleted stream first so we never loose this information.
await deletedStream.WriteEventsAsync(uncomittedEvents, ct);
}
catch (InconsistentStateException)
{
// There is another deletion event, therefore we have to fetch the version.
await deletedStream.ReadAsync(ct: default);
await deletedStream.WriteEventsAsync(uncomittedEvents, ct);
}
}
// Cleanup the primary stream second.

1311
tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs

File diff suppressed because it is too large

2
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_json_with_dot.verified.txt

@ -4,7 +4,9 @@
iv: null
}
},
NewStatus: ,
Status: Published,
EditingStatus: Published,
Id: Guid_1,
Version: 1,
_links: {

2
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_non_published_content.verified.txt

@ -4,7 +4,9 @@
iv: 1
}
},
NewStatus: ,
Status: Draft,
EditingStatus: Draft,
Id: Guid_1,
_links: {
delete: {

2
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_null_text.verified.txt → tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_null_localized_text.verified.txt

@ -6,7 +6,9 @@
en: null
}
},
NewStatus: ,
Status: Published,
EditingStatus: Published,
Id: Guid_1,
Version: 1,
_links: {

9
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content.verified.txt → tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_published_content.verified.txt

@ -1,15 +1,14 @@
{
Data: {
Number: {
iv: 2
},
String: {
iv: test
iv: 1
}
},
NewStatus: ,
Status: Published,
EditingStatus: Published,
Id: Guid_1,
Version: 3,
Version: 1,
_links: {
delete: {
Method: DELETE

2
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_create_strange_text.verified.txt

@ -4,7 +4,9 @@
iv: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
}
},
NewStatus: ,
Status: Published,
EditingStatus: Published,
Id: Guid_1,
Version: 1,
_links: {

20
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_to_null.verified.txt

@ -1,20 +0,0 @@
{
Data: {},
Status: Published,
Id: Guid_1,
Version: 2,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}

27
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_with_bulk.verified.txt

@ -1,27 +0,0 @@
{
Data: {
Number: {
iv: 2
},
String: {
iv: test
}
},
Status: Published,
Id: Guid_1,
Version: 3,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}

27
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_content_with_upsert.verified.txt

@ -1,27 +0,0 @@
{
Data: {
Number: {
iv: 2
},
String: {
iv: test
}
},
Status: Published,
Id: Guid_1,
Version: 3,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}

24
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_patch_id_data_value.verified.txt

@ -1,24 +0,0 @@
{
Data: {
Id: {
iv: id2
}
},
Status: Published,
Id: Guid_1,
Version: 2,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}

40
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_recreate_deleted_content.verified.txt

@ -1,40 +0,0 @@
{
Items: [
{
Data: {
Number: {
iv: 2
}
},
Status: Published,
Id: Guid_1,
Version: 4,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}
],
Total: 1,
_links: {
create: {
Method: POST
},
create/publish: {
Method: POST
},
self: {
Method: GET
}
}
}

40
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_recreate_deleted_content_with_upsert.verified.txt

@ -1,40 +0,0 @@
{
Items: [
{
Data: {
Number: {
iv: 2
}
},
Status: Published,
Id: Guid_1,
Version: 1,
_links: {
delete: {
Method: DELETE
},
draft/create: {
Method: POST
},
previous: {
Method: GET
},
self: {
Method: GET
}
}
}
],
Total: 1,
_links: {
create: {
Method: POST
},
create/publish: {
Method: POST
},
self: {
Method: GET
}
}
}

2
tools/TestSuite/TestSuite.ApiTests/Verify/ContentUpdateTests.Should_update_singleton_content_with_special_id.verified.txt

@ -4,7 +4,9 @@
iv: singleton
}
},
NewStatus: ,
Status: Published,
EditingStatus: Published,
Id: Guid_1,
Version: 2,
_links: {

233
tools/TestSuite/TestSuite.Shared/Strategies.cs

@ -0,0 +1,233 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Squidex.ClientLibrary;
namespace TestSuite;
public static class Strategies
{
public enum Deletion
{
SingleSoft,
SinglePermanent,
BulkSoft,
BulkPermanent
}
public static Task DeleteAsync(this ISquidexClientManager clientManager, ContentBase content, Deletion strategy)
{
IContentsClient<MyContent, object> GetClient()
{
return clientManager.CreateContentsClient<MyContent, object>(content.SchemaName);
}
switch (strategy)
{
case Deletion.SingleSoft:
return GetClient().DeleteAsync(content.Id);
case Deletion.SinglePermanent:
return GetClient().DeleteAsync(content.Id, new ContentDeleteOptions { Permanent = true });
case Deletion.BulkSoft:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Type = BulkUpdateType.Delete,
Id = content.Id,
Permanent = false,
}
}
});
case Deletion.BulkPermanent:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Type = BulkUpdateType.Delete,
Id = content.Id,
Permanent = true,
}
}
});
default:
return Task.CompletedTask;
}
}
public enum Update
{
Normal,
Upsert,
UpsertBulk,
Bulk,
BulkWithSchema,
BulkShared
}
public static Task UpdateAsync(this ISquidexClientManager clientManager, ContentBase content, object data, Update strategy)
{
IContentsClient<MyContent, object> GetClient()
{
return clientManager.CreateContentsClient<MyContent, object>(content.SchemaName);
}
switch (strategy)
{
case Update.Normal:
return GetClient().UpdateAsync(content.Id, data);
case Update.Upsert:
return GetClient().UpsertAsync(content.Id, data);
case Update.UpsertBulk:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Upsert
}
}
});
case Update.Bulk:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Update,
}
}
});
case Update.BulkWithSchema:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Update,
Schema = content.SchemaName
}
}
});
case Update.BulkShared:
return clientManager.CreateSharedContentsClient<MyContent, object>().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Update,
Schema = content.SchemaName
}
}
});
default:
return Task.CompletedTask;
}
}
public enum Patch
{
Normal,
Upsert,
Bulk,
BulkWithSchema,
BulkShared,
UpsertBulk
}
public static Task PatchAsync(this ISquidexClientManager clientManager, ContentBase content, object data, Patch strategy)
{
IContentsClient<MyContent, object> GetClient()
{
return clientManager.CreateContentsClient<MyContent, object>(content.SchemaName);
}
switch (strategy)
{
case Patch.Normal:
return GetClient().PatchAsync(content.Id, data);
case Patch.Upsert:
return GetClient().UpsertAsync(content.Id, data, ContentUpsertOptions.AsPatch);
case Patch.UpsertBulk:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Patch = true,
}
}
});
case Patch.Bulk:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Patch
}
}
});
case Patch.BulkWithSchema:
return GetClient().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Patch,
Schema = content.SchemaName
}
}
});
case Patch.BulkShared:
return clientManager.CreateSharedContentsClient<MyContent, object>().BulkUpdateAsync(new BulkUpdate
{
Jobs = new List<BulkUpdateJob>
{
new BulkUpdateJob
{
Id = content.Id,
Data = data,
Type = BulkUpdateType.Patch,
Schema = content.SchemaName
}
}
});
default:
return Task.CompletedTask;
}
}
private class MyContent : Content<object>
{
}
}

4
tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

@ -16,8 +16,8 @@
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.ClientLibrary" Version="12.7.0" />
<PackageReference Include="Squidex.ClientLibrary.ServiceExtensions" Version="12.7.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="14.0.0" />
<PackageReference Include="Squidex.ClientLibrary.ServiceExtensions" Version="14.0.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="Verify" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />

Loading…
Cancel
Save