diff --git a/API_SQLuedo/API/API.csproj b/API_SQLuedo/API/API.csproj
index effc567..6cce789 100644
--- a/API_SQLuedo/API/API.csproj
+++ b/API_SQLuedo/API/API.csproj
@@ -21,6 +21,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/API_SQLuedo/API/Controllers/QueryController.cs b/API_SQLuedo/API/Controllers/QueryController.cs
new file mode 100644
index 0000000..e0fdb81
--- /dev/null
+++ b/API_SQLuedo/API/Controllers/QueryController.cs
@@ -0,0 +1,65 @@
+using Dto;
+using Asp.Versioning;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Shared;
+using Model.OrderCriteria;
+
+namespace API.Controllers
+{
+ [Route("api/v{version:apiVersion}/[controller]")]
+ [Authorize]
+ [ApiVersion("1.0")]
+ [ApiController]
+ public class QueryController(ILogger logger, IQueryService queryService) : ControllerBase
+ {
+ [HttpPost("{database}/execute")]
+ [ProducesResponseType(typeof(QueryDto), 200)]
+ [ProducesResponseType(typeof(string), 204)]
+ public IActionResult ExecuteQuery([FromBody]string query, string database)
+ {
+ var queryResult = queryService.ExecuteQuery(query, database);
+ if (queryResult == null)
+ {
+ logger.LogError("[ERREUR] La requête n'a rien renvoyé.");
+ return StatusCode(204);
+ }
+
+ logger.LogInformation("[INFORMATION] La requête a renvoyé : {result} ", queryResult);
+ return Ok(queryResult);
+ }
+
+ [HttpGet("{database}/Tables")]
+ [ProducesResponseType(typeof(QueryDto), 200)]
+ [ProducesResponseType(typeof(string), 204)]
+ public IActionResult GetTables(string database)
+ {
+ var queryResult = queryService.GetTables(database);
+ if (queryResult == null)
+ {
+ logger.LogError("[ERREUR] La requête n'a rien renvoyé.");
+ return StatusCode(204);
+ }
+
+ logger.LogInformation("[INFORMATION] La requête a renvoyé : {result} ", queryResult);
+ return Ok(queryResult);
+ }
+
+
+ [HttpGet("{database}/{table}/Columns")]
+ [ProducesResponseType(typeof(QueryDto), 200)]
+ [ProducesResponseType(typeof(string), 204)]
+ public IActionResult GetColumns(string database,string table)
+ {
+ var queryResult = queryService.GetColumns(database,table);
+ if (queryResult == null)
+ {
+ logger.LogError("[ERREUR] La requête n'a rien renvoyé.");
+ return StatusCode(204);
+ }
+
+ logger.LogInformation("[INFORMATION] La requête a renvoyé : {result} ", queryResult);
+ return Ok(queryResult);
+ }
+ }
+}
diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs
index eb7ff8d..cc8ea46 100644
--- a/API_SQLuedo/API/Program.cs
+++ b/API_SQLuedo/API/Program.cs
@@ -19,6 +19,8 @@ builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
+builder.Services.AddScoped, QueryDataServiceApi>();
+
builder.Services.AddScoped, UserDataService>();
builder.Services.AddScoped, UserDataServiceApi>();
@@ -102,6 +104,13 @@ builder.Services.AddCors(options =>
});
});
+var configuration = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
+ .Build();
+
+builder.Services.AddSingleton(configuration);
+
var app = builder.Build();
diff --git a/API_SQLuedo/API/Service/QueryDataServiceApi.cs b/API_SQLuedo/API/Service/QueryDataServiceApi.cs
new file mode 100644
index 0000000..f4bff6d
--- /dev/null
+++ b/API_SQLuedo/API/Service/QueryDataServiceApi.cs
@@ -0,0 +1,177 @@
+using Dto;
+using Entities;
+using Model.OrderCriteria;
+using Npgsql;
+using Shared;
+using Shared.Mapper;
+using Microsoft.Extensions.Configuration;
+using System.Text;
+using Newtonsoft.Json;
+using Microsoft.EntityFrameworkCore.Metadata.Internal;
+
+namespace API.Service;
+
+public class QueryDataServiceApi : IQueryService{
+ private readonly IConfiguration _configuration;
+
+ public QueryDataServiceApi(IConfiguration configuration)
+ {
+ _configuration = configuration;
+ }
+ public QueryDto ExecuteQuery(string query, string database)
+ {
+ string connectionString = _configuration.GetConnectionString("DefaultConnection");
+ connectionString = connectionString.Replace("{database}", database);
+
+ if (string.IsNullOrEmpty(database))
+ {
+ return new QueryDto { Result = "Le nom de la base de données est requis." };
+ }
+
+ try
+ {
+ using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
+ {
+ connection.Open();
+ using (NpgsqlCommand command = new NpgsqlCommand(query, connection))
+ {
+ using (NpgsqlDataReader reader = command.ExecuteReader())
+ {
+ List> resultList = new List>();
+
+
+ List columnNames = new List();
+ for (int i = 0; i < reader.FieldCount; i++)
+ {
+ columnNames.Add(reader.GetName(i));
+ }
+
+ while (reader.Read())
+ {
+ Dictionary row = new Dictionary();
+ for (int i = 0; i < reader.FieldCount; i++)
+ {
+ row[columnNames[i]] = reader[i].ToString();
+ }
+
+ resultList.Add(row);
+ }
+
+ string resultJson = JsonConvert.SerializeObject(resultList);
+
+ QueryDto queryDto = new QueryDto { Result = resultJson };
+ return queryDto;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return new QueryDto { Result = ex.Message };
+ }
+ }
+
+ public QueryDto GetTables(string database)
+ {
+ string connectionString = _configuration.GetConnectionString("DefaultConnection");
+ connectionString = connectionString.Replace("{database}", database);
+
+ try
+ {
+ using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
+ {
+ connection.Open();
+ using (NpgsqlCommand command = new NpgsqlCommand())
+ {
+ command.Connection = connection;
+ // Donner et exclure les bonnes permissions au rôle en question
+
+ // GRANT SELECT ON TABLE information_schema.tables TO votre_utilisateur;
+
+ // GRANT SELECT ON TABLE information_schema.columns TO votre_utilisateur;
+
+ // REVOKE ALL ON SCHEMA information_schema FROM PUBLIC;
+
+ command.CommandText =
+ "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';";
+
+ using (NpgsqlDataReader reader = command.ExecuteReader())
+ {
+ List tableNames = new List();
+
+ while (reader.Read())
+ {
+ tableNames.Add(reader["table_name"].ToString());
+ }
+
+ Dictionary tablesDict = new Dictionary();
+ foreach (string tableName in tableNames)
+ {
+ tablesDict[tableName] = tableName;
+ }
+
+ string tablesJson = JsonConvert.SerializeObject(tablesDict);
+
+ QueryDto queryDto = new QueryDto { Result = tablesJson };
+ return queryDto;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return new QueryDto { Result = ex.Message };
+ }
+ }
+
+ public QueryDto GetColumns(string database, string table)
+ {
+ string connectionString = _configuration.GetConnectionString("DefaultConnection");
+ connectionString = connectionString.Replace("{database}", database);
+
+ using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
+ {
+ connection.Open();
+ using (NpgsqlCommand command = new NpgsqlCommand())
+ {
+ command.Connection = connection;
+ // Donner et exclure les bonnes permissions au rôle en question
+
+ //GRANT SELECT ON TABLE information_schema.tables TO votre_utilisateur;
+
+ //GRANT SELECT ON TABLE information_schema.columns TO votre_utilisateur;
+
+ //REVOKE ALL ON SCHEMA information_schema FROM PUBLIC;
+
+ command.CommandText =
+ $"SELECT column_name FROM information_schema.columns WHERE table_name = '{table}';";
+
+ Console.WriteLine(command.CommandText);
+
+ using (NpgsqlDataReader reader = command.ExecuteReader())
+ {
+ List columnsNames = new List();
+
+ while (reader.Read())
+ {
+ columnsNames.Add(reader["column_name"].ToString());
+ }
+
+ Dictionary columnsDict = new Dictionary();
+ foreach (string colName in columnsNames)
+ {
+ columnsDict[colName] = colName;
+ }
+
+ string tablesJson = JsonConvert.SerializeObject(columnsDict);
+
+ Console.WriteLine(tablesJson);
+
+ QueryDto queryDto = new QueryDto { Result = tablesJson };
+ return queryDto;
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/appsettings.json b/API_SQLuedo/API/appsettings.json
index 10f68b8..639275d 100644
--- a/API_SQLuedo/API/appsettings.json
+++ b/API_SQLuedo/API/appsettings.json
@@ -5,5 +5,8 @@
"Microsoft.AspNetCore": "Warning"
}
},
- "AllowedHosts": "*"
+ "AllowedHosts": "*",
+ "ConnectionStrings": {
+ "DefaultConnection": "Host=localhost;Username=admin;Password=motdepasse;Database={database}"
+ }
}
diff --git a/API_SQLuedo/Dto/QueryDTO.cs b/API_SQLuedo/Dto/QueryDTO.cs
new file mode 100644
index 0000000..ec3c0b9
--- /dev/null
+++ b/API_SQLuedo/Dto/QueryDTO.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Dto
+{
+ public class QueryDto
+ {
+ public string Result { get; set; }
+ }
+}
diff --git a/API_SQLuedo/Shared/IQueryService.cs b/API_SQLuedo/Shared/IQueryService.cs
new file mode 100644
index 0000000..d09ec6e
--- /dev/null
+++ b/API_SQLuedo/Shared/IQueryService.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Mvc;
+using Model.OrderCriteria;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Dto;
+
+namespace Shared
+{
+ public interface IQueryService
+ {
+ public TQuery ExecuteQuery(string query, string database);
+ public QueryDto GetTables(string database);
+ public QueryDto GetColumns(string database,string table);
+ }
+}
diff --git a/API_SQLuedo/Shared/Mapper/LessonMapper.cs b/API_SQLuedo/Shared/Mapper/LessonMapper.cs
index 157338e..bd69152 100644
--- a/API_SQLuedo/Shared/Mapper/LessonMapper.cs
+++ b/API_SQLuedo/Shared/Mapper/LessonMapper.cs
@@ -16,10 +16,6 @@ public static class LessonMapper
return new LessonDto(model.Id, model.Title, model.LastPublisher, model.LastEdit, model.Content.Select(c => c.FromEntityToDto()).ToList());
}
- public static LessonDto FromEntityToDtoPost(this LessonEntity model)
- {
- return new LessonDto(model.Id, model.Title, model.LastPublisher, model.LastEdit);
- }
public static LessonEntity FromModelToEntity(this Lesson model)
{
diff --git a/API_SQLuedo/TestAPI/BlackListUnitTest.cs b/API_SQLuedo/TestAPI/BlackListUnitTest.cs
index aea91ad..a40f3f9 100644
--- a/API_SQLuedo/TestAPI/BlackListUnitTest.cs
+++ b/API_SQLuedo/TestAPI/BlackListUnitTest.cs
@@ -153,7 +153,24 @@ public class BlackListUnitTest
Assert.True(GetBlackList().SequenceEqual(valeur as IEnumerable, new BlackListDtoEqualityComparer()));
}
}
-
+
+ [Fact]
+ public void Get_0_BannedUsers_OrderedByNone()
+ {
+ _blackListService.Setup(x => x.GetBannedUsers(1, 10, BlackListOdrerCriteria.None))
+ .Returns(new List());
+ var blackListController = new BlackListController(new NullLogger(), _blackListService.Object);
+
+ var result = blackListController.GetBannedUsers(1, 10, BlackListOdrerCriteria.None);
+ Assert.Equal(typeof(StatusCodeResult), result.GetType());
+ if (result is NotFoundObjectResult notFoundObjectResult)
+ {
+ var valeur = notFoundObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ }
+ }
+
[Fact]
public void GetNbBannedUsers()
{
diff --git a/API_SQLuedo/TestAPI/LessonUnitTest.cs b/API_SQLuedo/TestAPI/LessonUnitTest.cs
index 186dc09..152b868 100644
--- a/API_SQLuedo/TestAPI/LessonUnitTest.cs
+++ b/API_SQLuedo/TestAPI/LessonUnitTest.cs
@@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Shared;
using TestAPI.Extensions;
+using Xunit.Sdk;
namespace TestAPI;
@@ -101,6 +102,22 @@ public class LessonUnitTest
}
}
+ [Fact]
+ public void GetLessonIdFail_Argument_Exception()
+ {
+ _lessonService.Setup(x => x.GetLessonById(10000))
+ .Throws();
+ var lessonsController = new LessonsController(_lessonService.Object, new NullLogger());
+
+ var result = lessonsController.GetLessonById(10000);
+
+ if (result is NotFoundObjectResult nfObjectResult)
+ {
+ Assert.NotNull(nfObjectResult);
+ }
+ }
+
+
[Fact]
public void GetLessonTitleSuccess()
{
@@ -145,6 +162,21 @@ public class LessonUnitTest
}
}
+ [Fact]
+ public void GetLessonTitleFail_Argument_Exception()
+ {
+ _lessonService.Setup(x => x.GetLessonByTitle("title"))
+ .Throws();
+ var lessonsController = new LessonsController(_lessonService.Object, new NullLogger());
+
+ var result = lessonsController.GetLessonByTitle("title");
+
+ if (result is NotFoundObjectResult nfObjectResult)
+ {
+ Assert.NotNull(nfObjectResult);
+ }
+ }
+
[Fact]
public void DeleteLessonSuccess()
{
@@ -213,6 +245,21 @@ public class LessonUnitTest
}
}
+ [Fact]
+ public void CreateLessonFail_Argument_Exception()
+ {
+ _lessonService.Setup(x => x.CreateLesson(35672653, "duehduheudheu nouveau titre", "Le deudhe éditeur", new DateOnly(2024, 03, 16)))
+ .Throws();
+ var lessonsController = new LessonsController(_lessonService.Object, new NullLogger());
+
+ var result = lessonsController.CreateLesson(new LessonDto(35672653, "duehduheudheu nouveau titre", "Le deudhe éditeur", new DateOnly(2024, 03, 16)));
+
+ if (result is NotFoundObjectResult nfObjectResult)
+ {
+ Assert.NotNull(nfObjectResult);
+ }
+ }
+
[Fact]
public void UpdateLessonSuccess()
{
diff --git a/API_SQLuedo/TestAPI/QueryUnitTest.cs b/API_SQLuedo/TestAPI/QueryUnitTest.cs
new file mode 100644
index 0000000..94f4b03
--- /dev/null
+++ b/API_SQLuedo/TestAPI/QueryUnitTest.cs
@@ -0,0 +1,206 @@
+using API.Controllers;
+using Castle.Components.DictionaryAdapter.Xml;
+using Dto;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Shared;
+using TestAPI.Extensions;
+
+namespace TestAPI;
+
+public class QueryUnitTest
+{
+ private readonly Mock> _queryService;
+
+ public QueryUnitTest()
+ {
+ _queryService = new Mock>();
+ }
+
+ [Fact]
+ public void Select_Users_Success()
+ {
+ var userList = GetUsersData();
+ _queryService.Setup(x => x.ExecuteQuery("Select * from \"User\";","SQLuedo"))
+ .Returns(new QueryDto{Result = userList.ToString()});
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.ExecuteQuery("Select * from \"User\";", "SQLuedo");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+ [Fact]
+ public void Select_Users_Failed_Cause_Database_Doesnt_Exists()
+ {
+ var userList = GetUsersData();
+ _queryService.Setup(x => x.ExecuteQuery("Select * from \"User\";", "SQLuedo"))
+ .Returns(new QueryDto { Result = userList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.ExecuteQuery("Select * from \"User\";", "LABASEDEDONNEES");
+
+ if (queryResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
+
+ {
+ Assert.IsNotType(queryResult);
+ }
+ }
+
+ [Fact]
+ public void Get_Tables_Success()
+ {
+ var tablesList = GetTables();
+ _queryService.Setup(x => x.GetTables("SQLuedo"))
+ .Returns(new QueryDto { Result = tablesList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.GetTables("SQLuedo");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+ [Fact]
+ public void Get_Tables_Failed_Cause_Database_Doesnt_Exist()
+ {
+ var tablesList = GetTables();
+ _queryService.Setup(x => x.GetTables("SQLuedo"))
+ .Returns(new QueryDto { Result = tablesList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.GetTables("LABSEEEEEEEEEEEEEEEEEEEE");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+
+ [Fact]
+ public void Get_Columns_Success()
+ {
+ var tablesList = GetColumns();
+ _queryService.Setup(x => x.GetColumns("SQLuedo","User"))
+ .Returns(new QueryDto { Result = tablesList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.GetColumns("SQLuedo","User");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+ [Fact]
+ public void Get_Columns_Failed_Cause_Database_Doesnt_Exist()
+ {
+ var tablesList = GetColumns();
+ _queryService.Setup(x => x.GetColumns("SQLuedo", "User"))
+ .Returns(new QueryDto { Result = tablesList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.GetColumns("UDHUE", "User");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+ [Fact]
+ public void Get_Columns_Failed_Cause_Table_Doesnt_Exist()
+ {
+ var tablesList = GetColumns();
+ _queryService.Setup(x => x.GetColumns("SQLuedo", "User"))
+ .Returns(new QueryDto { Result = tablesList.ToString() });
+ var queryController = new QueryController(new NullLogger(), _queryService.Object);
+
+ var queryResult = queryController.GetColumns("SQLuedo", "GEGEIU");
+
+ if (queryResult is OkObjectResult okObjectResult)
+ {
+
+ Assert.NotNull(okObjectResult);
+ }
+ }
+
+
+ private List GetUsersData()
+ {
+ List usersData = new List(4)
+ {
+ new(
+ 0,
+ "Useruser",
+ "motdepasse",
+ "adressemail@gmail.com",
+ true
+ ),
+ new
+ (
+ 1,
+ "Leuser",
+ "motdepasse",
+ "deuxadresse@gmail.com",
+ false
+ ),
+ new
+ (
+ 2,
+ "gygyggyg",
+ "ennodlavehc",
+ "thirdadress@gmail.com",
+ false
+ ),
+ new
+ (
+ "ferferf",
+ "h_nh_78",
+ "fourthadress@gmail.com",
+ false
+ ),
+ };
+ return usersData;
+ }
+
+
+ private List GetColumns()
+ {
+ List columns = new List(4)
+ {
+ "Id",
+ "Name",
+ "Password",
+ "IsAdmin"
+ };
+ return columns;
+ }
+
+
+
+ private List GetTables()
+ {
+ List columns = new List(4)
+ {
+ "User",
+ "Solution",
+ "Inquiry",
+ "Success"
+ };
+ return columns;
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
index f8dc28c..153469b 100644
--- a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
+++ b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
@@ -145,6 +145,23 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void GetSuccessInquiryIdFail_Argument_Exception()
+ {
+ _successService.Setup(x => x.GetSuccessesByInquiryId(1000))
+ .Throws();
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var sucessesResult = successesController.GetSuccessByInquiryId(1000);
+ if (sucessesResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ }
+ }
+
[Fact]
public void GetSuccessUserIdSuccess()
{
@@ -217,6 +234,23 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void GetSuccessUserIdFail_Argument_Exception()
+ {
+ _successService.Setup(x => x.GetSuccessesByUserId(1000))
+ .Throws();
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var sucessesResult = successesController.GetSuccessByUserId(1000);
+ if (sucessesResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ }
+ }
+
[Fact]
public void DeleteSuccessSuccess()
{
@@ -318,6 +352,22 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void CreateSuccessFail_Exception()
+ {
+ _successService.Setup(x => x.CreateSuccess(89889, 82837, true))
+ .Throws();
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.CreateSuccess(new SuccessDto(89889, 82837, true));
+
+ if (successesResult is NotFoundObjectResult notFoundObjectResult)
+ {
+ Assert.NotNull(notFoundObjectResult);
+ }
+ }
+
[Fact]
public void UpdateSuccessSuccess()
{
@@ -386,6 +436,22 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void UpdateSuccessFail_Throw_Exception()
+ {
+ _successService.Setup(x => x.UpdateSuccess(108871, 117683, new SuccessDto(1, 2, true)))
+ .Throws();
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.UpdateSuccess(108871, 117683, new SuccessDto(1, 2, true));
+
+ if (successesResult is NotFoundObjectResult notFoundObjectResult)
+ {
+ Assert.NotNull(notFoundObjectResult);
+ }
+ }
+
private List GetSuccessesData()
diff --git a/API_SQLuedo/TestAPI/TestAPI.csproj b/API_SQLuedo/TestAPI/TestAPI.csproj
index a6cc9e9..10a3887 100644
--- a/API_SQLuedo/TestAPI/TestAPI.csproj
+++ b/API_SQLuedo/TestAPI/TestAPI.csproj
@@ -11,6 +11,7 @@
+
all
diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs
index c09dcc4..561b680 100644
--- a/API_SQLuedo/TestAPI/UserUnitTest.cs
+++ b/API_SQLuedo/TestAPI/UserUnitTest.cs
@@ -171,7 +171,7 @@ public class UserUnitTest
[Fact]
- public void GetUserIdFail__Argument_Exception_Negative_Id()
+ public void GetUserIdFail_Negative_Id()
{
var userList = GetUsersData();
_userService.Setup(x => x.GetUserById(1))
@@ -189,6 +189,22 @@ public class UserUnitTest
}
}
+ [Fact]
+ public void GetUserIdFail_Argument_Exception()
+ {
+ _userService.Setup(x => x.GetUserById(10000))
+ .Throws();
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.GetUserById(10000);
+ if (userResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ }
+ }
+
[Fact]
public void GetUserUsernameSuccess()
{
@@ -212,6 +228,22 @@ public class UserUnitTest
}
}
+ [Fact]
+ public void GetUserUsernameFail_Argument_Exception()
+ {
+ _userService.Setup(x => x.GetUserByUsername("Usererererrere"))
+ .Throws();
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.GetUserByUsername("Usererererrere");
+ if (userResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ }
+ }
+
[Fact]
public void GetUserEmailSuccess()
{
@@ -308,6 +340,34 @@ public class UserUnitTest
}
}
+ [Fact]
+ public void DeleteUser_By_Username_Success()
+ {
+ _userService.Setup(x => x.DeleteUserByUsername("Damn"))
+ .Returns(true);
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.DeleteUserByUsername("Damn");
+ if (userResult is OkObjectResult okObjectResult)
+ {
+ Assert.Null(okObjectResult.Value);
+ }
+ }
+
+ [Fact]
+ public void DeleteUser_By_Username_Failed()
+ {
+ _userService.Setup(x => x.DeleteUserByUsername("IUDHEIUHDEHUDH"))
+ .Returns(false);
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.DeleteUserByUsername("IUDHEIUHDEHUDH");
+ if (userResult is NotFoundObjectResult notFoundObjectResult)
+ {
+ Assert.Null(notFoundObjectResult.Value);
+ }
+ }
+
[Fact]
public void CreateUserSuccess()
{
diff --git a/API_SQLuedo/TestEF/Mapper/InquiryMapperUnitTest.cs b/API_SQLuedo/TestEF/Mapper/InquiryMapperUnitTest.cs
index aa69fd7..b7faad8 100644
--- a/API_SQLuedo/TestEF/Mapper/InquiryMapperUnitTest.cs
+++ b/API_SQLuedo/TestEF/Mapper/InquiryMapperUnitTest.cs
@@ -78,10 +78,10 @@ namespace TestEF.Mapper
public void TestDtoToModel()
{
InquiryDto inquiry = new InquiryDto(_id, _title, _description, _isUser);
- var inquiryMod = inquiry.FromDtoToEntity();
+ var inquiryMod = inquiry.FromDtoToModel();
Assert.NotNull(inquiryMod);
- Assert.IsType(inquiryMod);
+ Assert.IsType(inquiryMod);
Assert.Equal(1, inquiryMod.Id);
Assert.Equal(_title, inquiryMod.Title);
Assert.Equal(_description, inquiryMod.Description);
diff --git a/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs b/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs
index b1a7f0c..08a8329 100644
--- a/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs
+++ b/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs
@@ -109,7 +109,7 @@ public class TestBlackListDataService
}
[Fact]
- public void GetBannedUser_Success_Positive_Value()
+ public void GetBannedUser_Success_Positive_Value_Ordered_None()
{
_dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
_dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
@@ -119,6 +119,42 @@ public class TestBlackListDataService
Assert.Equal(3, banResult.Count());
}
+ [Fact]
+ public void GetBannedUser_Success_Positive_Value_Ordered_Email()
+ {
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.SaveChanges();
+ var banResult = _blackListDataService.GetBannedUsers(1, 3, BlackListOdrerCriteria.ByEmail);
+ Assert.Equal(3, banResult.Count());
+ }
+
+
+ [Fact]
+ public void GetBannedUser_Success_Positive_Value_Ordered_ExpirationDate()
+ {
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.SaveChanges();
+ var banResult = _blackListDataService.GetBannedUsers(1, 3, BlackListOdrerCriteria.ByExpirationDate);
+ Assert.Equal(3, banResult.Count());
+ }
+
+ [Fact]
+ public void GetBannedUser_Success_Positive_Value_Ordered_Default()
+ {
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "email@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.SaveChanges();
+ var banResult = _blackListDataService.GetBannedUsers(1, 3,default);
+ Assert.Equal(3, banResult.Count());
+ }
+
+
+
[Fact]
public void GetBannedUser_Success_Negative_Value()
{
diff --git a/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs b/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
index bb9e322..2a64386 100644
--- a/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
+++ b/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
@@ -89,6 +89,45 @@ public class TestInquiryDataService
Assert.Equal(2, result.Count());
}
+ [Fact]
+ public void GetInquiries_OrderedById_ReturnsCorrectNumberOfInquiries()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 1, Title = "Test1", Description = "Desc1", IsUser = true });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 2, Title = "Test2", Description = "Desc2", IsUser = false });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 3, Title = "Test3", Description = "Desc3", IsUser = true });
+ _dbContext.SaveChanges();
+
+ var result = _inquiryDataService.GetInquiries(1, 2, InquiryOrderCriteria.ById);
+
+ Assert.Equal(2, result.Count());
+ }
+
+ [Fact]
+ public void GetInquiries_OrderedByDefault_ReturnsCorrectNumberOfInquiries()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 1, Title = "Test1", Description = "Desc1", IsUser = true });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 2, Title = "Test2", Description = "Desc2", IsUser = false });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 3, Title = "Test3", Description = "Desc3", IsUser = true });
+ _dbContext.SaveChanges();
+
+ var result = _inquiryDataService.GetInquiries(1, 2, default);
+
+ Assert.Equal(2, result.Count());
+ }
+
+ [Fact]
+ public void GetInquiries_OrderedDefault_ReturnsCorrectNumberOfInquiries()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 1, Title = "Test1", Description = "Desc1", IsUser = true });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 2, Title = "Test2", Description = "Desc2", IsUser = false });
+ _dbContext.Inquiries.Add(new InquiryEntity { Id = 3, Title = "Test3", Description = "Desc3", IsUser = true });
+ _dbContext.SaveChanges();
+
+ var result = _inquiryDataService.GetInquiries(1, 2, default);
+
+ Assert.Equal(2, result.Count());
+ }
+
[Fact]
public void GetInquiryById_ReturnsCorrectInquiry()
{