mirror of https://github.com/Squidex/squidex.git
Browse Source
* Add a test for content version endpoint. * Refactor tests into smaller chunks. * Fix tests. * Own app for clients tests.pull/811/head
committed by
GitHub
16 changed files with 793 additions and 255 deletions
@ -0,0 +1,119 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
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 AppClientsTests : IClassFixture<ClientFixture> |
||||
|
{ |
||||
|
private readonly string appName = Guid.NewGuid().ToString(); |
||||
|
private readonly string id = Guid.NewGuid().ToString(); |
||||
|
private readonly string clientRole = "Editor"; |
||||
|
private readonly string clientName = "My Client"; |
||||
|
|
||||
|
public ClientFixture _ { get; } |
||||
|
|
||||
|
public AppClientsTests(ClientFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_create_client() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Create client.
|
||||
|
var client = await CreateAsync(); |
||||
|
|
||||
|
// Should return client with correct name and id.
|
||||
|
Assert.Equal(clientRole, client.Role); |
||||
|
Assert.Equal(id, client.Name); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_client() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 0: Create client.
|
||||
|
var client = await CreateAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Update client name.
|
||||
|
var updateNameRequest = new UpdateClientDto |
||||
|
{ |
||||
|
Name = clientName, |
||||
|
AllowAnonymous = true, |
||||
|
ApiCallsLimit = 100, |
||||
|
ApiTrafficLimit = 200, |
||||
|
Role = "Owner" |
||||
|
}; |
||||
|
|
||||
|
var clients_2 = await _.Apps.PutClientAsync(appName, client.Id, updateNameRequest); |
||||
|
var client_2 = clients_2.Items.Find(x => x.Id == client.Id); |
||||
|
|
||||
|
// Should update client name.
|
||||
|
Assert.Equal(updateNameRequest.Name, client_2.Name); |
||||
|
Assert.Equal(updateNameRequest.AllowAnonymous, client_2.AllowAnonymous); |
||||
|
Assert.Equal(updateNameRequest.ApiCallsLimit, client_2.ApiCallsLimit); |
||||
|
Assert.Equal(updateNameRequest.ApiTrafficLimit, client_2.ApiTrafficLimit); |
||||
|
Assert.Equal(updateNameRequest.Role, client_2.Role); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_delete_client() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 0: Create client.
|
||||
|
var client = await CreateAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Delete client
|
||||
|
var clients_2 = await _.Apps.DeleteClientAsync(appName, client.Id); |
||||
|
|
||||
|
// Should not return deleted client.
|
||||
|
Assert.DoesNotContain(clients_2.Items, x => x.Id == client.Id); |
||||
|
} |
||||
|
|
||||
|
private async Task<ClientDto> CreateAsync() |
||||
|
{ |
||||
|
var createRequest = new CreateClientDto |
||||
|
{ |
||||
|
Id = id |
||||
|
}; |
||||
|
|
||||
|
var clients = await _.Apps.PostClientAsync(appName, createRequest); |
||||
|
var client = clients.Items.Find(x => x.Id == id); |
||||
|
|
||||
|
return client; |
||||
|
} |
||||
|
|
||||
|
private async Task CreateAppAsync() |
||||
|
{ |
||||
|
var createRequest = new CreateAppDto |
||||
|
{ |
||||
|
Name = appName |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PostAppAsync(createRequest); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,97 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
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 AppContributorsTests : IClassFixture<CreatedAppFixture> |
||||
|
{ |
||||
|
private readonly string email = $"{Guid.NewGuid()}@squidex.io"; |
||||
|
|
||||
|
public CreatedAppFixture _ { get; } |
||||
|
|
||||
|
public AppContributorsTests(CreatedAppFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_not_invite_contributor_if_flag_is_false() |
||||
|
{ |
||||
|
// STEP 0: Do not invite contributors when flag is false.
|
||||
|
var createRequest = new AssignContributorDto { ContributorId = "test@squidex.io" }; |
||||
|
|
||||
|
var ex = await Assert.ThrowsAsync<SquidexManagementException>(() => |
||||
|
{ |
||||
|
return _.Apps.PostContributorAsync(_.AppName, createRequest); |
||||
|
}); |
||||
|
|
||||
|
Assert.Equal(404, ex.StatusCode); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_invite_contributor() |
||||
|
{ |
||||
|
// STEP 1: Assign contributor.
|
||||
|
ContributorDto contributor_1 = await InviteAsync(); |
||||
|
|
||||
|
Assert.Equal("Developer", contributor_1?.Role); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_contributor() |
||||
|
{ |
||||
|
// STEP 0: Assign contributor.
|
||||
|
var contributor = await InviteAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Update contributor role.
|
||||
|
var updateRequest = new AssignContributorDto |
||||
|
{ |
||||
|
ContributorId = email, Role = "Owner" |
||||
|
}; |
||||
|
|
||||
|
var contributors_2 = await _.Apps.PostContributorAsync(_.AppName, updateRequest); |
||||
|
var contributor_2 = contributors_2.Items.Find(x => x.ContributorId == contributor.ContributorId); |
||||
|
|
||||
|
Assert.Equal(updateRequest.Role, contributor_2?.Role); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_remove_contributor() |
||||
|
{ |
||||
|
// STEP 0: Assign contributor.
|
||||
|
var contributor = await InviteAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Remove contributor.
|
||||
|
var contributors_2 = await _.Apps.DeleteContributorAsync(_.AppName, contributor.ContributorId); |
||||
|
|
||||
|
Assert.DoesNotContain(contributors_2.Items, x => x.ContributorId == contributor.ContributorId); |
||||
|
} |
||||
|
|
||||
|
private async Task<ContributorDto> InviteAsync() |
||||
|
{ |
||||
|
var createInviteRequest = new AssignContributorDto |
||||
|
{ |
||||
|
ContributorId = email, |
||||
|
Invite = true |
||||
|
}; |
||||
|
|
||||
|
var contributors = await _.Apps.PostContributorAsync(_.AppName, createInviteRequest); |
||||
|
var contributor = contributors.Items.Find(x => x.ContributorName == email); |
||||
|
|
||||
|
return contributor; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,175 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
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> |
||||
|
{ |
||||
|
private readonly string appName = Guid.NewGuid().ToString(); |
||||
|
|
||||
|
public ClientFixture _ { get; } |
||||
|
|
||||
|
public AppLanguagesTests(ClientFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_add_language() |
||||
|
{ |
||||
|
// STEP 0: Add app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Add languages.
|
||||
|
await AddLanguageAsync("de"); |
||||
|
await AddLanguageAsync("it"); |
||||
|
|
||||
|
var languages_1 = await _.Apps.GetLanguagesAsync(appName); |
||||
|
|
||||
|
Assert.Equal(new string[] { "en", "de", "it" }, languages_1.Items.Select(x => x.Iso2Code).ToArray()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_language() |
||||
|
{ |
||||
|
// STEP 0: Add app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Add languages.
|
||||
|
await AddLanguageAsync("de"); |
||||
|
await AddLanguageAsync("it"); |
||||
|
|
||||
|
|
||||
|
// STEP 3: Update German language.
|
||||
|
var updateRequest = new UpdateLanguageDto |
||||
|
{ |
||||
|
Fallback = new List<string> |
||||
|
{ |
||||
|
"it" |
||||
|
}, |
||||
|
IsOptional = true |
||||
|
}; |
||||
|
|
||||
|
var languages_2 = await _.Apps.PutLanguageAsync(appName, "de", updateRequest); |
||||
|
var language_2_DE = languages_2.Items.Find(x => x.Iso2Code == "de"); |
||||
|
|
||||
|
Assert.Equal(updateRequest.Fallback, language_2_DE.Fallback); |
||||
|
Assert.Equal(updateRequest.IsOptional, language_2_DE.IsOptional); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_master_language() |
||||
|
{ |
||||
|
// STEP 0: Add app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Add languages.
|
||||
|
await AddLanguageAsync("de"); |
||||
|
await AddLanguageAsync("it"); |
||||
|
|
||||
|
|
||||
|
// STEP 2: Update Italian language.
|
||||
|
var updateRequest = new UpdateLanguageDto |
||||
|
{ |
||||
|
Fallback = new List<string> |
||||
|
{ |
||||
|
"de" |
||||
|
}, |
||||
|
IsOptional = true |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PutLanguageAsync(appName, "it", updateRequest); |
||||
|
|
||||
|
|
||||
|
// STEP 3: Change master language to Italian.
|
||||
|
var masterRequest = new UpdateLanguageDto |
||||
|
{ |
||||
|
IsMaster = true |
||||
|
}; |
||||
|
|
||||
|
var languages_4 = await _.Apps.PutLanguageAsync(appName, "it", masterRequest); |
||||
|
var language_4_IT = languages_4.Items.Find(x => x.Iso2Code == "it"); |
||||
|
var language_4_EN = languages_4.Items.Find(x => x.Iso2Code == "en"); |
||||
|
|
||||
|
Assert.True(language_4_IT.IsMaster); |
||||
|
|
||||
|
// Old master language is unset.
|
||||
|
Assert.False(language_4_EN.IsMaster); |
||||
|
|
||||
|
// Master language cannot be optional.
|
||||
|
Assert.False(language_4_IT.IsOptional); |
||||
|
|
||||
|
// Fallback for new master language must be removed.
|
||||
|
Assert.Empty(language_4_IT.Fallback); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_delete_language() |
||||
|
{ |
||||
|
// STEP 0: Add app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Add languages.
|
||||
|
await AddLanguageAsync("de"); |
||||
|
await AddLanguageAsync("it"); |
||||
|
|
||||
|
|
||||
|
// STEP 2: Update Italian language.
|
||||
|
var updateRequest = new UpdateLanguageDto |
||||
|
{ |
||||
|
Fallback = new List<string> |
||||
|
{ |
||||
|
"de" |
||||
|
}, |
||||
|
IsOptional = true |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PutLanguageAsync(appName, "it", updateRequest); |
||||
|
|
||||
|
|
||||
|
// STEP 3: Remove language.
|
||||
|
var languages_2 = await _.Apps.DeleteLanguageAsync(appName, "de"); |
||||
|
var language_2_IT = languages_2.Items.Find(x => x.Iso2Code == "it"); |
||||
|
|
||||
|
// Fallback language must be removed.
|
||||
|
Assert.Empty(language_2_IT.Fallback); |
||||
|
|
||||
|
Assert.Equal(new string[] { "en", "it" }, languages_2.Items.Select(x => x.Iso2Code).ToArray()); |
||||
|
} |
||||
|
|
||||
|
private async Task CreateAppAsync() |
||||
|
{ |
||||
|
var createRequest = new CreateAppDto |
||||
|
{ |
||||
|
Name = appName |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PostAppAsync(createRequest); |
||||
|
} |
||||
|
|
||||
|
private async Task AddLanguageAsync(string code) |
||||
|
{ |
||||
|
var createRequest = new AddLanguageDto |
||||
|
{ |
||||
|
Language = code |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PostLanguageAsync(appName, createRequest); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,175 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
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 AppRolesTests : IClassFixture<CreatedAppFixture> |
||||
|
{ |
||||
|
private readonly string roleName = Guid.NewGuid().ToString(); |
||||
|
private readonly string client = Guid.NewGuid().ToString(); |
||||
|
private readonly string contributor = $"{Guid.NewGuid()}@squidex.io"; |
||||
|
|
||||
|
public CreatedAppFixture _ { get; } |
||||
|
|
||||
|
public AppRolesTests(CreatedAppFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_create_role() |
||||
|
{ |
||||
|
// STEP 1: Add role.
|
||||
|
var role = await CreateRoleAsync(roleName); |
||||
|
|
||||
|
// Should return role with correct name.
|
||||
|
Assert.Empty(role.Permissions); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_create_role_with_buggy_name() |
||||
|
{ |
||||
|
// STEP 1: Add role.
|
||||
|
var role = await CreateRoleAsync($"{Guid.NewGuid()}/1"); |
||||
|
|
||||
|
// Should return role with correct name.
|
||||
|
Assert.Empty(role.Permissions); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_role() |
||||
|
{ |
||||
|
// STEP 1: Add role.
|
||||
|
var role = await CreateRoleAsync(roleName); |
||||
|
|
||||
|
|
||||
|
// STEP 2: Update role.
|
||||
|
var updateRequest = new UpdateRoleDto |
||||
|
{ |
||||
|
Permissions = new List<string> { "a", "b" } |
||||
|
}; |
||||
|
|
||||
|
var roles_2 = await _.Apps.PutRoleAsync(_.AppName, roleName, updateRequest); |
||||
|
var role_2 = roles_2.Items.Find(x => x.Name == roleName); |
||||
|
|
||||
|
// Should return role with correct name.
|
||||
|
Assert.Equal(updateRequest.Permissions, role_2.Permissions); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_prevent_deletion_if_client_assigned() |
||||
|
{ |
||||
|
// STEP 1: Add role.
|
||||
|
var role = await CreateRoleAsync(roleName); |
||||
|
|
||||
|
|
||||
|
// STEP 2 Assign client and contributor.
|
||||
|
await _.Apps.PostClientAsync(_.AppName, new CreateClientDto { Id = client }); |
||||
|
|
||||
|
await AssignClient(roleName); |
||||
|
|
||||
|
var roles_2 = await _.Apps.GetRolesAsync(_.AppName); |
||||
|
var role_2 = roles_2.Items.Find(x => x.Name == roleName); |
||||
|
|
||||
|
// Should return role with correct number of users and clients.
|
||||
|
Assert.Equal(1, role_2.NumClients); |
||||
|
Assert.Equal(0, role_2.NumContributors); |
||||
|
|
||||
|
|
||||
|
// STEP 4: Try to delete role.
|
||||
|
var ex = await Assert.ThrowsAsync<SquidexManagementException<ErrorDto>>(() => |
||||
|
{ |
||||
|
return _.Apps.DeleteRoleAsync(_.AppName, roleName); |
||||
|
}); |
||||
|
|
||||
|
Assert.Equal(400, ex.StatusCode); |
||||
|
|
||||
|
|
||||
|
// STEP 5: AssignClient client.
|
||||
|
await AssignClient("Developer"); |
||||
|
|
||||
|
var roles_3 = await _.Apps.DeleteRoleAsync(_.AppName, roleName); |
||||
|
|
||||
|
Assert.DoesNotContain(roles_3.Items, x => x.Name == roleName); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_prevent_deletion_if_contributor_assigned() |
||||
|
{ |
||||
|
// STEP 1: Add role.
|
||||
|
var role = await CreateRoleAsync(roleName); |
||||
|
|
||||
|
|
||||
|
// STEP 2 Assign contributor.
|
||||
|
await AssignContributor(roleName); |
||||
|
|
||||
|
var roles_2 = await _.Apps.GetRolesAsync(_.AppName); |
||||
|
var role_2 = roles_2.Items.Find(x => x.Name == roleName); |
||||
|
|
||||
|
// Should return role with correct number of users and clients.
|
||||
|
Assert.Equal(0, role_2.NumClients); |
||||
|
Assert.Equal(1, role_2.NumContributors); |
||||
|
|
||||
|
|
||||
|
// STEP 4: Try to delete role.
|
||||
|
var ex = await Assert.ThrowsAsync<SquidexManagementException<ErrorDto>>(() => |
||||
|
{ |
||||
|
return _.Apps.DeleteRoleAsync(_.AppName, roleName); |
||||
|
}); |
||||
|
|
||||
|
Assert.Equal(400, ex.StatusCode); |
||||
|
|
||||
|
|
||||
|
// STEP 5: Remove role after contributor removed.
|
||||
|
await AssignContributor("Developer"); |
||||
|
|
||||
|
var roles_3 = await _.Apps.DeleteRoleAsync(_.AppName, roleName); |
||||
|
|
||||
|
Assert.DoesNotContain(roles_3.Items, x => x.Name == roleName); |
||||
|
} |
||||
|
|
||||
|
private async Task AssignContributor(string role = null) |
||||
|
{ |
||||
|
var assignRequest = new AssignContributorDto |
||||
|
{ |
||||
|
ContributorId = contributor, Role = role, Invite = true |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PostContributorAsync(_.AppName, assignRequest); |
||||
|
} |
||||
|
|
||||
|
private async Task AssignClient(string role = null) |
||||
|
{ |
||||
|
var updateRequest = new UpdateClientDto |
||||
|
{ |
||||
|
Role = role |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PutClientAsync(_.AppName, client, updateRequest); |
||||
|
} |
||||
|
|
||||
|
private async Task<RoleDto> CreateRoleAsync(string name) |
||||
|
{ |
||||
|
var createRequest = new AddRoleDto |
||||
|
{ |
||||
|
Name = name |
||||
|
}; |
||||
|
|
||||
|
var roles = await _.Apps.PostRoleAsync(_.AppName, createRequest); |
||||
|
var role = roles.Items.Find(x => x.Name == name); |
||||
|
|
||||
|
return role; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,121 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
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 AppWorkflowsTests : IClassFixture<ClientFixture> |
||||
|
{ |
||||
|
private readonly string appName = Guid.NewGuid().ToString(); |
||||
|
private readonly string name = Guid.NewGuid().ToString(); |
||||
|
|
||||
|
public ClientFixture _ { get; } |
||||
|
|
||||
|
public AppWorkflowsTests(ClientFixture fixture) |
||||
|
{ |
||||
|
_ = fixture; |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_create_workflow() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Create workflow.
|
||||
|
var workflow = await CreateAsync(); |
||||
|
|
||||
|
Assert.NotNull(workflow); |
||||
|
Assert.NotNull(workflow.Name); |
||||
|
Assert.Equal(3, workflow.Steps.Count); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_update_workflow() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 0: Create workflow.
|
||||
|
var workflow = await CreateAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Update workflow.
|
||||
|
var updateRequest = new UpdateWorkflowDto |
||||
|
{ |
||||
|
Initial = "Draft", |
||||
|
Steps = new Dictionary<string, WorkflowStepDto> |
||||
|
{ |
||||
|
["Draft"] = new WorkflowStepDto |
||||
|
{ |
||||
|
Transitions = new Dictionary<string, WorkflowTransitionDto> |
||||
|
{ |
||||
|
["Published"] = new WorkflowTransitionDto() |
||||
|
} |
||||
|
}, |
||||
|
["Published"] = new WorkflowStepDto(), |
||||
|
}, |
||||
|
Name = name |
||||
|
}; |
||||
|
|
||||
|
var workflows_2 = await _.Apps.PutWorkflowAsync(appName, workflow.Id, updateRequest); |
||||
|
var workflow_2 = workflows_2.Items.Find(x => x.Name == name); |
||||
|
|
||||
|
Assert.NotNull(workflow_2); |
||||
|
Assert.NotNull(workflow_2.Name); |
||||
|
Assert.Equal(2, workflow_2.Steps.Count); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_delete_workflow() |
||||
|
{ |
||||
|
// STEP 0: Create app.
|
||||
|
await CreateAppAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 0: Create workflow.
|
||||
|
var workflow = await CreateAsync(); |
||||
|
|
||||
|
|
||||
|
// STEP 1: Delete workflow.
|
||||
|
var workflows_2 = await _.Apps.DeleteWorkflowAsync(appName, workflow.Id); |
||||
|
|
||||
|
Assert.DoesNotContain(workflows_2.Items, x => x.Name == name); |
||||
|
} |
||||
|
|
||||
|
private async Task<WorkflowDto> CreateAsync() |
||||
|
{ |
||||
|
var createRequest = new AddWorkflowDto |
||||
|
{ |
||||
|
Name = name |
||||
|
}; |
||||
|
|
||||
|
var workflows = await _.Apps.PostWorkflowAsync(appName, createRequest); |
||||
|
var workflow = workflows.Items.Find(x => x.Name == name); |
||||
|
|
||||
|
return workflow; |
||||
|
} |
||||
|
|
||||
|
private async Task CreateAppAsync() |
||||
|
{ |
||||
|
var createRequest = new CreateAppDto |
||||
|
{ |
||||
|
Name = appName |
||||
|
}; |
||||
|
|
||||
|
await _.Apps.PostAppAsync(createRequest); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue