Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Dappi.HeadlessCms.Tests/Auth/AuthHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Net.Http.Json;

namespace Dappi.HeadlessCms.Tests.Auth
{
public static class AuthHandler
{
public static async Task<AuthTestModel?> Authorize(this HttpClient client)
{
var auth = await client.PostAsJsonAsync("/api/Auth/login" , new {Username = "Admin", Password = "Dappi@123"});
auth.EnsureSuccessStatusCode();
return await auth.Content.ReadFromJsonAsync<AuthTestModel>();
}
}
}
9 changes: 9 additions & 0 deletions Dappi.HeadlessCms.Tests/Auth/AuthTestModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Dappi.HeadlessCms.Tests.Auth
{
public class AuthTestModel
{
public string Token { get; set; }
public string Username { get; set; }
public List<string> Roles { get; set; }
}
}
65 changes: 65 additions & 0 deletions Dappi.HeadlessCms.Tests/Controllers/ModelsControllerTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Net.Http.Json;
using System.Text.RegularExpressions;
using Dappi.HeadlessCms.Models;
using Dappi.HeadlessCms.Tests.Auth;
using Dappi.HeadlessCms.Tests.TestData;

namespace Dappi.HeadlessCms.Tests.Controllers
Expand Down Expand Up @@ -31,6 +32,7 @@ public class TestDbContext(DbContextOptions options) : DappiDbContext(options)
public ModelsControllerTests(IntegrationWebAppFactory factory) : base(factory)
{
_client = factory.CreateClient();

_entitiesPath = "Entities";
_dbContextPath = "Data";
_verifySettings = new VerifySettings();
Expand All @@ -53,6 +55,9 @@ public ModelsControllerTests(IntegrationWebAppFactory factory) : base(factory)
[Fact]
public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Empty()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new ModelRequest { ModelName = string.Empty, IsAuditableEntity = false };
var res = await _client.PostAsJsonAsync(_baseUrl, request);

Expand All @@ -66,6 +71,9 @@ public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Empty()
[ClassData(typeof(InvalidPropertyTypesAndClassNames))]
public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Invalid(string modelName)
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new ModelRequest { ModelName = modelName, IsAuditableEntity = false };
var res = await _client.PostAsJsonAsync(_baseUrl, request);

Expand All @@ -78,6 +86,9 @@ public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Invalid(
[Fact]
public async Task CreateModel_Should_Create_Model_File()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new ModelRequest { ModelName = "Product", IsAuditableEntity = false };
var res = await _client.PostAsJsonAsync(_baseUrl, request);
var filePath = Path.Combine(_entitiesPath, $"{request.ModelName}.cs");
Expand All @@ -95,6 +106,9 @@ public async Task CreateModel_Should_Create_Model_File()
[Fact]
public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Already_Taken()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new ModelRequest { ModelName = "DuplicateModel", IsAuditableEntity = false };
await _client.PostAsJsonAsync(_baseUrl, request);
var res = await _client.PostAsJsonAsync(_baseUrl, request);
Expand All @@ -107,6 +121,9 @@ public async Task CreateModel_Should_Return_BadRequest_If_Model_Name_Is_Already_
[Fact]
public async Task CreateModel_Should_Create_Model_File_With_Auditable_Props()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new ModelRequest { ModelName = "InventoryItem", IsAuditableEntity = true };
var res = await _client.PostAsJsonAsync(_baseUrl, request);
var filePath = Path.Combine(_entitiesPath, $"{request.ModelName}.cs");
Expand All @@ -124,6 +141,9 @@ public async Task CreateModel_Should_Create_Model_File_With_Auditable_Props()
[Fact]
public async Task GetAllModels_Should_Return_All_Models()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

await _client.PostAsJsonAsync(_baseUrl,
new ModelRequest { ModelName = "TestModel1", IsAuditableEntity = false });
await _client.PostAsJsonAsync(_baseUrl,
Expand All @@ -141,6 +161,9 @@ await _client.PostAsJsonAsync(_baseUrl,
[Fact]
public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Empty()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new FieldRequest
{
FieldName = string.Empty,
Expand All @@ -160,6 +183,9 @@ public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Empty()
[ClassData(typeof(InvalidPropertyTypesAndClassNames))]
public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Invalid(string fieldName)
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new FieldRequest
{
FieldName = fieldName,
Expand All @@ -179,6 +205,9 @@ public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Invalid(str
[Fact]
public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Same_As_Model()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new FieldRequest
{
FieldName = "Product",
Expand All @@ -199,6 +228,9 @@ public async Task AddField_Should_Return_BadRequest_If_Field_Name_Is_Same_As_Mod
[Fact]
public async Task AddField_Should_Return_NotFound_If_Model_Does_Not_Exist()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var request = new FieldRequest
{
FieldName = "Product",
Expand All @@ -219,6 +251,9 @@ public async Task AddField_Should_Return_NotFound_If_Model_Does_Not_Exist()
[Theory]
public async Task AddField_Should_Add_Required_Field_To_Model(string fieldName, string fieldType)
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var model = new ModelRequest { ModelName = "ProductTwo", IsAuditableEntity = false };
var request = new FieldRequest
{
Expand All @@ -245,6 +280,9 @@ public async Task AddField_Should_Add_Required_Field_To_Model(string fieldName,
[Theory]
public async Task AddField_Should_Add_Optional_Field_To_Model(string fieldName, string fieldType)
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var model = new ModelRequest { ModelName = "ProductThree", IsAuditableEntity = false };
var request = new FieldRequest
{
Expand All @@ -270,6 +308,9 @@ public async Task AddField_Should_Add_Optional_Field_To_Model(string fieldName,
[Fact]
public async Task AddField_Should_Add_OneToOne_Relation_To_Models()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var type1 = "TestClassOne";
var type2 = "TestClassTwo";
var request = new FieldRequest
Expand Down Expand Up @@ -299,6 +340,9 @@ public async Task AddField_Should_Add_OneToOne_Relation_To_Models()
[Fact]
public async Task AddField_Should_Add_OneToMany_Relation_To_Models()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var type1 = "TestClassThree";
var type2 = "TestClassFour";
var request = new FieldRequest
Expand Down Expand Up @@ -329,6 +373,9 @@ public async Task AddField_Should_Add_OneToMany_Relation_To_Models()
[Fact]
public async Task AddField_Should_Add_ManyToOne_Relation_To_Models()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var type1 = "TestClassFive";
var type2 = "TestClassSix";
var request = new FieldRequest
Expand Down Expand Up @@ -359,6 +406,9 @@ public async Task AddField_Should_Add_ManyToOne_Relation_To_Models()
[Fact]
public async Task AddField_Should_Add_ManyToMany_Relation_To_Models()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var type1 = "TestClassSeven";
var type2 = "TestClassEight";
var request = new FieldRequest
Expand Down Expand Up @@ -389,6 +439,9 @@ public async Task AddField_Should_Add_ManyToMany_Relation_To_Models()
[Fact]
public async Task DeleteModel_Should_Return_NotFound_If_Model_Does_Not_Exist()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var res = await _client.DeleteAsync($"{_baseUrl}/NotExistingClass");
_verifySettings.UseDirectory($"{_snapshotPath}/{nameof(DeleteModel_Should_Return_NotFound_If_Model_Does_Not_Exist)}");
await Verify(res, _verifySettings).UseFileName("response");
Expand All @@ -397,6 +450,9 @@ public async Task DeleteModel_Should_Return_NotFound_If_Model_Does_Not_Exist()
[Fact]
public async Task DeleteModel_Should_Return_BadRequest_If_ModelName_Is_Empty()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var res = await _client.DeleteAsync($"{_baseUrl}/{string.Empty}");
_verifySettings.UseDirectory($"{_snapshotPath}/{nameof(DeleteModel_Should_Return_BadRequest_If_ModelName_Is_Empty)}");
await Verify(res, _verifySettings).UseFileName("response");
Expand All @@ -405,6 +461,9 @@ public async Task DeleteModel_Should_Return_BadRequest_If_ModelName_Is_Empty()
[Fact]
public async Task DeleteModel_Should_Delete_Model_File()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

var modelName = "TestDeleteModel";
await _client.PostAsJsonAsync(_baseUrl, new ModelRequest { ModelName = modelName, IsAuditableEntity = false });
var res = await _client.DeleteAsync($"{_baseUrl}/{modelName}");
Expand All @@ -421,6 +480,9 @@ public async Task DeleteModel_Should_Delete_Model_File()
[Fact]
public async Task DeleteModel_Should_Delete_Relations_And_References()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

const string user = "User";
const string post = "Post";
var request = new FieldRequest
Expand Down Expand Up @@ -454,6 +516,9 @@ public async Task DeleteModel_Should_Delete_Relations_And_References()
[Fact]
public async Task Other_Relations_Should_Not_Be_Deleted()
{
var auth = await _client.Authorize();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {auth?.Token}");

const string user = "User";
const string post = "Post";
const string comment = "Comment";
Expand Down
1 change: 1 addition & 0 deletions Dappi.HeadlessCms.Tests/Dappi.HeadlessCms.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Bogus" Version="35.6.5" />
<PackageReference Include="coverlet.collector" Version="6.0.2"/>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
Expand Down
Loading