Browse Source

Test improvements.

pull/908/head
Sebastian 3 years ago
parent
commit
b35538451f
  1. 27
      backend/tools/TestSuite/TestSuite.ApiTests/AnonymousTests.cs
  2. 10
      backend/tools/TestSuite/TestSuite.ApiTests/AppClientsTests.cs
  3. 19
      backend/tools/TestSuite/TestSuite.ApiTests/AppContributorsTests.cs
  4. 56
      backend/tools/TestSuite/TestSuite.ApiTests/AppCreationTests.cs
  5. 26
      backend/tools/TestSuite/TestSuite.ApiTests/AppRolesTests.cs
  6. 27
      backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs
  7. 76
      backend/tools/TestSuite/TestSuite.ApiTests/BackupTests.cs
  8. 20
      backend/tools/TestSuite/TestSuite.ApiTests/CommentsTests.cs
  9. 56
      backend/tools/TestSuite/TestSuite.ApiTests/SchemaTests.cs
  10. 2
      backend/tools/TestSuite/TestSuite.Shared/Utils/TestHelpers.cs

27
backend/tools/TestSuite/TestSuite.ApiTests/AnonymousTests.cs

@ -30,7 +30,10 @@ namespace TestSuite.ApiTests
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
var createRequest = new CreateAppDto
{
Name = appName
};
var app = await _.Apps.PostAppAsync(createRequest);
@ -39,7 +42,10 @@ namespace TestSuite.ApiTests
// STEP 2: Make the client anonymous.
var clientRequest = new UpdateClientDto { AllowAnonymous = true };
var clientRequest = new UpdateClientDto
{
AllowAnonymous = true
};
await _.Apps.PutClientAsync(appName, "default", clientRequest);
@ -61,7 +67,10 @@ namespace TestSuite.ApiTests
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
var createRequest = new CreateAppDto
{
Name = appName
};
var app = await _.Apps.PostAppAsync(createRequest);
@ -70,13 +79,21 @@ namespace TestSuite.ApiTests
// STEP 2: Make the client anonymous.
var clientRequest = new UpdateClientDto { AllowAnonymous = true };
var clientRequest = new UpdateClientDto
{
AllowAnonymous = true
};
await _.Apps.PutClientAsync(appName, "default", clientRequest);
// STEP 3: Create schema
var schemaRequest = new CreateSchemaDto { Name = "my-content", IsPublished = true };
var schemaRequest = new CreateSchemaDto
{
Name = "my-content",
// Schema must be published to create content.
IsPublished = true
};
await _.Schemas.PostSchemaAsync(appName, schemaRequest);

10
backend/tools/TestSuite/TestSuite.ApiTests/AppClientsTests.cs

@ -95,7 +95,10 @@ namespace TestSuite.ApiTests
private async Task<ClientDto> CreateAsync()
{
var createRequest = new CreateClientDto { Id = id };
var createRequest = new CreateClientDto
{
Id = id
};
var clients = await _.Apps.PostClientAsync(appName, createRequest);
var client = clients.Items.Find(x => x.Id == id);
@ -105,7 +108,10 @@ namespace TestSuite.ApiTests
private async Task CreateAppAsync()
{
var createRequest = new CreateAppDto { Name = appName };
var createRequest = new CreateAppDto
{
Name = appName
};
await _.Apps.PostAppAsync(createRequest);
}

19
backend/tools/TestSuite/TestSuite.ApiTests/AppContributorsTests.cs

@ -34,7 +34,10 @@ namespace TestSuite.ApiTests
// STEP 1: Do not invite contributors when flag is false.
var createRequest = new AssignContributorDto { ContributorId = "test@squidex.io" };
var createRequest = new AssignContributorDto
{
ContributorId = "test@squidex.io"
};
var ex = await Assert.ThrowsAnyAsync<SquidexManagementException>(() =>
{
@ -69,7 +72,12 @@ namespace TestSuite.ApiTests
// STEP 1: Update contributor role.
var updateRequest = new AssignContributorDto { ContributorId = email, Role = "Owner" };
var updateRequest = new AssignContributorDto
{
ContributorId = email,
// Test update of role.
Role = "Owner"
};
var contributors_2 = await _.Apps.PostContributorAsync(appName, updateRequest);
var contributor_2 = contributors_2.Items.Find(x => x.ContributorId == contributor.ContributorId);
@ -96,7 +104,12 @@ namespace TestSuite.ApiTests
private async Task<ContributorDto> InviteAsync()
{
var createInviteRequest = new AssignContributorDto { ContributorId = email, Invite = true };
var createInviteRequest = new AssignContributorDto
{
ContributorId = email,
// Invite must be true, otherwise new users are not created.
Invite = true
};
var contributors = await _.Apps.PostContributorAsync(appName, createInviteRequest);
var contributor = contributors.Items.Find(x => x.ContributorName == email);

56
backend/tools/TestSuite/TestSuite.ApiTests/AppCreationTests.cs

@ -16,6 +16,8 @@ namespace TestSuite.ApiTests
{
public class AppCreationTests : IClassFixture<ClientFixture>
{
private readonly string appName = Guid.NewGuid().ToString();
public ClientFixture _ { get; }
public AppCreationTests(ClientFixture fixture)
@ -26,10 +28,11 @@ namespace TestSuite.ApiTests
[Fact]
public async Task Should_create_app()
{
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
var createRequest = new CreateAppDto
{
Name = appName
};
var app = await _.Apps.PostAppAsync(createRequest);
@ -61,15 +64,16 @@ namespace TestSuite.ApiTests
[Fact]
public async Task Should_not_allow_creation_if_name_used()
{
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
await _.Apps.PostAppAsync(createRequest);
await CreateAppAsync();
// STEP 2: Create again and fail
var createRequest = new CreateAppDto
{
Name = appName
};
var ex = await Assert.ThrowsAnyAsync<SquidexManagementException>(() =>
{
return _.Apps.PostAppAsync(createRequest);
@ -81,12 +85,8 @@ namespace TestSuite.ApiTests
[Fact]
public async Task Should_archive_app()
{
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
await _.Apps.PostAppAsync(createRequest);
await CreateAppAsync();
// STEP 2: Archive app
@ -101,12 +101,8 @@ namespace TestSuite.ApiTests
[Fact]
public async Task Should_recreate_after_archived()
{
var appName = Guid.NewGuid().ToString();
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
await _.Apps.PostAppAsync(createRequest);
await CreateAppAsync();
// STEP 2: Archive app
@ -114,14 +110,17 @@ namespace TestSuite.ApiTests
// STEP 3: Create app again
var createRequest = new CreateAppDto
{
Name = appName
};
await _.Apps.PostAppAsync(createRequest);
}
[Fact]
public async Task Should_create_app_from_templates()
{
var appName = Guid.NewGuid().ToString();
// STEP 1: Get template.
var templates = await _.Templates.GetTemplatesAsync();
@ -129,7 +128,12 @@ namespace TestSuite.ApiTests
// STEP 2: Create app.
var createRequest = new CreateAppDto { Name = appName, Template = template.Name };
var createRequest = new CreateAppDto
{
Name = appName,
// The template is just referenced by the name.
Template = template.Name
};
await _.Apps.PostAppAsync(createRequest);
@ -139,5 +143,15 @@ namespace TestSuite.ApiTests
Assert.NotEmpty(schemas.Items);
}
private async Task CreateAppAsync()
{
var createRequest = new CreateAppDto
{
Name = appName
};
await _.Apps.PostAppAsync(createRequest);
}
}
}

26
backend/tools/TestSuite/TestSuite.ApiTests/AppRolesTests.cs

@ -75,7 +75,12 @@ namespace TestSuite.ApiTests
// STEP 2 Assign client and contributor.
await _.Apps.PostClientAsync(_.AppName, new CreateClientDto { Id = client });
var createClientRequest = new CreateClientDto
{
Id = client
};
await _.Apps.PostClientAsync(_.AppName, createClientRequest);
await AssignClient(roleName);
@ -141,21 +146,34 @@ namespace TestSuite.ApiTests
private async Task AssignContributor(string role = null)
{
var assignRequest = new AssignContributorDto { ContributorId = contributor, Role = role, Invite = true };
var assignRequest = new AssignContributorDto
{
ContributorId = contributor,
// Test diffferent role names.
Role = role,
// Invite must be true, otherwise new users are not created.
Invite = true
};
await _.Apps.PostContributorAsync(_.AppName, assignRequest);
}
private async Task AssignClient(string role = null)
{
var updateRequest = new UpdateClientDto { Role = role };
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 createRequest = new AddRoleDto
{
Name = name
};
var roles = await _.Apps.PostRoleAsync(_.AppName, createRequest);
var role = roles.Items.Find(x => x.Name == name);

27
backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs

@ -296,7 +296,10 @@ namespace TestSuite.ApiTests
// STEP 3: Annotate slug.
var slugRequest = new AnnotateAssetDto { Slug = "my-image" };
var slugRequest = new AnnotateAssetDto
{
Slug = "my-image"
};
var asset_3 = await _.Assets.PutAssetAsync(_.AppName, asset_2.Id, slugRequest);
@ -305,7 +308,10 @@ namespace TestSuite.ApiTests
// STEP 3: Annotate file name.
var fileNameRequest = new AnnotateAssetDto { FileName = "My Image" };
var fileNameRequest = new AnnotateAssetDto
{
FileName = "My Image"
};
var asset_4 = await _.Assets.PutAssetAsync(_.AppName, asset_3.Id, fileNameRequest);
@ -333,7 +339,10 @@ namespace TestSuite.ApiTests
// STEP 4: Protect asset
var protectRequest = new AnnotateAssetDto { IsProtected = true };
var protectRequest = new AnnotateAssetDto
{
IsProtected = true
};
var asset_2 = await _.Assets.PutAssetAsync(_.AppName, asset_1.Id, protectRequest);
@ -458,13 +467,21 @@ namespace TestSuite.ApiTests
public async Task Should_delete_recursively()
{
// STEP 1: Create asset folder
var createRequest1 = new CreateAssetFolderDto { FolderName = "folder1" };
var createRequest1 = new CreateAssetFolderDto
{
FolderName = "folder1"
};
var folder_1 = await _.Assets.PostAssetFolderAsync(_.AppName, createRequest1);
// STEP 2: Create nested asset folder
var createRequest2 = new CreateAssetFolderDto { FolderName = "subfolder", ParentId = folder_1.Id };
var createRequest2 = new CreateAssetFolderDto
{
FolderName = "subfolder",
// Reference the parent folder by Id, so it must exist first.
ParentId = folder_1.Id
};
var folder_2 = await _.Assets.PostAssetFolderAsync(_.AppName, createRequest2);

76
backend/tools/TestSuite/TestSuite.ApiTests/BackupTests.cs

@ -37,7 +37,10 @@ namespace TestSuite.ApiTests
var appNameRestore = $"{appName}-restore";
// STEP 1: Create app
var createRequest = new CreateAppDto { Name = appName };
var createRequest = new CreateAppDto
{
Name = appName
};
await _.Apps.PostAppAsync(createRequest);
@ -57,7 +60,12 @@ namespace TestSuite.ApiTests
// STEP 4: Restore backup
var uri = new Uri(new Uri(backupUrl), backup._links["download"].Href);
var restoreRequest = new RestoreRequestDto { Url = uri, Name = appNameRestore };
var restoreRequest = new RestoreRequestDto
{
Url = uri,
// Choose a new app name, because the old one is deleted.
Name = appNameRestore
};
await _.Backups.PostRestoreJobAsync(restoreRequest);
@ -68,6 +76,56 @@ namespace TestSuite.ApiTests
Assert.Equal(JobStatus.Completed, restore?.Status);
}
[Fact]
public async Task Should_backup_and_restore_app_with_deleted_app()
{
// Load the backup from another URL, because the public URL is might not be accessible for the server.
var backupUrl = TestHelpers.GetAndPrintValue("config:backupUrl", _.ServerUrl);
// STEP 1: Create app
var createRequest = new CreateAppDto
{
Name = appName
};
await _.Apps.PostAppAsync(createRequest);
// STEP 2: Prepare app.
await PrepareAppAsync(appName);
// STEP 3: Create backup
await _.Backups.PostBackupAsync(appName);
var backup = await _.Backups.WaitForBackupAsync(appName, TimeSpan.FromMinutes(2));
Assert.Equal(JobStatus.Completed, backup?.Status);
// STEP 4: Delete app
await _.Apps.DeleteAppAsync(appName);
// STEP 5: Restore backup
var uri = new Uri(new Uri(backupUrl), backup._links["download"].Href);
var restoreRequest = new RestoreRequestDto
{
Url = uri,
// Restore the old app name, because it has been deleted anyway.
Name = appName
};
await _.Backups.PostRestoreJobAsync(restoreRequest);
// STEP 6: Wait for the backup.
var restore = await _.Backups.WaitForRestoreAsync(uri, TimeSpan.FromMinutes(2));
Assert.Equal(JobStatus.Completed, restore?.Status);
}
private async Task PrepareAppAsync(string appName)
{
// Create a test schema.
@ -90,15 +148,21 @@ namespace TestSuite.ApiTests
// Create a workflow
var workflow = new AddWorkflowDto { Name = appName };
var workflowRequest = new AddWorkflowDto
{
Name = appName
};
await _.Apps.PostWorkflowAsync(appName, workflow);
await _.Apps.PostWorkflowAsync(appName, workflowRequest);
// Create a language
var language = new AddLanguageDto { Language = "de" };
var languageRequest = new AddLanguageDto
{
Language = "de"
};
await _.Apps.PostLanguageAsync(appName, language);
await _.Apps.PostLanguageAsync(appName, languageRequest);
}
}
}

20
backend/tools/TestSuite/TestSuite.ApiTests/CommentsTests.cs

@ -37,7 +37,10 @@ namespace TestSuite.ApiTests
public async Task Should_create_comment()
{
// STEP 1: Create the comment.
var createRequest = new UpsertCommentDto { Text = resource };
var createRequest = new UpsertCommentDto
{
Text = resource
};
await _.Comments.PostCommentAsync(_.AppName, resource, createRequest);
@ -52,13 +55,19 @@ namespace TestSuite.ApiTests
public async Task Should_update_comment()
{
// STEP 1: Create the comment.
var createRequest = new UpsertCommentDto { Text = resource };
var createRequest = new UpsertCommentDto
{
Text = resource
};
var comment = await _.Comments.PostCommentAsync(_.AppName, resource, createRequest);
// STEP 2: Update comment.
var updateRequest = new UpsertCommentDto { Text = $"{resource}_Update" };
var updateRequest = new UpsertCommentDto
{
Text = $"{resource}_Update"
};
await _.Comments.PutCommentAsync(_.AppName, resource, comment.Id, updateRequest);
@ -73,7 +82,10 @@ namespace TestSuite.ApiTests
public async Task Should_delete_comment()
{
// STEP 1: Create the comment.
var createRequest = new UpsertCommentDto { Text = resource };
var createRequest = new UpsertCommentDto
{
Text = resource
};
var comment = await _.Comments.PostCommentAsync(_.AppName, resource, createRequest);

56
backend/tools/TestSuite/TestSuite.ApiTests/SchemaTests.cs

@ -30,7 +30,10 @@ namespace TestSuite.ApiTests
public async Task Should_create_schema()
{
// STEP 1: Create schema
var createRequest = new CreateSchemaDto { Name = schemaName };
var createRequest = new CreateSchemaDto
{
Name = schemaName
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
@ -49,7 +52,10 @@ namespace TestSuite.ApiTests
public async Task Should_not_allow_creation_if_name_used()
{
// STEP 1: Create schema
var createRequest = new CreateSchemaDto { Name = schemaName };
var createRequest = new CreateSchemaDto
{
Name = schemaName
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
@ -70,8 +76,40 @@ namespace TestSuite.ApiTests
var createRequest = new CreateSchemaDto
{
Name = schemaName,
IsSingleton = true,
IsPublished = true
// Use the new property to create a singleton.
Type = SchemaType.Singleton
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
// Should return created schemas with correct name.
Assert.Equal(schemaName, schema.Name);
// STEP 2: Get all schemas
var schemas = await _.Schemas.GetSchemasAsync(_.AppName);
// Should provide new schema when apps are schemas.
Assert.Contains(schemas.Items, x => x.Name == schemaName);
// STEP 3: Get singleton content
var client = _.ClientManager.CreateDynamicContentsClient(schemaName);
var content = await client.GetAsync(schema.Id);
Assert.NotNull(content);
}
[Fact]
public async Task Should_create_singleton_schema_with_obsolete_property()
{
// STEP 1: Create schema
var createRequest = new CreateSchemaDto
{
Name = schemaName,
// Use the old property to create a singleton.
IsSingleton = true
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
@ -136,7 +174,10 @@ namespace TestSuite.ApiTests
public async Task Should_delete_Schema()
{
// STEP 1: Create schema
var createRequest = new CreateSchemaDto { Name = schemaName };
var createRequest = new CreateSchemaDto
{
Name = schemaName
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
@ -157,7 +198,10 @@ namespace TestSuite.ApiTests
public async Task Should_recreate_after_deleted()
{
// STEP 1: Create schema
var createRequest = new CreateSchemaDto { Name = schemaName };
var createRequest = new CreateSchemaDto
{
Name = schemaName
};
var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

2
backend/tools/TestSuite/TestSuite.Shared/Utils/TestHelpers.cs

@ -35,7 +35,7 @@ namespace TestSuite.Utils
}
else
{
Console.WriteLine("Using: {0}={1}", name, value);
Console.WriteLine("Using <{0}>=<{1}>", name, value);
}
return value;

Loading…
Cancel
Save