Sprint 8 #43

Merged
csimonapastore merged 20 commits from sprints/8 into main 2025-06-21 01:11:03 +02:00
14 changed files with 581 additions and 626 deletions
Showing only changes of commit 8bc50f8135 - Show all commits

View File

@@ -81,41 +81,41 @@ public class AuthController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task AuthenticateAsync_AuthenticateRequestDataNull() // public async Task AuthenticateAsync_AuthenticateRequestDataNull()
{ // {
IConfiguration configuration = TestUtils.CreateConfiguration(); // IConfiguration configuration = TestUtils.CreateConfiguration();
var authServiceMock = new Mock<IAuthService>(); // var authServiceMock = new Mock<IAuthService>();
var controller = new AuthController(configuration, authServiceMock.Object); // var controller = new AuthController(configuration, authServiceMock.Object);
var request = new AuthenticateRequest // var request = new AuthenticateRequest
{ // {
Data = null // Data = null
}; // };
AuthenticatedUser? authenticatedUser = null; // AuthenticatedUser? authenticatedUser = null;
authServiceMock.Setup(s => s.AuthenticateAsync(It.IsAny<AuthenticateRequestData>())).ReturnsAsync(authenticatedUser); // authServiceMock.Setup(s => s.AuthenticateAsync(It.IsAny<AuthenticateRequestData>())).ReturnsAsync(authenticatedUser);
ObjectResult response = (ObjectResult)(await controller.AuthenticateAsync(request)); // ObjectResult response = (ObjectResult)(await controller.AuthenticateAsync(request));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task AuthenticateAsync_NotFound() public async Task AuthenticateAsync_NotFound()
@@ -148,44 +148,44 @@ public class AuthController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task AuthenticateAsync_ModelInvalid() // public async Task AuthenticateAsync_ModelInvalid()
{ // {
IConfiguration configuration = TestUtils.CreateConfiguration(); // IConfiguration configuration = TestUtils.CreateConfiguration();
var authServiceMock = new Mock<IAuthService>(); // var authServiceMock = new Mock<IAuthService>();
var controller = new AuthController(configuration, authServiceMock.Object); // var controller = new AuthController(configuration, authServiceMock.Object);
var request = new AuthenticateRequest // var request = new AuthenticateRequest
{ // {
Data = null // Data = null
}; // };
AuthenticatedUser? authenticatedUser = null; // AuthenticatedUser? authenticatedUser = null;
authServiceMock.Setup(s => s.AuthenticateAsync(It.IsAny<AuthenticateRequestData>())).ReturnsAsync(authenticatedUser); // authServiceMock.Setup(s => s.AuthenticateAsync(It.IsAny<AuthenticateRequestData>())).ReturnsAsync(authenticatedUser);
controller.ModelState.AddModelError("Data", "Invalid data"); // controller.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await controller.AuthenticateAsync(request)); // ObjectResult response = (ObjectResult)(await controller.AuthenticateAsync(request));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task AuthenticateAsync_Exception() public async Task AuthenticateAsync_Exception()

View File

@@ -89,40 +89,40 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task GetRoleByGuidAsync_GuidIsEmpty() // public async Task GetRoleByGuidAsync_GuidIsEmpty()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
var guid = String.Empty; // var guid = String.Empty;
DatabaseSqlServer.Role? role = null; // DatabaseSqlServer.Role? role = null;
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
ObjectResult response = (ObjectResult)(await _roleController.GetRoleByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _roleController.GetRoleByGuidAsync(guid));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task GetRoleByGuidAsync_NotFound() public async Task GetRoleByGuidAsync_NotFound()
@@ -149,42 +149,42 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task GetRoleByGuidAsync_ModelInvalid() // public async Task GetRoleByGuidAsync_ModelInvalid()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
var guid = Guid.NewGuid().ToString(); // var guid = Guid.NewGuid().ToString();
DatabaseSqlServer.Role? role = null; // DatabaseSqlServer.Role? role = null;
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
_roleController.ModelState.AddModelError("Data", "Invalid data"); // _roleController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _roleController.GetRoleByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _roleController.GetRoleByGuidAsync(guid));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task GetRoleByGuidAsync_Exception() public async Task GetRoleByGuidAsync_Exception()
@@ -316,49 +316,49 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task CreateRoleAsync_CreateRoleRequestDataNull() // public async Task CreateRoleAsync_CreateRoleRequestDataNull()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
DatabaseSqlServer.Role role = ModelsInit.CreateRole(); // DatabaseSqlServer.Role role = ModelsInit.CreateRole();
CreateRoleRequest request = new CreateRoleRequest() // CreateRoleRequest request = new CreateRoleRequest()
{ // {
Data = null // Data = null
}; // };
_roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_roleServiceMock?.Setup(s => s.CreateRoleAsync( // _roleServiceMock?.Setup(s => s.CreateRoleAsync(
It.IsAny<CreateRoleRequestData>() // It.IsAny<CreateRoleRequestData>()
)).ReturnsAsync(role); // )).ReturnsAsync(role);
ObjectResult response = (ObjectResult)(await _roleController.CreateRoleAsync(request)); // ObjectResult response = (ObjectResult)(await _roleController.CreateRoleAsync(request));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task CreateRoleAsync_NotCreated() public async Task CreateRoleAsync_NotCreated()
@@ -410,55 +410,55 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task CreateRoleAsync_ModelInvalid() // public async Task CreateRoleAsync_ModelInvalid()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
DatabaseSqlServer.Role role = ModelsInit.CreateRole(); // DatabaseSqlServer.Role role = ModelsInit.CreateRole();
CreateRoleRequest request = new CreateRoleRequest() // CreateRoleRequest request = new CreateRoleRequest()
{ // {
Data = new CreateRoleRequestData() // Data = new CreateRoleRequestData()
{ // {
Name = "RoleTest", // Name = "RoleTest",
IsNotEditable = true // IsNotEditable = true
} // }
}; // };
_roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_roleServiceMock?.Setup(s => s.CreateRoleAsync( // _roleServiceMock?.Setup(s => s.CreateRoleAsync(
It.IsAny<CreateRoleRequestData>() // It.IsAny<CreateRoleRequestData>()
)).ReturnsAsync(role); // )).ReturnsAsync(role);
_roleController.ModelState.AddModelError("Data", "Invalid data"); // _roleController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _roleController.CreateRoleAsync(request)); // ObjectResult response = (ObjectResult)(await _roleController.CreateRoleAsync(request));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task CreateRoleAsync_Exception() public async Task CreateRoleAsync_Exception()
@@ -539,40 +539,40 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task DeleteRoleByGuidAsync_GuidIsEmpty() // public async Task DeleteRoleByGuidAsync_GuidIsEmpty()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
var guid = String.Empty; // var guid = String.Empty;
DatabaseSqlServer.Role? role = null; // DatabaseSqlServer.Role? role = null;
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
ObjectResult response = (ObjectResult)(await _roleController.DeleteRoleByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _roleController.DeleteRoleByGuidAsync(guid));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task DeleteRoleByGuidAsync_NotFound() public async Task DeleteRoleByGuidAsync_NotFound()
@@ -599,42 +599,42 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task DeleteRoleByGuidAsync_ModelInvalid() // public async Task DeleteRoleByGuidAsync_ModelInvalid()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
var guid = Guid.NewGuid().ToString(); // var guid = Guid.NewGuid().ToString();
DatabaseSqlServer.Role? role = null; // DatabaseSqlServer.Role? role = null;
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
_roleController.ModelState.AddModelError("Data", "Invalid data"); // _roleController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _roleController.DeleteRoleByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _roleController.DeleteRoleByGuidAsync(guid));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task DeleteRoleByGuidAsync_Exception() public async Task DeleteRoleByGuidAsync_Exception()
@@ -851,95 +851,95 @@ public class RoleController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task UpdateRoleAsync_CreateRoleRequestDataNull() // public async Task UpdateRoleAsync_CreateRoleRequestDataNull()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
DatabaseSqlServer.Role role = ModelsInit.CreateRole(); // DatabaseSqlServer.Role role = ModelsInit.CreateRole();
CreateRoleRequest request = new CreateRoleRequest() // CreateRoleRequest request = new CreateRoleRequest()
{ // {
Data = null // Data = null
}; // };
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
_roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_roleServiceMock?.Setup(s => s.UpdateRoleAsync(It.IsAny<CreateRoleRequestData>(), It.IsAny<Role>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.UpdateRoleAsync(It.IsAny<CreateRoleRequestData>(), It.IsAny<Role>())).ReturnsAsync(role);
ObjectResult response = (ObjectResult)(await _roleController.UpdateRoleAsync(request, role.Guid)); // ObjectResult response = (ObjectResult)(await _roleController.UpdateRoleAsync(request, role.Guid));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] // [TestMethod]
public async Task UpdateRoleAsync_ModelInvalid() // public async Task UpdateRoleAsync_ModelInvalid()
{ // {
if (_roleController == null) // if (_roleController == null)
{ // {
Assert.Fail($"_roleController is null"); // Assert.Fail($"_roleController is null");
} // }
DatabaseSqlServer.Role role = ModelsInit.CreateRole(); // DatabaseSqlServer.Role role = ModelsInit.CreateRole();
CreateRoleRequest request = new CreateRoleRequest() // CreateRoleRequest request = new CreateRoleRequest()
{ // {
Data = new CreateRoleRequestData() // Data = new CreateRoleRequestData()
{ // {
Name = "RoleTest", // Name = "RoleTest",
IsNotEditable = true // IsNotEditable = true
} // }
}; // };
_roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.GetRoleByGuidAsync(It.IsAny<string>())).ReturnsAsync(role);
_roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _roleServiceMock?.Setup(s => s.CheckIfNameIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_roleServiceMock?.Setup(s => s.UpdateRoleAsync(It.IsAny<CreateRoleRequestData>(), It.IsAny<Role>())).ReturnsAsync(role); // _roleServiceMock?.Setup(s => s.UpdateRoleAsync(It.IsAny<CreateRoleRequestData>(), It.IsAny<Role>())).ReturnsAsync(role);
_roleController.ModelState.AddModelError("Data", "Invalid data"); // _roleController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _roleController.UpdateRoleAsync(request, role.Guid)); // ObjectResult response = (ObjectResult)(await _roleController.UpdateRoleAsync(request, role.Guid));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task UpdateRoleAsync_Exception() public async Task UpdateRoleAsync_Exception()

View File

@@ -99,40 +99,40 @@ public class UserController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task GetUserByGuidAsync_GuidIsEmpty() // public async Task GetUserByGuidAsync_GuidIsEmpty()
{ // {
if (_userController == null) // if (_userController == null)
{ // {
Assert.Fail($"_userController is null"); // Assert.Fail($"_userController is null");
} // }
var guid = String.Empty; // var guid = String.Empty;
DatabaseSqlServer.User? user = null; // DatabaseSqlServer.User? user = null;
_userServiceMock?.Setup(s => s.GetUserByGuidAsync(It.IsAny<string>())).ReturnsAsync(user); // _userServiceMock?.Setup(s => s.GetUserByGuidAsync(It.IsAny<string>())).ReturnsAsync(user);
ObjectResult response = (ObjectResult)(await _userController.GetUserByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _userController.GetUserByGuidAsync(guid));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task GetUserByGuidAsync_NotFound() public async Task GetUserByGuidAsync_NotFound()
@@ -159,42 +159,42 @@ public class UserController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task GetUserByGuidAsync_ModelInvalid() // public async Task GetUserByGuidAsync_ModelInvalid()
{ // {
if (_userController == null) // if (_userController == null)
{ // {
Assert.Fail($"_userController is null"); // Assert.Fail($"_userController is null");
} // }
var guid = Guid.NewGuid().ToString(); // var guid = Guid.NewGuid().ToString();
DatabaseSqlServer.User? user = null; // DatabaseSqlServer.User? user = null;
_userServiceMock?.Setup(s => s.GetUserByGuidAsync(It.IsAny<string>())).ReturnsAsync(user); // _userServiceMock?.Setup(s => s.GetUserByGuidAsync(It.IsAny<string>())).ReturnsAsync(user);
_userController.ModelState.AddModelError("Data", "Invalid data"); // _userController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _userController.GetUserByGuidAsync(guid)); // ObjectResult response = (ObjectResult)(await _userController.GetUserByGuidAsync(guid));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response is null"); // Assert.Fail($"Response is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task GetUserByGuidAsync_Exception() public async Task GetUserByGuidAsync_Exception()
@@ -381,50 +381,50 @@ public class UserController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task CreateUserAsync_CreateUserRequestDataNull() // public async Task CreateUserAsync_CreateUserRequestDataNull()
{ // {
if (_userController == null) // if (_userController == null)
{ // {
Assert.Fail($"_userController is null"); // Assert.Fail($"_userController is null");
} // }
DatabaseSqlServer.User user = ModelsInit.CreateUser(); // DatabaseSqlServer.User user = ModelsInit.CreateUser();
CreateUserRequest request = new CreateUserRequest() // CreateUserRequest request = new CreateUserRequest()
{ // {
Data = null // Data = null
}; // };
_userServiceMock?.Setup(s => s.CheckIfEmailIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _userServiceMock?.Setup(s => s.CheckIfEmailIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_userServiceMock?.Setup(s => s.CreateUserAsync( // _userServiceMock?.Setup(s => s.CreateUserAsync(
It.IsAny<CreateUserRequestData>(), // It.IsAny<CreateUserRequestData>(),
It.IsAny<Role>() // It.IsAny<Role>()
)).ReturnsAsync(user); // )).ReturnsAsync(user);
ObjectResult response = (ObjectResult)(await _userController.CreateUserAsync(request)); // ObjectResult response = (ObjectResult)(await _userController.CreateUserAsync(request));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Assert.IsTrue(result.Message == "Request is not well formed");
} // }
else // else
{ // {
Assert.Fail($"Result value is null"); // Assert.Fail($"Result value is null");
} // }
} // }
else // else
{ // {
Assert.Fail($"Response value is null"); // Assert.Fail($"Response value is null");
} // }
} // }
[TestMethod] [TestMethod]
public async Task CreateUserAsync_NotCreated() public async Task CreateUserAsync_NotCreated()
@@ -481,58 +481,59 @@ public class UserController_Tests
} }
} }
[TestMethod] // [TestMethod]
public async Task CreateUserAsync_ModelInvalid() // public async Task CreateUserAsync_ModelInvalid()
{ // {
if (_userController == null) // if (_userController == null)
{ // {
Assert.Fail($"_userController is null"); // Assert.Fail($"_userController is null");
} // }
DatabaseSqlServer.User user = ModelsInit.CreateUser(); // DatabaseSqlServer.User user = ModelsInit.CreateUser();
CreateUserRequest request = new CreateUserRequest() // CreateUserRequest request = new CreateUserRequest()
{ // {
Data = new CreateUserRequestData() // Data = new CreateUserRequestData()
{ // {
FirstName = user.FirstName, // FirstName = user.FirstName,
LastName = user.LastName, // LastName = user.LastName,
Email = user.Email, // Email = user.Email,
Password = user.Password // Password = user.Password
} // }
}; // };
_userServiceMock?.Setup(s => s.CheckIfEmailIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true); // _userServiceMock?.Setup(s => s.CheckIfEmailIsValid(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);
_userServiceMock?.Setup(s => s.CreateUserAsync( // _userServiceMock?.Setup(s => s.CreateUserAsync(
It.IsAny<CreateUserRequestData>(), // It.IsAny<CreateUserRequestData>(),
It.IsAny<Role>() // It.IsAny<Role>()
)).ReturnsAsync(user); // )).ReturnsAsync(user);
_userController.ModelState.AddModelError("Data", "Invalid data"); // _userController.ModelState.AddModelError("Data", "Invalid data");
ObjectResult response = (ObjectResult)(await _userController.CreateUserAsync(request)); // ObjectResult response = (ObjectResult)(await _userController.CreateUserAsync(request));
Assert.IsInstanceOfType(response, typeof(ObjectResult)); // Assert.IsInstanceOfType(response, typeof(ObjectResult));
if (response != null && response.Value != null) // if (response != null && response.Value != null)
{ // {
Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest); // Assert.IsTrue(response.StatusCode == StatusCodes.Status400BadRequest);
var result = (BaseResponse<object>)response.Value; // var result = (BaseResponse<object>)response.Value;
if (result != null) // if (result != null)
{ // {
Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest); // Assert.IsTrue(result.Status == StatusCodes.Status400BadRequest);
Assert.IsTrue(result.Message == "Request is not well formed"); // Console.WriteLine(JsonConvert.SerializeObject(result));
} // Assert.IsTrue(result.Message == "Request is not well formed");
else // }
{ // else
Assert.Fail($"Result value is null"); // {
} // Assert.Fail($"Result value is null");
} // }
else // }
{ // else
Assert.Fail($"Response is null"); // {
} // Assert.Fail($"Response is null");
} // }
// }
[TestMethod] [TestMethod]
public async Task CreateUserAsync_Exception() public async Task CreateUserAsync_Exception()

View File

@@ -158,7 +158,8 @@ public class UserService_Tests
{ {
FirstName = expectedUser.FirstName ?? String.Empty, FirstName = expectedUser.FirstName ?? String.Empty,
LastName = expectedUser.LastName ?? String.Empty, LastName = expectedUser.LastName ?? String.Empty,
Email = expectedUser.Email ?? String.Empty Email = expectedUser.Email ?? String.Empty,
Password = expectedUser.Password ?? String.Empty
}; };
Role role = new() Role role = new()

View File

@@ -6,6 +6,7 @@ using BasicDotnetTemplate.MainProject.Models.Api.Request.Auth;
using BasicDotnetTemplate.MainProject.Models.Api.Response; using BasicDotnetTemplate.MainProject.Models.Api.Response;
using BasicDotnetTemplate.MainProject.Models.Api.Response.Auth; using BasicDotnetTemplate.MainProject.Models.Api.Response.Auth;
using BasicDotnetTemplate.MainProject.Services; using BasicDotnetTemplate.MainProject.Services;
using BasicDotnetTemplate.MainProject.Core.Filters;
namespace BasicDotnetTemplate.MainProject.Controllers namespace BasicDotnetTemplate.MainProject.Controllers
{ {
@@ -21,29 +22,16 @@ namespace BasicDotnetTemplate.MainProject.Controllers
this._authService = authService; this._authService = authService;
} }
[ModelStateValidationHandledByFilterAttribute]
[HttpPost("authenticate")] [HttpPost("authenticate")]
[ProducesResponseType<AuthenticateResponse>(StatusCodes.Status200OK)] [ProducesResponseType<AuthenticateResponse>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> AuthenticateAsync([FromBody] AuthenticateRequest request) public async Task<IActionResult> AuthenticateAsync([FromBody] AuthenticateRequest request) //NOSONAR
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (
request == null ||
request.Data == null ||
String.IsNullOrEmpty(request.Data.Email) ||
String.IsNullOrEmpty(request.Data.Password)
)
{
return BadRequest(_requestNotWellFormed);
}
var data = await this._authService.AuthenticateAsync(request.Data); var data = await this._authService.AuthenticateAsync(request.Data);
if (data == null) if (data == null)

View File

@@ -12,7 +12,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
protected readonly IMapper? _mapper; protected readonly IMapper? _mapper;
protected readonly IConfiguration _configuration; protected readonly IConfiguration _configuration;
protected readonly AppSettings _appSettings; protected readonly AppSettings _appSettings;
protected readonly string _requestNotWellFormed = "Request is not well formed";
protected readonly string _somethingWentWrong = "Something went wrong"; protected readonly string _somethingWentWrong = "Something went wrong";
protected BaseController( protected BaseController(

View File

@@ -7,6 +7,7 @@ using BasicDotnetTemplate.MainProject.Models.Api.Response;
using BasicDotnetTemplate.MainProject.Models.Api.Response.Role; using BasicDotnetTemplate.MainProject.Models.Api.Response.Role;
using BasicDotnetTemplate.MainProject.Models.Database.SqlServer; using BasicDotnetTemplate.MainProject.Models.Database.SqlServer;
using BasicDotnetTemplate.MainProject.Models.Api.Common.Role; using BasicDotnetTemplate.MainProject.Models.Api.Common.Role;
using BasicDotnetTemplate.MainProject.Core.Filters;
namespace BasicDotnetTemplate.MainProject.Controllers namespace BasicDotnetTemplate.MainProject.Controllers
{ {
@@ -23,6 +24,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpGet("get/{guid}")] [HttpGet("get/{guid}")]
[ProducesResponseType<GetRoleResponse>(StatusCodes.Status200OK)] [ProducesResponseType<GetRoleResponse>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)]
@@ -32,15 +34,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(guid))
{
return BadRequest(_requestNotWellFormed);
}
var role = await this._roleService.GetRoleByGuidAsync(guid); var role = await this._roleService.GetRoleByGuidAsync(guid);
if (role == null || String.IsNullOrEmpty(role.Guid)) if (role == null || String.IsNullOrEmpty(role.Guid))
@@ -65,25 +58,15 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPost("create")] [HttpPost("create")]
[ProducesResponseType<GetRoleResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetRoleResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> CreateRoleAsync([FromBody] CreateRoleRequest request) public async Task<IActionResult> CreateRoleAsync([FromBody] CreateRoleRequest request) //NOSONAR
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (request == null || request.Data == null || String.IsNullOrEmpty(request.Data.Name)
)
{
return BadRequest(_requestNotWellFormed);
}
if (await this._roleService.CheckIfNameIsValid(request.Data.Name)) if (await this._roleService.CheckIfNameIsValid(request.Data.Name))
{ {
var role = await this._roleService.CreateRoleAsync(request.Data); var role = await this._roleService.CreateRoleAsync(request.Data);
@@ -116,29 +99,15 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPut("update/{guid}")] [HttpPut("update/{guid}")]
[ProducesResponseType<GetRoleResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetRoleResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> UpdateRoleAsync([FromBody] CreateRoleRequest request, string guid) public async Task<IActionResult> UpdateRoleAsync([FromBody] CreateRoleRequest request, string guid) //NOSONAR
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (
request == null ||
request.Data == null ||
String.IsNullOrEmpty(request.Data.Name) ||
String.IsNullOrEmpty(guid)
)
{
return BadRequest(_requestNotWellFormed);
}
var role = await this._roleService.GetRoleByGuidAsync(guid); var role = await this._roleService.GetRoleByGuidAsync(guid);
if (role == null || String.IsNullOrEmpty(role.Guid)) if (role == null || String.IsNullOrEmpty(role.Guid))
@@ -181,6 +150,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpDelete("{guid}")] [HttpDelete("{guid}")]
[ProducesResponseType<GetRoleResponse>(StatusCodes.Status200OK)] [ProducesResponseType<GetRoleResponse>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)]
@@ -190,15 +160,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(guid))
{
return BadRequest(_requestNotWellFormed);
}
var role = await this._roleService.GetRoleByGuidAsync(guid); var role = await this._roleService.GetRoleByGuidAsync(guid);
if (role == null || String.IsNullOrEmpty(role.Guid)) if (role == null || String.IsNullOrEmpty(role.Guid))

View File

@@ -7,6 +7,7 @@ using BasicDotnetTemplate.MainProject.Models.Api.Response;
using BasicDotnetTemplate.MainProject.Models.Api.Response.User; using BasicDotnetTemplate.MainProject.Models.Api.Response.User;
using BasicDotnetTemplate.MainProject.Models.Database.SqlServer; using BasicDotnetTemplate.MainProject.Models.Database.SqlServer;
using BasicDotnetTemplate.MainProject.Models.Api.Common.User; using BasicDotnetTemplate.MainProject.Models.Api.Common.User;
using BasicDotnetTemplate.MainProject.Core.Filters;
namespace BasicDotnetTemplate.MainProject.Controllers namespace BasicDotnetTemplate.MainProject.Controllers
{ {
@@ -25,7 +26,9 @@ namespace BasicDotnetTemplate.MainProject.Controllers
this._roleService = roleService; this._roleService = roleService;
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpGet("get/{guid}")] [HttpGet("get/{guid}")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status200OK)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)]
@@ -35,15 +38,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(guid))
{
return BadRequest(_requestNotWellFormed);
}
var user = await this._userService.GetUserByGuidAsync(guid); var user = await this._userService.GetUserByGuidAsync(guid);
if (user == null || String.IsNullOrEmpty(user.Guid)) if (user == null || String.IsNullOrEmpty(user.Guid))
@@ -67,30 +61,16 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] // [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPost("create")] [HttpPost("create")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> CreateUserAsync([FromBody] CreateUserRequest request) public async Task<IActionResult> CreateUserAsync([FromBody] CreateUserRequest request) //NOSONAR
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (request == null || request.Data == null ||
String.IsNullOrEmpty(request.Data.FirstName) ||
String.IsNullOrEmpty(request.Data.LastName) ||
String.IsNullOrEmpty(request.Data.Email) ||
String.IsNullOrEmpty(request.Data.Password)
)
{
return BadRequest(_requestNotWellFormed);
}
if (await this._userService.CheckIfEmailIsValid(request.Data.Email)) if (await this._userService.CheckIfEmailIsValid(request.Data.Email))
{ {
var role = await this._roleService.GetRoleForUser(request.Data.RoleGuid); var role = await this._roleService.GetRoleForUser(request.Data.RoleGuid);
@@ -129,26 +109,15 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPut("update/{guid}")] [HttpPut("update/{guid}")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> UpdateUserAsync([FromBody] UpdateUserRequest request, string guid) public async Task<IActionResult> UpdateUserAsync([FromBody] UpdateUserRequest request, string guid) //NOSONAR
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (request == null || request.Data == null ||
String.IsNullOrEmpty(request.Data.FirstName) ||
String.IsNullOrEmpty(request.Data.LastName)
)
{
return BadRequest(_requestNotWellFormed);
}
var user = await this._userService.GetUserByGuidAsync(guid); var user = await this._userService.GetUserByGuidAsync(guid);
if(user == null) if(user == null)
{ {
@@ -175,6 +144,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPut("update/{guid}/password")] [HttpPut("update/{guid}/password")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
@@ -183,16 +153,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(newPassword))
{
return BadRequest(_requestNotWellFormed);
}
var user = await this._userService.GetUserByGuidAsync(guid); var user = await this._userService.GetUserByGuidAsync(guid);
if(user == null) if(user == null)
{ {
@@ -219,6 +179,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpPut("update/{guid}/role")] [HttpPut("update/{guid}/role")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status201Created)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status400BadRequest)]
@@ -227,16 +188,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(roleGuid))
{
return BadRequest(_requestNotWellFormed);
}
var role = await this._roleService.GetRoleForUser(roleGuid); var role = await this._roleService.GetRoleForUser(roleGuid);
if (role == null) if (role == null)
{ {
@@ -269,6 +220,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers
} }
[JwtAuthorization()] [JwtAuthorization()]
[ModelStateValidationHandledByFilterAttribute]
[HttpDelete("{guid}")] [HttpDelete("{guid}")]
[ProducesResponseType<GetUserResponse>(StatusCodes.Status200OK)] [ProducesResponseType<GetUserResponse>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)] [ProducesResponseType<BaseResponse<object>>(StatusCodes.Status404NotFound)]
@@ -278,15 +230,6 @@ namespace BasicDotnetTemplate.MainProject.Controllers
{ {
try try
{ {
if (!ModelState.IsValid)
{
return BadRequest(_requestNotWellFormed);
}
if (String.IsNullOrEmpty(guid))
{
return BadRequest(_requestNotWellFormed);
}
var user = await this._userService.GetUserByGuidAsync(guid); var user = await this._userService.GetUserByGuidAsync(guid);
if (user == null || String.IsNullOrEmpty(user.Guid)) if (user == null || String.IsNullOrEmpty(user.Guid))

View File

@@ -0,0 +1,12 @@
using System;
namespace BasicDotnetTemplate.MainProject.Core.Attributes
{
/// <summary>
/// Indicates that ModelState validation is handled automatically by an Action Filter.
/// Used to suppress SonarCloud warnings about missing ModelState.IsValid checks.
/// </summary>
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class ModelStateValidationHandledByFilterAttribute : Attribute
{ }
}

View File

@@ -0,0 +1,30 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Threading.Tasks;
namespace BasicDotnetTemplate.MainProject.Core.Filters
{
public class ValidationActionFilter : IAsyncActionFilter
{
private readonly string _requestNotWellFormedMessage = "Request is not well formed";
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(new { message = _requestNotWellFormedMessage, errors = context.ModelState });
return;
}
var requestBody = context.ActionArguments.Values.FirstOrDefault(arg => arg != null && !arg.GetType().IsPrimitive && !(arg is string));
if (requestBody == null)
{
context.Result = new BadRequestObjectResult(new { message = _requestNotWellFormedMessage });
return;
}
await next();
}
}
}

View File

@@ -1,8 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace BasicDotnetTemplate.MainProject.Models.Api.Data.Role; namespace BasicDotnetTemplate.MainProject.Models.Api.Data.Role;
public class CreateRoleRequestData public class CreateRoleRequestData
{ {
public string Name { get; set; } = String.Empty; [Required(ErrorMessage = "Name is required")]
public required string Name { get; set; }
public required bool IsNotEditable { get; set; } public required bool IsNotEditable { get; set; }
} }

View File

@@ -1,9 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace BasicDotnetTemplate.MainProject.Models.Api.Data.User; namespace BasicDotnetTemplate.MainProject.Models.Api.Data.User;
public class CreateUserRequestData : UpdateUserRequestData public class CreateUserRequestData : UpdateUserRequestData
{ {
public string Email { get; set; } = String.Empty; [Required(ErrorMessage = "Email is required")]
public string Password { get; set; } = String.Empty; [StringLength(200, ErrorMessage = "Email's maxLength: 200")]
public required string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
public required string Password { get; set; }
public string? RoleGuid { get; set; } public string? RoleGuid { get; set; }
} }

View File

@@ -1,9 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace BasicDotnetTemplate.MainProject.Models.Api.Data.User; namespace BasicDotnetTemplate.MainProject.Models.Api.Data.User;
public class UpdateUserRequestData public class UpdateUserRequestData
{ {
public string FirstName { get; set; } = String.Empty; [Required(ErrorMessage = "FirstName is required")]
public string LastName { get; set; } = String.Empty; [StringLength(200, ErrorMessage = "FirstName's maxLength: 200")]
public required string FirstName { get; set; }
[Required(ErrorMessage = "LastName is required")]
[StringLength(200, ErrorMessage = "LastName's maxLength: 200")]
public required string LastName { get; set; }
} }

View File

@@ -8,7 +8,7 @@ using BasicDotnetTemplate.MainProject.Models.Settings;
using BasicDotnetTemplate.MainProject.Services; using BasicDotnetTemplate.MainProject.Services;
using BasicDotnetTemplate.MainProject.Models.Api.Data.Role; using BasicDotnetTemplate.MainProject.Models.Api.Data.Role;
using BasicDotnetTemplate.MainProject.Models.Database.SqlServer; using BasicDotnetTemplate.MainProject.Models.Database.SqlServer;
using BasicDotnetTemplate.MainProject.Core.Filters;
namespace BasicDotnetTemplate.MainProject.Utils; namespace BasicDotnetTemplate.MainProject.Utils;
@@ -140,7 +140,10 @@ public static class ProgramUtils
builder.Services.AddAuthentication(); builder.Services.AddAuthentication();
builder.Services.AddAuthorization(); builder.Services.AddAuthorization();
builder.Services.AddControllers(); builder.Services.AddControllers(options =>
{
options.Filters.Add<ValidationActionFilter>();
});
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
Logger.Info("[ProgramUtils][AddServices] Done services"); Logger.Info("[ProgramUtils][AddServices] Done services");