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/BlackListController.cs b/API_SQLuedo/API/Controllers/BlackListController.cs
index c9136e6..8cfe471 100644
--- a/API_SQLuedo/API/Controllers/BlackListController.cs
+++ b/API_SQLuedo/API/Controllers/BlackListController.cs
@@ -17,7 +17,7 @@ public class BlackListController(ILogger logger, IBlackListServ
[HttpGet("user/ban/{page:int}/{number:int}")]
[ProducesResponseType(typeof(IEnumerable), 200)]
[ProducesResponseType(typeof(string), 204)]
- public IActionResult GetUsers(int page, int number, BlackListOdrerCriteria orderCriteria)
+ public IActionResult GetBannedUsers(int page, int number, BlackListOdrerCriteria orderCriteria)
{
var users = blackListService.GetBannedUsers(page, number, orderCriteria).ToList();
if (users.Count == 0)
@@ -37,7 +37,7 @@ public class BlackListController(ILogger logger, IBlackListServ
{
var nb = blackListService.GetNumberOfBannedUsers();
logger.LogInformation("[INFORMATION] {nb} Email(s) banni(s) trouvé(s)", nb);
- return Ok(nb);
+ return Ok(new KeyValuePair("number",nb));
}
[HttpPost("user/ban")]
@@ -64,9 +64,8 @@ public class BlackListController(ILogger logger, IBlackListServ
var success = blackListService.BanUser(username);
if (success)
{
- logger.LogInformation("[INFORMATION] L'utilisateur avec le pseudo {username} a été banni pour 2 ans.",
- username);
- return Ok();
+ logger.LogInformation("[INFORMATION] L'utilisateur avec le pseudo {username} a été banni pour 2 ans.", username);
+ return Ok(new KeyValuePair("success", true));
}
else
{
@@ -84,7 +83,7 @@ public class BlackListController(ILogger logger, IBlackListServ
if (success)
{
logger.LogInformation("[INFORMATION] L'utilisateur avec l'email {email} a été débanni.", email);
- return Ok();
+ return Ok(new KeyValuePair("success", true));
}
else
{
diff --git a/API_SQLuedo/API/Controllers/InquiriesController.cs b/API_SQLuedo/API/Controllers/InquiriesController.cs
index 2829b56..713f5c4 100644
--- a/API_SQLuedo/API/Controllers/InquiriesController.cs
+++ b/API_SQLuedo/API/Controllers/InquiriesController.cs
@@ -136,4 +136,14 @@ public class InquiriesController : Controller
_logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id);
return NotFound();
}
+
+ [HttpGet("inquiries/number")]
+ [ProducesResponseType(typeof(InquiryDto), 200)]
+ [ProducesResponseType(typeof(string), 204)]
+ public IActionResult GetNumberOfInquiries()
+ {
+ var nbInquiry = _inquiryDataService.GetNumberOfInquiries();
+ _logger.LogInformation("[INFORMATION] {nb} Enquête(s) trouvée(s)", nbInquiry);
+ return Ok(new KeyValuePair("nbInquiries", nbInquiry));
+ }
}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Controllers/InquiryTableController.cs b/API_SQLuedo/API/Controllers/InquiryTableController.cs
new file mode 100644
index 0000000..a610342
--- /dev/null
+++ b/API_SQLuedo/API/Controllers/InquiryTableController.cs
@@ -0,0 +1,42 @@
+using Asp.Versioning;
+using Dto;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http.HttpResults;
+using Microsoft.AspNetCore.Mvc;
+using Shared;
+
+namespace API.Controllers;
+
+[Route("api/v{version:apiVersion}/[controller]")]
+[Authorize]
+[ApiVersion("1.0")]
+[ApiController]
+public class InquiryTableController : Controller
+{
+ private readonly IInquiryTableService _inquiryTableService;
+
+ private readonly ILogger _logger;
+
+ public InquiryTableController(IInquiryTableService inquiryTableService, ILogger logger)
+ {
+ _inquiryTableService = inquiryTableService;
+ _logger = logger;
+ }
+
+ [HttpGet("database/{id:int}")]
+ [ProducesResponseType(typeof(string), 200)]
+ [ProducesResponseType(typeof(string), 404)]
+ public IActionResult GetDatabaseNameByInquiryById(int id)
+ {
+ try
+ {
+ _logger.LogInformation("[INFORMATION] La base de données pour l'enquête avec l'id {id} a été trouvé.", id);
+ return Ok(new KeyValuePair("database", _inquiryTableService.GetDatabaseNameByInquiryId(id)));
+ }
+ catch (ArgumentException)
+ {
+ _logger.LogError("[ERREUR] Aucune base de données trouvée pour l'enquête avec l'id {id}.", id);
+ return NotFound();
+ }
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Controllers/LessonsController.cs b/API_SQLuedo/API/Controllers/LessonsController.cs
index 8d28149..2245a0b 100644
--- a/API_SQLuedo/API/Controllers/LessonsController.cs
+++ b/API_SQLuedo/API/Controllers/LessonsController.cs
@@ -101,9 +101,11 @@ public class LessonsController : Controller
{
return BadRequest();
}
+
try
{
- var createdLesson = _lessonDataService.CreateLesson(dto.Id, dto.Title, dto.LastPublisher, dto.LastEdit ?? DateOnly.FromDateTime(DateTime.Now));
+ var createdLesson = _lessonDataService.CreateLesson(dto.Id, dto.Title, dto.LastPublisher,
+ dto.LastEdit ?? DateOnly.FromDateTime(DateTime.Now));
if (createdLesson != null)
{
_logger.LogInformation(
@@ -141,6 +143,7 @@ public class LessonsController : Controller
id);
return BadRequest();
}
+
if (LessonDto != null)
{
_logger.LogInformation("[INFORMATION] La mise à jour de la leçon avec l'id {id} a été effectuée", id);
diff --git a/API_SQLuedo/API/Controllers/NotepadController.cs b/API_SQLuedo/API/Controllers/NotepadController.cs
new file mode 100644
index 0000000..e3f46bf
--- /dev/null
+++ b/API_SQLuedo/API/Controllers/NotepadController.cs
@@ -0,0 +1,97 @@
+using Asp.Versioning;
+using Dto;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Shared;
+
+namespace API.Controllers;
+
+[Route("api/v{version:apiVersion}/[controller]")]
+[Authorize]
+[ApiVersion("1.0")]
+[ApiController]
+public class NotepadController : Controller
+{
+ private readonly INotepadService _notepadDataService;
+
+ private readonly ILogger _logger;
+
+ public NotepadController(INotepadService notepadService, ILogger logger)
+ {
+ _notepadDataService = notepadService;
+ _logger = logger;
+ }
+
+ [HttpGet("notepad/{userId:int}/{inquiryId:int}")]
+ [ProducesResponseType(typeof(NotepadDto), 200)]
+ [ProducesResponseType(typeof(void), 404)]
+ public IActionResult GetNotepadByUserAndInquiryById(int userId, int inquiryId)
+ {
+ try
+ {
+ _logger.LogInformation(
+ "[INFORMATION] Le bloc-notes de l'utilisateur avec l'id {id} et l'enquête avec l'id {idInquiry} a été trouvé.",
+ userId, inquiryId);
+ return Ok(_notepadDataService.GetNotepadFromUserAndInquiryId(userId,inquiryId));
+ }
+ catch (ArgumentException)
+ {
+ _logger.LogError(
+ "[ERREUR] Aucun bloc-notes trouvé pour l'utilisateur avec l'id {id} et l'enquête avec l'id {inquiryId}.",
+ userId, inquiryId);
+ return NotFound();
+ }
+ }
+
+ [HttpPost("notepad")]
+ [ProducesResponseType(typeof(void), 200)]
+ [ProducesResponseType(typeof(void), 404)]
+ public IActionResult SetNotepadByUserAndInquiryById([FromBody] NotepadDto notepad)
+ {
+ try
+ {
+ if (notepad.InquiryId < 0 || notepad.UserId < 0 || notepad.Notes == null)
+ {
+ return BadRequest();
+ }
+ _notepadDataService.SetNotepadFromUserAndInquiryId(notepad.UserId, notepad.InquiryId, notepad.Notes);
+ _logger.LogInformation(
+ "[INFORMATION] Le bloc-notes de l'utilisateur avec l'id {id} et l'enquête avec l'id {idInquiry} a été créé.",
+ notepad.UserId, notepad.InquiryId);
+ return Ok();
+ }
+ catch (ArgumentException)
+ {
+ _logger.LogError(
+ "[ERREUR] Aucun bloc-notes n'a pu être créé pour l'utilisateur avec l'id {id} et l'enquête avec l'id {inquiryId}.",
+ notepad.UserId, notepad.InquiryId);
+ return NotFound();
+ }
+ }
+
+ [HttpPut("notepad")]
+ [ProducesResponseType(typeof(void), 203)]
+ [ProducesResponseType(typeof(void), 404)]
+ public IActionResult UpdateNotepadByUserAndInquiryById([FromBody] NotepadDto notepad)
+ {
+ try
+ {
+ if (notepad.InquiryId < 0 || notepad.UserId < 0 || notepad.Notes == null)
+ {
+ return BadRequest();
+ }
+ _notepadDataService.UpdateNotepadFromUserAndInquiryId(notepad.UserId, notepad.InquiryId, notepad.Notes);
+ _logger.LogInformation(
+ "[INFORMATION] Le bloc-notes de l'utilisateur avec l'id {id} et l'enquête avec l'id {idInquiry} a été mis à jour.",
+ notepad.UserId, notepad.InquiryId);
+ return Ok();
+ }
+ catch (ArgumentException)
+ {
+ _logger.LogError(
+ "[ERREUR] Aucun bloc-notes n'a pu être mis à jour pour l'utilisateur avec l'id {id} et l'enquête avec l'id {inquiryId}.",
+ notepad.UserId, notepad.InquiryId);
+ return NotFound();
+ }
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Controllers/ParagraphsController.cs b/API_SQLuedo/API/Controllers/ParagraphsController.cs
index a618e85..8391ff9 100644
--- a/API_SQLuedo/API/Controllers/ParagraphsController.cs
+++ b/API_SQLuedo/API/Controllers/ParagraphsController.cs
@@ -97,7 +97,8 @@ public class ParagraphsController : Controller
[ProducesResponseType(typeof(string), 400)]
public IActionResult CreateParagraph([FromBody] ParagraphDto dto)
{
- if (dto.ContentTitle == null || dto.ContentContent == null || dto.Title == null || dto.Content == null || dto.Info == null || dto.Query == null ||
+ if (dto.ContentTitle == null || dto.ContentContent == null || dto.Title == null || dto.Content == null ||
+ dto.Info == null || dto.Query == null ||
dto.Comment == null)
{
return BadRequest();
@@ -107,7 +108,8 @@ public class ParagraphsController : Controller
"[INFORMATION] Un paragraphe a été créé : title - {title}, content - {content}, info - {info}, query - {query}, comment - {comment}",
dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment);
return Created(nameof(GetParagraphs),
- _paragraphDataService.CreateParagraph(dto.ContentTitle, dto.ContentContent,dto.Title, dto.Content, dto.Info, dto.Query, dto.Comment,
+ _paragraphDataService.CreateParagraph(dto.ContentTitle, dto.ContentContent, dto.Title, dto.Content,
+ dto.Info, dto.Query, dto.Comment,
dto.LessonId));
}
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/Controllers/SolutionController.cs b/API_SQLuedo/API/Controllers/SolutionController.cs
new file mode 100644
index 0000000..f0ccf35
--- /dev/null
+++ b/API_SQLuedo/API/Controllers/SolutionController.cs
@@ -0,0 +1,43 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Dto;
+using Model.OrderCriteria;
+using Shared;
+using Asp.Versioning;
+
+namespace API.Controllers
+{
+ [Route("api/v{version:apiVersion}/[controller]")]
+ [Authorize]
+ [ApiVersion("1.0")]
+ [ApiController]
+ public class SolutionController : Controller
+ {
+ private readonly ISolutionService _solutionDataService;
+
+ private readonly ILogger _logger;
+
+ public SolutionController(ISolutionService solutionDataService, ILogger logger)
+ {
+ _solutionDataService = solutionDataService;
+ _logger = logger;
+ }
+
+ [HttpGet("solution/{id:int}")]
+ [ProducesResponseType(typeof(SolutionDto), 200)]
+ [ProducesResponseType(typeof(string), 404)]
+ public IActionResult GetSolutionByInquiryById(int id)
+ {
+ try
+ {
+ _logger.LogInformation("[INFORMATION] L'enquête avec l'id {id} a été trouvé.", id);
+ return Ok(_solutionDataService.GetSolutionByInquiryId(id));
+ }
+ catch (ArgumentException)
+ {
+ _logger.LogError("[ERREUR] Aucune enquête trouvée avec l'id {id}.", id);
+ return NotFound();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs
index 3dfad39..bd44b9e 100644
--- a/API_SQLuedo/API/Controllers/UserController.cs
+++ b/API_SQLuedo/API/Controllers/UserController.cs
@@ -8,6 +8,7 @@ using Model.OrderCriteria;
namespace API.Controllers;
[Route("api/v{version:apiVersion}/[controller]")]
+[Authorize]
[ApiVersion("1.0")]
[ApiController]
public class UsersController(ILogger logger, IUserService userService) : ControllerBase
@@ -27,7 +28,7 @@ public class UsersController(ILogger logger, IUserService logger, IUserService logger, IUserService("nbUsers", users));
+ return Ok(new KeyValuePair("nbUsers", users));
}
[HttpGet("user/{id:int}")]
@@ -93,6 +94,7 @@ public class UsersController(ILogger logger, IUserService logger, IUserService logger, IUserService logger, IUserService logger, IUserService logger, IUserService logger, IUserService, QueryDataServiceApi>();
+
builder.Services.AddScoped, UserDataService>();
builder.Services.AddScoped, UserDataServiceApi>();
@@ -28,6 +30,12 @@ builder.Services.AddScoped, BlackListDataService
builder.Services.AddScoped, InquiryDataService>();
builder.Services.AddScoped, InquiryDataServiceApi>();
+builder.Services.AddScoped, SolutionDataService>();
+builder.Services.AddScoped, SolutionDataServiceAPI>();
+
+builder.Services.AddScoped, InquiryTableDataService>();
+builder.Services.AddScoped, InquiryTableDataServiceAPI>();
+
builder.Services.AddScoped, ParagraphDataService>();
builder.Services.AddScoped, ParagraphDataServiceApi>();
@@ -37,7 +45,10 @@ builder.Services.AddScoped, SuccessDataServiceApi>()
builder.Services.AddScoped, LessonDataService>();
builder.Services.AddScoped, LessonDataServiceApi>();
-builder.Services.AddDbContext(options =>
+builder.Services.AddScoped, NotepadDataService>();
+builder.Services.AddScoped, NotepadDataServiceAPI>();
+
+builder.Services.AddDbContext(options =>
{
if (builder.Environment.IsProduction())
{
@@ -103,9 +114,29 @@ builder.Services.AddSwaggerGen(option =>
}
});
});
+builder.Services.AddCors(options =>
+{
+ options.AddPolicy("AllowSpecificOrigin",
+ builder =>
+ {
+ builder.WithOrigins("https://localhost:7171")
+ .AllowAnyMethod()
+ .AllowAnyHeader();
+ });
+});
+
+var configuration = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
+ .Build();
+
+builder.Services.AddSingleton(configuration);
+
var app = builder.Build();
+app.UseCors("AllowSpecificOrigin");
+
// Création de l'utilisateur admin pour la base de données Identity
using (var scope = app.Services.CreateScope())
@@ -114,7 +145,7 @@ using (var scope = app.Services.CreateScope())
// Création base de données via les migrations
await using var dbContext = services.GetRequiredService();
await dbContext.Database.MigrateAsync();
-
+
var userManager = services.GetRequiredService>();
try
diff --git a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs
index 3e7d3a8..1244877 100644
--- a/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs
+++ b/API_SQLuedo/API/Service/InquiryDataServiceAPI.cs
@@ -29,6 +29,11 @@ public class InquiryDataServiceApi(IInquiryService inquiryService
return inquiries.Select(i => i.FromEntityToDto()).ToList();
}
+ public int GetNumberOfInquiries()
+ {
+ return inquiryService.GetNumberOfInquiries();
+ }
+
public InquiryDto GetInquiryById(int id) => inquiryService.GetInquiryById(id).FromEntityToDto();
public InquiryDto GetInquiryByTitle(string title) => inquiryService.GetInquiryByTitle(title).FromEntityToDto();
diff --git a/API_SQLuedo/API/Service/InquiryTableDataServiceAPI.cs b/API_SQLuedo/API/Service/InquiryTableDataServiceAPI.cs
new file mode 100644
index 0000000..71e11e5
--- /dev/null
+++ b/API_SQLuedo/API/Service/InquiryTableDataServiceAPI.cs
@@ -0,0 +1,13 @@
+using Dto;
+using Entities;
+using Shared;
+
+namespace API.Service;
+
+public class InquiryTableDataServiceAPI(IInquiryTableService inquiryTableService) : IInquiryTableService
+{
+ public string GetDatabaseNameByInquiryId(int id)
+ {
+ return inquiryTableService.GetDatabaseNameByInquiryId(id);
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs
index 17fd31b..de6173e 100644
--- a/API_SQLuedo/API/Service/LessonDataServiceAPI.cs
+++ b/API_SQLuedo/API/Service/LessonDataServiceAPI.cs
@@ -14,6 +14,11 @@ public class LessonDataServiceApi(ILessonService lessonService) :
return lessonsEntities.Select(e => e.FromEntityToDto()).ToList();
}
+ public int GetNumberOfLessons()
+ {
+ return lessonService.GetNumberOfLessons();
+ }
+
public LessonDto GetLessonById(int id) => lessonService.GetLessonById(id).FromEntityToDto();
public LessonDto GetLessonByTitle(string title) => lessonService.GetLessonByTitle(title).FromEntityToDto();
diff --git a/API_SQLuedo/API/Service/NotepadDataServiceAPI.cs b/API_SQLuedo/API/Service/NotepadDataServiceAPI.cs
new file mode 100644
index 0000000..263ee9e
--- /dev/null
+++ b/API_SQLuedo/API/Service/NotepadDataServiceAPI.cs
@@ -0,0 +1,24 @@
+using Dto;
+using Entities;
+using Shared;
+using Shared.Mapper;
+
+namespace API.Service;
+
+public class NotepadDataServiceAPI(INotepadService notepadService) : INotepadService
+{
+ public NotepadDto GetNotepadFromUserAndInquiryId(int userId, int inquiryId)
+ {
+ return notepadService.GetNotepadFromUserAndInquiryId(userId, inquiryId).FromEntityToDto();
+ }
+
+ public void SetNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes)
+ {
+ notepadService.SetNotepadFromUserAndInquiryId(userId,inquiryId,notes);
+ }
+
+ public void UpdateNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes)
+ {
+ notepadService.UpdateNotepadFromUserAndInquiryId(userId,inquiryId,notes);
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs b/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs
index 3b0cb16..39ceddf 100644
--- a/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs
+++ b/API_SQLuedo/API/Service/ParagraphDataServiceAPI.cs
@@ -15,6 +15,11 @@ public class ParagraphDataServiceApi(IParagraphService paragrap
return paragraphsEntities.Select(e => e.FromEntityToDto()).ToList();
}
+ public IEnumerable GetParagraphsByLessonId(int lessonId)
+ {
+ return paragraphService.GetParagraphsByLessonId(lessonId).Select(p => p.FromEntityToDto());
+ }
+
public ParagraphDto GetParagraphById(int id) => paragraphService.GetParagraphById(id).FromEntityToDto();
public ParagraphDto GetParagraphByTitle(string title) =>
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/Service/SolutionDataServiceAPI.cs b/API_SQLuedo/API/Service/SolutionDataServiceAPI.cs
new file mode 100644
index 0000000..f5d615d
--- /dev/null
+++ b/API_SQLuedo/API/Service/SolutionDataServiceAPI.cs
@@ -0,0 +1,14 @@
+using Dto;
+using Entities;
+using Shared;
+using Shared.Mapper;
+
+namespace API.Service;
+
+public class SolutionDataServiceAPI(ISolutionService solutionService) : ISolutionService
+{
+ public SolutionDto GetSolutionByInquiryId(int id)
+ {
+ return solutionService.GetSolutionByInquiryId(id).FromEntityToDto();
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/API/Service/UserDataServiceAPI.cs b/API_SQLuedo/API/Service/UserDataServiceAPI.cs
index 273e5f0..c8d2934 100644
--- a/API_SQLuedo/API/Service/UserDataServiceAPI.cs
+++ b/API_SQLuedo/API/Service/UserDataServiceAPI.cs
@@ -38,4 +38,11 @@ public class UserDataServiceApi(IUserService userService) : IUserSer
public UserDto CreateUser(string username, string password, string email, bool isAdmin) =>
userService.CreateUser(username, password, email, isAdmin).FromEntityToDto();
+
+ public bool IsEmailTaken(string email) => userService.IsEmailTaken(email);
+
+ public bool IsUsernameTaken(string username) => userService.IsUsernameTaken(username);
+
+ public UserDto PromoteUser(int id) =>
+ userService.PromoteUser(id).FromEntityToDto();
}
\ 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/DbDataManager/Service/InquiryDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs
index 0d69699..255bf45 100644
--- a/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs
+++ b/API_SQLuedo/DbDataManager/Service/InquiryDataService.cs
@@ -26,7 +26,7 @@ public class InquiryDataService : IInquiryService
{
number = 10;
}
- IQueryable query = DbContext.Inquiries.Skip((page - 1) * number).Take(number);
+ IQueryable query = DbContext.Inquiries;
switch (orderCriteria)
{
case InquiryOrderCriteria.None:
@@ -40,14 +40,23 @@ public class InquiryDataService : IInquiryService
case InquiryOrderCriteria.ByIsUser:
query = query.OrderBy(s => s.IsUser);
break;
+ case InquiryOrderCriteria.ById:
+ query = query.OrderBy(s => s.Id);
+ break;
default:
break;
}
+ query = query.Skip((page - 1) * number).Take(number);
var inquiries = query.ToList();
return inquiries;
}
+ public int GetNumberOfInquiries()
+ {
+ return DbContext.Inquiries.Count();
+ }
+
public InquiryEntity GetInquiryById(int id)
{
var inquiryEntity = DbContext.Inquiries.FirstOrDefault(i => i.Id == id);
@@ -92,7 +101,7 @@ public class InquiryDataService : IInquiryService
}
DbContext.Inquiries.Remove(inquiryEntity);
- DbContext.SaveChangesAsync();
+ DbContext.SaveChanges();
return true;
}
diff --git a/API_SQLuedo/DbDataManager/Service/InquiryTableDataService.cs b/API_SQLuedo/DbDataManager/Service/InquiryTableDataService.cs
new file mode 100644
index 0000000..9b968d9
--- /dev/null
+++ b/API_SQLuedo/DbDataManager/Service/InquiryTableDataService.cs
@@ -0,0 +1,27 @@
+using DbContextLib;
+using Entities;
+using Shared;
+
+namespace DbDataManager.Service;
+
+public class InquiryTableDataService : IInquiryTableService
+{
+ private UserDbContext DbContext { get; set; }
+
+ public InquiryTableDataService(UserDbContext context)
+ {
+ DbContext = context;
+ context.Database.EnsureCreated();
+ }
+
+ public string GetDatabaseNameByInquiryId(int id)
+ {
+ var inquiryTable = DbContext.InquiryTables.FirstOrDefault(i => i.OwnerId == id);
+ if (inquiryTable == null)
+ {
+ throw new ArgumentException($"Erreur, impossible de trouver l'objet InquiryTable pour l'enquête d'id {id}",
+ nameof(id));
+ }
+ return inquiryTable.DatabaseName;
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs
index aa67a64..dc2eb5e 100644
--- a/API_SQLuedo/DbDataManager/Service/LessonDataService.cs
+++ b/API_SQLuedo/DbDataManager/Service/LessonDataService.cs
@@ -29,7 +29,7 @@ public class LessonDataService : ILessonService
number = 10;
}
- IQueryable query = DbContext.Lessons.Skip((page - 1) * number).Take(number);
+ IQueryable query = DbContext.Lessons;
switch (orderCriteria)
{
case LessonOrderCriteria.None:
@@ -43,14 +43,25 @@ public class LessonDataService : ILessonService
case LessonOrderCriteria.ByLastEdit:
query = query.OrderBy(s => s.LastEdit);
break;
+ case LessonOrderCriteria.ById:
+ query = query.OrderBy(s => (int) s.Id);
+ break;
default:
break;
}
+ query = query.Skip((page - 1) * number).Take(number);
+
+
var lessons = query.ToList();
return lessons;
}
+ public int GetNumberOfLessons()
+ {
+ return DbContext.Lessons.Count();
+ }
+
public LessonEntity GetLessonById(int id)
{
var lessonEntity = DbContext.Lessons.FirstOrDefault(u => u.Id == id);
diff --git a/API_SQLuedo/DbDataManager/Service/NotepadDataService.cs b/API_SQLuedo/DbDataManager/Service/NotepadDataService.cs
new file mode 100644
index 0000000..b4f9cdc
--- /dev/null
+++ b/API_SQLuedo/DbDataManager/Service/NotepadDataService.cs
@@ -0,0 +1,63 @@
+using DbContextLib;
+using Entities;
+using Shared;
+
+namespace DbDataManager.Service;
+
+public class NotepadDataService : INotepadService
+{
+ private UserDbContext DbContext { get; set; }
+
+ public NotepadDataService(UserDbContext context)
+ {
+ DbContext = context;
+ context.Database.EnsureCreated();
+ }
+ public NotepadEntity GetNotepadFromUserAndInquiryId(int userId, int inquiryId)
+ {
+ var user = DbContext.Users.FirstOrDefault(u => u.Id == userId);
+ if (user == null)
+ {
+ throw new ArgumentException("Erreur, aucun utilisateur ne possède l'ID fourni");
+ }
+ var inquiry = DbContext.Inquiries.FirstOrDefault(i => i.Id == inquiryId);
+ if (inquiry == null)
+ {
+ throw new ArgumentException("Erreur, aucune enquête ne possède l'ID fourni");
+ }
+ var notepad = DbContext.Notepads.FirstOrDefault(n => n.UserId == userId && n.InquiryId == inquiryId);
+ if (notepad == null)
+ {
+ throw new ArgumentException("Erreur, aucun bloc-notes n'existe pour l'utilisateur et l'enquête donnés");
+ }
+ return notepad;
+ }
+
+ public void SetNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes)
+ {
+ var user = DbContext.Users.FirstOrDefault(u => u.Id == userId);
+ if (user == null)
+ {
+ throw new ArgumentException("Erreur, aucun utilisateur ne possède l'ID fourni");
+ }
+ var inquiry = DbContext.Inquiries.FirstOrDefault(i => i.Id == inquiryId);
+ if (inquiry == null)
+ {
+ throw new ArgumentException("Erreur, aucune enquête ne possède l'ID fourni");
+ }
+ var notepad = DbContext.Notepads.FirstOrDefault(n => n.UserId == userId && n.InquiryId == inquiryId);
+ if (notepad != null)
+ {
+ throw new ArgumentException("Erreur, un bloc-notes existe déjà pour l'utilisateur et l'enquête donnés");
+ }
+ DbContext.Notepads.Add(new NotepadEntity { UserId = userId, InquiryId = inquiryId, Notes = notes });
+ DbContext.SaveChangesAsync();
+ }
+
+ public void UpdateNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes)
+ {
+ var notepad = GetNotepadFromUserAndInquiryId(userId, inquiryId);
+ notepad.Notes = notes;
+ DbContext.SaveChangesAsync();
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs b/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs
index 4c77183..1b38e05 100644
--- a/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs
+++ b/API_SQLuedo/DbDataManager/Service/ParagraphDataService.cs
@@ -54,6 +54,17 @@ public class ParagraphDataService : IParagraphService
return paragraphs;
}
+ public IEnumerable GetParagraphsByLessonId(int lessonId)
+ {
+ var lesson = DbContext.Lessons.FirstOrDefault(l => l.Id == lessonId);
+ if (lesson == null)
+ {
+ throw new ArgumentException($"Erreur, la leçon ayant pour id {lessonId} est introuvable.");
+ }
+ var list = DbContext.Paragraphs.Where(p => p.LessonId == lessonId);
+ return list;
+ }
+
public ParagraphEntity GetParagraphById(int id)
{
var paragraphEntity = DbContext.Paragraphs.FirstOrDefault(u => u.Id == id);
diff --git a/API_SQLuedo/DbDataManager/Service/SolutionDataService.cs b/API_SQLuedo/DbDataManager/Service/SolutionDataService.cs
new file mode 100644
index 0000000..d63992b
--- /dev/null
+++ b/API_SQLuedo/DbDataManager/Service/SolutionDataService.cs
@@ -0,0 +1,26 @@
+using DbContextLib;
+using Entities;
+using Shared;
+
+namespace DbDataManager.Service;
+
+public class SolutionDataService : ISolutionService
+{
+ private UserDbContext DbContext { get; set; }
+
+ public SolutionDataService(UserDbContext context)
+ {
+ DbContext = context;
+ context.Database.EnsureCreated();
+ }
+
+ public SolutionEntity GetSolutionByInquiryId(int id)
+ {
+ var solution = DbContext.Solutions.FirstOrDefault(s => s.OwnerId == id);
+ if (solution == null)
+ {
+ throw new ArgumentException($"Impossible de trouver la solution pour l'enquête d'id {id}", nameof(id));
+ }
+ return solution;
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs
index 4676d15..5211aa2 100644
--- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs
+++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs
@@ -58,7 +58,8 @@ public class UserDataService : IUserService
{
number = 10;
}
- IQueryable query = DbContext.Users.Skip((page - 1) * number).Take(number);
+
+ IQueryable query = DbContext.Users;
switch (orderCriteria)
{
case UserOrderCriteria.None:
@@ -78,6 +79,7 @@ public class UserDataService : IUserService
default:
break;
}
+ query = query.Skip((page - 1) * number).Take(number);
var users = query.ToList();
return users;
@@ -142,7 +144,6 @@ public class UserDataService : IUserService
{
return false;
}
-
DbContext.Users.Remove(userEntity);
DbContext.SaveChangesAsync();
return true;
@@ -179,4 +180,24 @@ public class UserDataService : IUserService
DbContext.SaveChangesAsync();
return newUserEntity;
}
+
+ public bool IsEmailTaken(string email)
+ {
+ var isEmail = DbContext.Users.Any(u => u.Email == email);
+ return isEmail;
+ }
+
+ public bool IsUsernameTaken(string username)
+ {
+ var isUsername = DbContext.Users.Any(u => u.Username == username);
+ return isUsername;
+ }
+
+ public UserEntity PromoteUser(int id)
+ {
+ var userEdit = GetUserById(id);
+ var newUserEntity = UpdateUser(id,new UserEntity{Id = id,Username = userEdit.Username,Password = userEdit.Password,Email = userEdit.Email,IsAdmin = true});
+ DbContext.SaveChangesAsync();
+ return newUserEntity;
+ }
}
\ No newline at end of file
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/EntityFramework/UserEntity.cs b/API_SQLuedo/EntityFramework/UserEntity.cs
index aa2527f..ecbabcc 100644
--- a/API_SQLuedo/EntityFramework/UserEntity.cs
+++ b/API_SQLuedo/EntityFramework/UserEntity.cs
@@ -1,8 +1,11 @@
using System.ComponentModel.DataAnnotations.Schema;
+using Microsoft.EntityFrameworkCore;
namespace Entities;
[Table("User")]
+[Index(nameof(Username), IsUnique = true)]
+[Index(nameof(Email), IsUnique = true)]
public class UserEntity
{
public int Id { get; set; }
diff --git a/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs
index f800b0e..def4550 100644
--- a/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs
+++ b/API_SQLuedo/Model/OrderCriteria/InquiryOrderCriteria.cs
@@ -5,5 +5,6 @@ public enum InquiryOrderCriteria
None,
ByTitle,
ByDescription,
- ByIsUser
+ ByIsUser,
+ ById
}
\ No newline at end of file
diff --git a/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs
index db06097..0fdb058 100644
--- a/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs
+++ b/API_SQLuedo/Model/OrderCriteria/LessonOrderCriteria.cs
@@ -5,5 +5,6 @@ public enum LessonOrderCriteria
None,
ByTitle,
ByLastPublisher,
- ByLastEdit
+ ByLastEdit,
+ ById
}
\ No newline at end of file
diff --git a/API_SQLuedo/Shared/IInquiryService.cs b/API_SQLuedo/Shared/IInquiryService.cs
index 68d27b8..daf2c6a 100644
--- a/API_SQLuedo/Shared/IInquiryService.cs
+++ b/API_SQLuedo/Shared/IInquiryService.cs
@@ -5,6 +5,7 @@ namespace Shared;
public interface IInquiryService
{
public IEnumerable GetInquiries(int page, int number, InquiryOrderCriteria orderCriteria);
+ public int GetNumberOfInquiries();
public TInquiry GetInquiryById(int id);
public TInquiry GetInquiryByTitle(string title);
public bool DeleteInquiry(int id);
diff --git a/API_SQLuedo/Shared/IInquiryTableService.cs b/API_SQLuedo/Shared/IInquiryTableService.cs
new file mode 100644
index 0000000..fa3d5ff
--- /dev/null
+++ b/API_SQLuedo/Shared/IInquiryTableService.cs
@@ -0,0 +1,6 @@
+namespace Shared;
+
+public interface IInquiryTableService
+{
+ public string GetDatabaseNameByInquiryId(int id);
+}
\ No newline at end of file
diff --git a/API_SQLuedo/Shared/ILessonService.cs b/API_SQLuedo/Shared/ILessonService.cs
index 51836e0..ab173fc 100644
--- a/API_SQLuedo/Shared/ILessonService.cs
+++ b/API_SQLuedo/Shared/ILessonService.cs
@@ -5,6 +5,7 @@ namespace Shared;
public interface ILessonService
{
public IEnumerable GetLessons(int page, int number, LessonOrderCriteria orderCriteria);
+ public int GetNumberOfLessons();
public TLesson GetLessonById(int id);
public TLesson GetLessonByTitle(string title);
public bool DeleteLesson(int id);
diff --git a/API_SQLuedo/Shared/INotepadService.cs b/API_SQLuedo/Shared/INotepadService.cs
new file mode 100644
index 0000000..9e5bb6d
--- /dev/null
+++ b/API_SQLuedo/Shared/INotepadService.cs
@@ -0,0 +1,10 @@
+namespace Shared;
+
+public interface INotepadService
+{
+ public TNotepad GetNotepadFromUserAndInquiryId(int userId, int inquiryId);
+
+ public void SetNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes);
+
+ public void UpdateNotepadFromUserAndInquiryId(int userId, int inquiryId, string notes);
+}
\ No newline at end of file
diff --git a/API_SQLuedo/Shared/IParagraphService.cs b/API_SQLuedo/Shared/IParagraphService.cs
index 34a249b..7fc124e 100644
--- a/API_SQLuedo/Shared/IParagraphService.cs
+++ b/API_SQLuedo/Shared/IParagraphService.cs
@@ -5,6 +5,7 @@ namespace Shared
public interface IParagraphService
{
public IEnumerable GetParagraphs(int page, int number, ParagraphOrderCriteria orderCriteria);
+ public IEnumerable GetParagraphsByLessonId(int lessonId);
public TParagraph GetParagraphById(int id);
public TParagraph GetParagraphByTitle(string title);
public bool DeleteParagraph(int id);
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/ISolutionService.cs b/API_SQLuedo/Shared/ISolutionService.cs
new file mode 100644
index 0000000..270ee5c
--- /dev/null
+++ b/API_SQLuedo/Shared/ISolutionService.cs
@@ -0,0 +1,6 @@
+namespace Shared;
+
+public interface ISolutionService
+{
+ public TSolution GetSolutionByInquiryId(int id);
+}
\ No newline at end of file
diff --git a/API_SQLuedo/Shared/IUserService.cs b/API_SQLuedo/Shared/IUserService.cs
index 06051a9..94b9366 100644
--- a/API_SQLuedo/Shared/IUserService.cs
+++ b/API_SQLuedo/Shared/IUserService.cs
@@ -14,5 +14,8 @@ namespace Shared
public bool DeleteUserByUsername(string username);
public TUser UpdateUser(int id, TUser user);
public TUser CreateUser(string username, string password, string email, bool isAdmin);
+ public bool IsEmailTaken(string email);
+ public bool IsUsernameTaken(string username);
+ public TUser PromoteUser(int id);
}
}
\ No newline at end of file
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/StubbedContextLib/StubbedContext.cs b/API_SQLuedo/StubbedContextLib/StubbedContext.cs
index b015ebc..1337b91 100644
--- a/API_SQLuedo/StubbedContextLib/StubbedContext.cs
+++ b/API_SQLuedo/StubbedContextLib/StubbedContext.cs
@@ -184,5 +184,29 @@ public class StubbedContext : UserDbContext
IsFinished = true
}
);
+ builder.Entity().HasData(
+ new LessonEntity
+ {
+ Id = 1, Title = "Lesson N°1", LastEdit = DateOnly.FromDateTime(DateTime.Now), LastPublisher = "Clément"
+ },
+ new LessonEntity
+ {
+ Id = 2, Title = "Lesson N°2", LastEdit = DateOnly.FromDateTime(DateTime.Now), LastPublisher = "Clément"
+ },
+ new LessonEntity
+ {
+ Id = 3, Title = "Lesson N°3", LastEdit = DateOnly.FromDateTime(DateTime.Now), LastPublisher = "Clément"
+ },
+ new LessonEntity
+ {
+ Id = 4, Title = "Lesson N°4", LastEdit = DateOnly.FromDateTime(DateTime.Now), LastPublisher = "Clément"
+ }
+ );
+ builder.Entity().HasData(
+ new ParagraphEntity { Id = 1, LessonId = 1, ContentTitle = "Paragraph N°1", ContentContent = "Content of paragraph N°1", Title = "Title Paragraph N°1", Content = "Content of paragraph N°1", Info = "Infos", Query = "SELECT * FROM Table", Comment = "Comment of paragraph N°1"},
+ new ParagraphEntity { Id = 2, LessonId = 1, ContentTitle = "Paragraph N°2", ContentContent = "Content of paragraph N°2", Title = "Title Paragraph N°2", Content = "Content of paragraph N°2", Info = "Infos", Query = "SELECT * FROM Table", Comment = "Comment of paragraph N°2"},
+ new ParagraphEntity { Id = 3, LessonId = 1, ContentTitle = "Paragraph N°3", ContentContent = "Content of paragraph N°3", Title = "Title Paragraph N°3", Content = "Content of paragraph N°3", Info = "Infos", Query = "SELECT * FROM Table", Comment = "Comment of paragraph N°3"},
+ new ParagraphEntity { Id = 4, LessonId = 2, ContentTitle = "Paragraph N°1", ContentContent = "Content of paragraph N°1", Title = "Title Paragraph N°1", Content = "Content of paragraph N°1", Info = "Infos", Query = "SELECT * FROM Table", Comment = "Comment of paragraph N°1"}
+ );
}
}
\ No newline at end of file
diff --git a/API_SQLuedo/TestAPI/BlackListUnitTest.cs b/API_SQLuedo/TestAPI/BlackListUnitTest.cs
index 5bdd550..a40f3f9 100644
--- a/API_SQLuedo/TestAPI/BlackListUnitTest.cs
+++ b/API_SQLuedo/TestAPI/BlackListUnitTest.cs
@@ -46,7 +46,7 @@ public class BlackListUnitTest
var usersController = new BlackListController(new NullLogger(), _blackListService.Object);
var userResult = usersController.BanUser("Test1");
- Assert.Equal(typeof(OkResult), userResult.GetType());
+ Assert.Equal(typeof(OkObjectResult), userResult.GetType());
}
[Fact]
@@ -68,7 +68,7 @@ public class BlackListUnitTest
var usersController = new BlackListController(new NullLogger(), _blackListService.Object);
var userResult = usersController.UnbanUser("example@email.com");
- Assert.Equal(typeof(OkResult), userResult.GetType());
+ Assert.Equal(typeof(OkObjectResult), userResult.GetType());
}
[Fact]
@@ -94,7 +94,7 @@ public class BlackListUnitTest
});
var blackListController = new BlackListController(new NullLogger(), _blackListService.Object);
- var result = blackListController.GetUsers(1,10,BlackListOdrerCriteria.None);
+ var result = blackListController.GetBannedUsers(1,10,BlackListOdrerCriteria.None);
Assert.Equal(typeof(OkObjectResult), result.GetType());
if (result is OkObjectResult okObjectResult)
{
@@ -118,7 +118,7 @@ public class BlackListUnitTest
});
var blackListController = new BlackListController(new NullLogger(), _blackListService.Object);
- var result = blackListController.GetUsers(1,10,BlackListOdrerCriteria.ByEmail);
+ var result = blackListController.GetBannedUsers(1,10,BlackListOdrerCriteria.ByEmail);
Assert.Equal(typeof(OkObjectResult), result.GetType());
if (result is OkObjectResult okObjectResult)
{
@@ -142,7 +142,7 @@ public class BlackListUnitTest
});
var blackListController = new BlackListController(new NullLogger(), _blackListService.Object);
- var result = blackListController.GetUsers(1,10,BlackListOdrerCriteria.ByExpirationDate);
+ var result = blackListController.GetBannedUsers(1,10,BlackListOdrerCriteria.ByExpirationDate);
Assert.Equal(typeof(OkObjectResult), result.GetType());
if (result is OkObjectResult okObjectResult)
{
@@ -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()
{
@@ -163,7 +180,7 @@ public class BlackListUnitTest
var userResult = usersController.GetNumberOfBannedUsers();
Assert.Equal(typeof(OkObjectResult), userResult.GetType());
- Assert.Equal(10, (userResult as OkObjectResult).Value);
+ Assert.Equal(10, ((KeyValuePair)(userResult as OkObjectResult).Value).Value);
}
private IEnumerable GetBlackList()
diff --git a/API_SQLuedo/TestAPI/InquiryTableUnitTest.cs b/API_SQLuedo/TestAPI/InquiryTableUnitTest.cs
new file mode 100644
index 0000000..a306bf6
--- /dev/null
+++ b/API_SQLuedo/TestAPI/InquiryTableUnitTest.cs
@@ -0,0 +1,51 @@
+using API.Controllers;
+using Dto;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Shared;
+
+namespace TestAPI;
+
+public class InquiryTableUnitTest
+{
+ private readonly Mock> _inquiryTableService;
+
+ public InquiryTableUnitTest()
+ {
+ _inquiryTableService = new Mock>();
+ }
+
+ [Fact]
+ public void GetDatabaseNameFromInquiryId_Success()
+ {
+ var database = "Inquiry1";
+ _inquiryTableService.Setup(x => x.GetDatabaseNameByInquiryId(42))
+ .Returns(database);
+ var inquiryTableController =
+ new InquiryTableController(_inquiryTableService.Object, new NullLogger());
+
+ var inquiryTableResult = inquiryTableController.GetDatabaseNameByInquiryById(42);
+
+ if (inquiryTableResult is OkObjectResult okObjectResult)
+ {
+ var valeur = okObjectResult.Value;
+ Assert.NotNull(valeur);
+ Assert.Equal(database, ((KeyValuePair)valeur).Value);
+ }
+ }
+
+ [Fact]
+ public void GetDatabaseNameFromInquiryId_Throws_ArgumentException()
+ {
+ _inquiryTableService.Setup(x => x.GetDatabaseNameByInquiryId(42))
+ .Throws();
+ var inquiryTableController =
+ new InquiryTableController(_inquiryTableService.Object, new NullLogger());
+
+ var inquiryTableResult = inquiryTableController.GetDatabaseNameByInquiryById(42);
+
+ Assert.NotNull(inquiryTableResult);
+ Assert.Equal(typeof(NotFoundResult), inquiryTableResult.GetType());
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/TestAPI/InquiryUnitTest.cs b/API_SQLuedo/TestAPI/InquiryUnitTest.cs
index 9bfdb68..b6bf727 100644
--- a/API_SQLuedo/TestAPI/InquiryUnitTest.cs
+++ b/API_SQLuedo/TestAPI/InquiryUnitTest.cs
@@ -36,6 +36,25 @@ public class InquiryUnitTest
Assert.True(inquiryList.SequenceEqual(valeur as IEnumerable, new InquiryIdEqualityComparer()));
}
}
+
+ [Fact]
+ public void GetNumberOfInquiries()
+ {
+ var inquiryList = GetInquiriesData();
+ _inquiryService.Setup(x => x.GetNumberOfInquiries())
+ .Returns(4);
+ var inquiryController = new InquiriesController(_inquiryService.Object, new NullLogger());
+
+ var inquiriesResult = inquiryController.GetNumberOfInquiries();
+
+ if (inquiriesResult is OkObjectResult okObjectResult)
+ {
+ var valeur = (KeyValuePair)okObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ Assert.Equal(GetInquiriesData().Count, valeur.Value);
+ }
+ }
[Fact]
public void GetInquiresListFail()
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/NotepadUnitTest.cs b/API_SQLuedo/TestAPI/NotepadUnitTest.cs
new file mode 100644
index 0000000..1bc6ad6
--- /dev/null
+++ b/API_SQLuedo/TestAPI/NotepadUnitTest.cs
@@ -0,0 +1,183 @@
+using API.Controllers;
+using Dto;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Shared;
+using TestAPI.Extensions;
+
+namespace TestAPI;
+
+public class NotepadUnitTest
+{
+ private readonly Mock> _notepadService;
+
+ public NotepadUnitTest()
+ {
+ _notepadService = new Mock>();
+ }
+
+ [Fact]
+ public void GetNotepadFromUserAndInquiryId()
+ {
+ var notepad = new NotepadDto(42, 42, "These are notes example.");
+ _notepadService.Setup(x => x.GetNotepadFromUserAndInquiryId(42, 42))
+ .Returns(notepad);
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.GetNotepadByUserAndInquiryById(42,42);
+
+ if (notepadResult is OkObjectResult okObjectResult)
+ {
+ var valeur = okObjectResult.Value;
+ Assert.NotNull(valeur);
+ Assert.Equal(notepad, valeur);
+ }
+ }
+
+ [Fact]
+ public void GetNotepadFromUserAndInquiryId_ThrowingArgumentException()
+ {
+ var notepad = new NotepadDto(42, 42, "These are notes example.");
+ _notepadService.Setup(x => x.GetNotepadFromUserAndInquiryId(42, 10))
+ .Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.GetNotepadByUserAndInquiryById(42,10);
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(NotFoundResult),notepadResult.GetType());
+ }
+
+ [Fact]
+ public void SetNotepadFromUserAndInquiryId_Success()
+ {
+ _notepadService.Setup(x => x.SetNotepadFromUserAndInquiryId(42, 42,"These are notes example."));
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(OkResult),notepadResult.GetType());
+ Assert.Equal(typeof(OkObjectResult) , notepadController.GetNotepadByUserAndInquiryById(42,42).GetType());
+ }
+
+ [Fact]
+ public void SetNotepadFromUserAndInquiryId_Negative_UserId()
+ {
+ _notepadService.Setup(x => x.SetNotepadFromUserAndInquiryId(-42, 42,"These are notes example.")).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(-42,42, "These are notes example."));
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(BadRequestResult),notepadResult.GetType());
+ }
+
+ [Fact]
+ public void SetNotepadFromUserAndInquiryId_Negative_InquiryId()
+ {
+ _notepadService.Setup(x => x.SetNotepadFromUserAndInquiryId(42, -42,"These are notes example.")).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,-42, "These are notes example."));
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(BadRequestResult),notepadResult.GetType());
+ }
+
+ [Fact]
+ public void SetNotepadFromUserAndInquiryId_Null_Notes()
+ {
+ _notepadService.Setup(x => x.SetNotepadFromUserAndInquiryId(42, 42,"These are notes example.")).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, null));
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(BadRequestResult),notepadResult.GetType());
+ }
+
+ [Fact]
+ public void SetNotepadFromUserAndInquiryId_Throws_ArgumentException()
+ {
+ var notepad = new NotepadDto(42, 42, "These are notes example.");
+ _notepadService.Setup(x => x.SetNotepadFromUserAndInquiryId(42, 42,"These are notes example.")).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(notepad);
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(NotFoundResult),notepadResult.GetType());
+ }
+
+
+ [Fact]
+ public void UpdateNotepadFromUserAndInquiryId_Success()
+ {
+ _notepadService.Setup(x => x.UpdateNotepadFromUserAndInquiryId(42, 42,"These are the new notes"));
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ Assert.NotNull(notepadResult);
+ Assert.Equal(typeof(OkResult),notepadResult.GetType());
+ Assert.Equal(typeof(OkObjectResult) , notepadController.GetNotepadByUserAndInquiryById(42,42).GetType());
+ var updateResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are the new notes"));
+ Assert.NotNull(updateResult);
+ Assert.Equal(typeof(OkResult),updateResult.GetType());
+ }
+
+ [Fact]
+ public void UpdateNotepadFromUserAndInquiryId_Negative_UserId()
+ {
+ _notepadService.Setup(x => x.UpdateNotepadFromUserAndInquiryId(42, 42,"These are the new notes"));
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ var updateResult = notepadController.UpdateNotepadByUserAndInquiryById(new NotepadDto(-42,42, "These are the new notes"));
+ Assert.NotNull(updateResult);
+ Assert.Equal(typeof(BadRequestResult),updateResult.GetType());
+ }
+
+ [Fact]
+ public void UpdateNotepadFromUserAndInquiryId_Negative_InquiryId()
+ {
+ _notepadService.Setup(x => x.UpdateNotepadFromUserAndInquiryId(42, -42,"These are the new notes"));
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ var updateResult = notepadController.UpdateNotepadByUserAndInquiryById(new NotepadDto(42,-42, "These are the new notes"));
+ Assert.NotNull(updateResult);
+ Assert.Equal(typeof(BadRequestResult),updateResult.GetType());
+ }
+
+ [Fact]
+ public void UpdateNotepadFromUserAndInquiryId_Null_Notes()
+ {
+ _notepadService.Setup(x => x.UpdateNotepadFromUserAndInquiryId(42, 42,null)).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ var updateResult = notepadController.UpdateNotepadByUserAndInquiryById(new NotepadDto(42,42, null));
+ Assert.NotNull(updateResult);
+ Assert.Equal(typeof(BadRequestResult),updateResult.GetType());
+ }
+
+ [Fact]
+ public void UpdateNotepadFromUserAndInquiryId_Throws_ArgumentException()
+ {
+ _notepadService.Setup(x => x.UpdateNotepadFromUserAndInquiryId(42, 10,"These are the new notes")).Throws();
+ var notepadController =
+ new NotepadController(_notepadService.Object, new NullLogger());
+
+ var notepadResult = notepadController.SetNotepadByUserAndInquiryById(new NotepadDto(42,42, "These are notes example."));
+ var updateResult = notepadController.UpdateNotepadByUserAndInquiryById(new NotepadDto(42,10, "These are the new notes"));
+ Assert.NotNull(updateResult);
+ Assert.Equal(typeof(NotFoundResult),updateResult.GetType());
+ }
+}
\ No newline at end of file
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/SolutionUnitTest.cs b/API_SQLuedo/TestAPI/SolutionUnitTest.cs
new file mode 100644
index 0000000..da81706
--- /dev/null
+++ b/API_SQLuedo/TestAPI/SolutionUnitTest.cs
@@ -0,0 +1,52 @@
+using API.Controllers;
+using Dto;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Shared;
+
+namespace TestAPI;
+
+public class SolutionUnitTest
+{
+ private readonly Mock> _solutionService;
+
+ public SolutionUnitTest()
+ {
+ _solutionService = new Mock>();
+ }
+
+ [Fact]
+ public void GetSolutionFromInquiryId_Success()
+ {
+ var solution = new SolutionDto(42,"Maxime","Sapountzis","La cuisine","Le couteau", "L'explication");
+ _solutionService.Setup(x => x.GetSolutionByInquiryId(42))
+ .Returns(solution);
+ var solutionController =
+ new SolutionController(_solutionService.Object, new NullLogger());
+
+ var solutionResult = solutionController.GetSolutionByInquiryById(42);
+
+ if (solutionResult is OkObjectResult okObjectResult)
+ {
+ var valeur = okObjectResult.Value;
+ Assert.NotNull(valeur);
+ Assert.Equal(solution, valeur);
+ }
+ }
+
+ [Fact]
+ public void GetSolutionFromInquiryId_Throws_ArgumentException()
+ {
+ var solution = new SolutionDto(42,"Maxime","Sapountzis","La cuisine","Le couteau", "L'explication");
+ _solutionService.Setup(x => x.GetSolutionByInquiryId(42))
+ .Throws();
+ var solutionController =
+ new SolutionController(_solutionService.Object, new NullLogger());
+
+ var solutionResult = solutionController.GetSolutionByInquiryById(42);
+
+ Assert.NotNull(solutionResult);
+ Assert.Equal(typeof(NotFoundResult), solutionResult.GetType());
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
index 8ad235a..153469b 100644
--- a/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
+++ b/API_SQLuedo/TestAPI/SuccessesUnitTest.cs
@@ -1,6 +1,7 @@
using API.Controllers;
using Dto;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Shared;
@@ -40,14 +41,30 @@ public class SuccessesUnitTest
}
[Fact]
- public void GetSuccessesListFail()
+ public void GetSuccessesListFail_When_Result_Equal_0()
{
_successService.Setup(x => x.GetSuccesses(1, 4, 0))
.Returns(new List());
var successesController =
new SuccessesController(_successService.Object, new NullLogger());
- var successesResult = successesController.GetSuccesses(2, 3, 0);
+ var successesResult = successesController.GetSuccesses(26373, 31771, 0);
+
+ if (successesResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
+ {
+ Assert.IsNotType(successesResult);
+ }
+ }
+
+ [Fact]
+ public void GetSuccessesListFail_When_Page_Is_A_Negative()
+ {
+ _successService.Setup(x => x.GetSuccesses(1, 4, 0))
+ .Returns(new List());
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.GetSuccesses(-1, 3, 0);
if (successesResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
{
@@ -89,7 +106,7 @@ public class SuccessesUnitTest
}
[Fact]
- public void GetSuccessInquiryIdFail()
+ public void GetSuccessInquiryIdFail_When_Id_Not_Exist()
{
var successesList = GetSuccessesData();
_successService.Setup(x => x.GetSuccessesByInquiryId(1))
@@ -108,6 +125,43 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void GetSuccessInquiryIdFail_When_Id_Negative()
+ {
+ var successesList = GetSuccessesData();
+ _successService.Setup(x => x.GetSuccessesByInquiryId(1))
+ .Returns(new List { successesList[0], successesList[1] });
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var sucessesResult = successesController.GetSuccessByInquiryId(-1);
+ if (sucessesResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ Assert.IsNotType(valeur);
+ Assert.DoesNotContain(valeur, successesList);
+ }
+ }
+
+ [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()
{
@@ -140,7 +194,7 @@ public class SuccessesUnitTest
}
[Fact]
- public void GetSuccessUserIdFail()
+ public void GetSuccessUserIdFail_When_Id_Not_Found()
{
var successesList = GetSuccessesData();
_successService.Setup(x => x.GetSuccessesByUserId(2))
@@ -159,6 +213,44 @@ public class SuccessesUnitTest
}
}
+
+ [Fact]
+ public void GetSuccessUserIdFail_When_Id_Negative()
+ {
+ var successesList = GetSuccessesData();
+ _successService.Setup(x => x.GetSuccessesByUserId(2))
+ .Returns(new List { successesList[2], successesList[3] });
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var sucessesResult = successesController.GetSuccessByUserId(-1);
+ if (sucessesResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ Assert.IsNotType(valeur);
+ Assert.DoesNotContain(valeur, successesList);
+ }
+ }
+
+ [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()
{
@@ -177,7 +269,7 @@ public class SuccessesUnitTest
}
[Fact]
- public void DeleteSuccessFail()
+ public void DeleteSuccessFail_When_Not_Found()
{
_successService.Setup(x => x.DeleteSuccess(1, 1))
.Returns(true);
@@ -192,6 +284,22 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void DeleteSuccessFail_When_Negative()
+ {
+ _successService.Setup(x => x.DeleteSuccess(1, 1))
+ .Returns(true);
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var sucessesResult = successesController.DeleteSuccess(-1, 278);
+ if (sucessesResult is NotFoundObjectResult nfObjectResult)
+ {
+ Assert.Null(nfObjectResult.Value);
+ Assert.IsNotType(nfObjectResult.Value);
+ }
+ }
+
[Fact]
public void CreateSuccessSuccess()
{
@@ -213,7 +321,7 @@ public class SuccessesUnitTest
}
[Fact]
- public void CreateSuccessFail()
+ public void CreateSuccessFail_When_Id_Not_Found()
{
_successService.Setup(x => x.CreateSuccess(8, 8, true))
.Returns(new SuccessDto(8, 8, true));
@@ -228,6 +336,38 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void CreateSuccessFail_When_Id_Negative()
+ {
+ _successService.Setup(x => x.CreateSuccess(8, 8, true))
+ .Returns(new SuccessDto(8, 8, true));
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.CreateSuccess(new SuccessDto(-1, 818, true));
+
+ if (successesResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(400, bdObjectResult.StatusCode);
+ }
+ }
+
+ [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()
{
@@ -249,7 +389,7 @@ public class SuccessesUnitTest
}
[Fact]
- public void UpdateSuccessFail()
+ public void UpdateSuccessFail_When_Ids_Are_Differents()
{
_successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true)))
.Returns(new SuccessDto(1, 2, true));
@@ -264,6 +404,56 @@ public class SuccessesUnitTest
}
}
+ [Fact]
+ public void UpdateSuccessFail_When_Id_Negative()
+ {
+ _successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true)))
+ .Returns(new SuccessDto(1, 2, true));
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.UpdateSuccess(-2, 1, new SuccessDto(1, 2, true));
+
+ if (successesResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(400, bdObjectResult.StatusCode);
+ }
+ }
+
+ [Fact]
+ public void UpdateSuccessFail_When_Id_Not_Found()
+ {
+ _successService.Setup(x => x.UpdateSuccess(1, 1, new SuccessDto(1, 2, true)))
+ .Returns(new SuccessDto(1, 2, true));
+ var successesController =
+ new SuccessesController(_successService.Object, new NullLogger());
+
+ var successesResult = successesController.UpdateSuccess(1000, 1000, new SuccessDto(1000, 1000, true));
+
+ if (successesResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(400, bdObjectResult.StatusCode);
+ }
+ }
+
+ [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()
{
List successesData = new List(4)
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 39345d0..561b680 100644
--- a/API_SQLuedo/TestAPI/UserUnitTest.cs
+++ b/API_SQLuedo/TestAPI/UserUnitTest.cs
@@ -18,7 +18,7 @@ public class UserUnitTest
}
[Fact]
- public void GetNumberOfUsers()
+ public void GetNumberOfUsersSuccess()
{
var userList = GetUsersData();
_userService.Setup(x => x.GetNumberOfUsers())
@@ -29,12 +29,30 @@ public class UserUnitTest
if (userResult is OkObjectResult okObjectResult)
{
- var valeur = (okObjectResult.Value as KeyValuePair?);
+ var valeur = (okObjectResult.Value as KeyValuePair?);
Assert.NotNull(valeur);
Assert.Equal(userList.Count, valeur.Value.Value);
}
}
-
+
+
+ [Fact]
+ public void GetNumberOfUsers_Fail_Cause_Not_Found()
+ {
+ var userList = GetUsersData();
+ _userService.Setup(x => x.GetNumberOfUsers())
+ .Returns(0);
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.GetNumberOfUsers();
+
+ if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
+
+ {
+ Assert.IsNotType(userResult);
+ }
+ }
+
[Fact]
public void GetUsersListSuccess()
{
@@ -54,7 +72,23 @@ public class UserUnitTest
Assert.True(userList.SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer()));
}
}
-
+
+ [Fact]
+ public void GetUserListFail()
+ {
+ _userService.Setup(x => x.GetUsers(1, 4, 0))
+ .Returns(new List());
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.GetUsers(2, 3, 0);
+
+ if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
+
+ {
+ Assert.IsNotType(userResult);
+ }
+ }
+
[Fact]
public void GetNotAdminUsersListSuccess()
{
@@ -65,29 +99,31 @@ public class UserUnitTest
var userResult = usersController.GetNotAdminUsers(1, 4, 0);
- if (userResult is OkObjectResult okObjectResult)
- {
- var valeur = okObjectResult.Value;
+ if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
- Assert.NotNull(valeur);
- Assert.Equal(GetUsersData().ToString(), valeur.ToString());
- Assert.True(userList.Where(u => u.IsAdmin == false).SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer()));
+ {
+ Assert.IsNotType(userResult);
}
}
[Fact]
- public void GetUserListFail()
+ public void GetNotAdminUsersListFail_Cause_Not_Found()
{
- _userService.Setup(x => x.GetUsers(1, 4, 0))
- .Returns(new List());
+ var userList = GetUsersData();
+ _userService.Setup(x => x.GetNotAdminUsers(1, 4, 0))
+ .Returns(userList.Where(u => u.IsAdmin == false));
var usersController = new UsersController(new NullLogger(), _userService.Object);
- var userResult = usersController.GetUsers(2, 3, 0);
-
- if (userResult is StatusCodeResult statusCodeResult && statusCodeResult.StatusCode == 204)
+ var userResult = usersController.GetNotAdminUsers(100, 4, 0);
+ if (userResult is OkObjectResult okObjectResult)
{
- Assert.IsNotType(userResult);
+ var valeur = okObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ Assert.Equal(GetUsersData().ToString(), valeur.ToString());
+ Assert.True(userList.Where(u => u.IsAdmin == false)
+ .SequenceEqual(valeur as IEnumerable, new UserIdEqualityComparer()));
}
}
@@ -115,7 +151,7 @@ public class UserUnitTest
}
[Fact]
- public void GetUserIdFail()
+ public void GetUserIdFail_Id_Doesnt_Exist()
{
var userList = GetUsersData();
_userService.Setup(x => x.GetUserById(1))
@@ -133,6 +169,42 @@ public class UserUnitTest
}
}
+
+ [Fact]
+ public void GetUserIdFail_Negative_Id()
+ {
+ var userList = GetUsersData();
+ _userService.Setup(x => x.GetUserById(1))
+ .Returns(userList[1]);
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.GetUserById(-1);
+ if (userResult is NotFoundObjectResult nfObjectResult)
+ {
+ var valeur = nfObjectResult.Value;
+
+ Assert.NotNull(valeur);
+ Assert.IsNotType(valeur);
+ Assert.DoesNotContain(valeur, userList);
+ }
+ }
+
+ [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()
{
@@ -155,6 +227,23 @@ public class UserUnitTest
Assert.True(valeur.IsAdmin);
}
}
+
+ [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()
{
@@ -198,6 +287,7 @@ public class UserUnitTest
Assert.False(userList == valeur);
}
}
+
[Fact]
public void GetUserEmailFail()
{
@@ -250,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()
{
@@ -271,7 +389,7 @@ public class UserUnitTest
}
[Fact]
- public void CreateUserFail()
+ public void CreateUserFail_When_Field_Null()
{
GetUsersData();
_userService.Setup(x => x.CreateUser("Nom", "Passssss", "heudfk@hdye.com", true))
@@ -286,6 +404,39 @@ public class UserUnitTest
}
}
+
+ [Fact]
+ public void CreateUserWithExistingEmail()
+ {
+ GetUsersData();
+ _userService.Setup(x => x.CreateUser("Nom", "Passssss", "adressemail@gmail.com", true))
+ .Returns(new UserDto("Nom", "Passssss", "adressemail@gmail.com", true));
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.CreateUser(new UserDto("user", "Passssss", "adressemail@gmail.com", true));
+
+ if (userResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(409, bdObjectResult.StatusCode);
+ }
+ }
+
+ [Fact]
+ public void CreateUserWithExistingUsername()
+ {
+ GetUsersData();
+ _userService.Setup(x => x.CreateUser("Nom", "Passssss", "adressemail@gmail.com", true))
+ .Returns(new UserDto("Nom", "Passssss", "adressemail@gmail.com", true));
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.CreateUser(new UserDto("Useruser", "Passssss", "adressemail@gmail.com", true));
+
+ if (userResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(400, bdObjectResult.StatusCode);
+ }
+ }
+
[Fact]
public void UpdateUserSuccess()
{
@@ -320,6 +471,154 @@ public class UserUnitTest
Assert.Equal(400, bdObjectResult.StatusCode);
}
}
+ [Fact]
+ public void UpdateUserFailWithExistingUsername()
+ {
+ _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true);
+ _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false);
+ _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true));
+ _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "heudfk@hdye.com", true)))
+ .Returns(new UserDto("Useruser", "Passssss", "heudfk@hdye.com", true));
+
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "heudfk@hdye.com", true));
+
+ if (userResult is StatusCodeResult statusCodeResult)
+ {
+ Assert.Equal(409, statusCodeResult.StatusCode);
+ }
+ }
+ [Fact]
+ public void UpdateUserFailWithExistingEmail()
+ {
+ _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false);
+ _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true);
+ _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true));
+ _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "adressemail@gmail.com", true)))
+ .Returns(new UserDto("Test1234", "Passssss", "adressemail@gmail.com", true));
+
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "adressemail@gmail.com", true));
+
+ if (userResult is StatusCodeResult statusCodeResult)
+ {
+ Assert.Equal(409, statusCodeResult.StatusCode);
+ }
+ }
+ [Fact]
+ public void UpdateUserFailWithExistingEmailAndExistingUsername()
+ {
+ _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true);
+ _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true);
+ _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true));
+ _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "adressemail@gmail.com", true)))
+ .Returns(new UserDto("Useruser", "Passssss", "adressemail@gmail.com", true));
+
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "adressemail@gmail.com", true));
+
+ if (userResult is StatusCodeResult statusCodeResult)
+ {
+ Assert.Equal(409, statusCodeResult.StatusCode);
+ }
+ }
+ [Fact]
+ public void UpdateUserSucessWithSameEmail()
+ {
+ _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false);
+ _userService.Setup(x => x.IsEmailTaken("deuxadresse@gmail.com")).Returns(true);
+ _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true));
+ _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "deuxadresse@gmail.com", true)))
+ .Returns(new UserDto("Test1234", "Passssss", "deuxadresse@gmail.com", true));
+
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "deuxadresse@gmail.com", true));
+ if (userResult is OkObjectResult okObjectResult)
+ {
+ UserDto valeur = okObjectResult.Value as UserDto;
+
+ Assert.NotNull(valeur);
+ Assert.Equal("Test1234", valeur.Username);
+ Assert.Equal("Passssss", valeur.Password);
+ Assert.Equal("deuxadresse@gmail.com", valeur.Email);
+ Assert.True(valeur.IsAdmin);
+ }
+ }
+ [Fact]
+ public void UpdateUserSucessWithSameUsername()
+ {
+ _userService.Setup(x => x.IsUsernameTaken("Leuser")).Returns(true);
+ _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false);
+ _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true));
+ _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "heudfk@hdye.com", true)))
+ .Returns(new UserDto("Leuser", "Passssss", "heudfk@hdye.com", true));
+
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.UpdateUser(1, new UserDto(1,"Leuser", "Passssss", "heudfk@hdye.com", true));
+ if (userResult is OkObjectResult okObjectResult)
+ {
+ UserDto valeur = okObjectResult.Value as UserDto;
+
+ Assert.NotNull(valeur);
+ Assert.Equal("Leuser", valeur.Username);
+ Assert.Equal("Passssss", valeur.Password);
+ Assert.Equal("heudfk@hdye.com", valeur.Email);
+ Assert.True(valeur.IsAdmin);
+ }
+ }
+
+
+ [Fact]
+ public void PromoteUserSuccess()
+ {
+ _userService.Setup(x => x.PromoteUser(1))
+ .Returns(new UserDto(
+ 1,
+ "Leuser",
+ "motdepasse",
+ "deuxadresse@gmail.com",
+ true
+ ));
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.PromoteUser(1);
+ if (userResult is OkObjectResult okObjectResult)
+ {
+ UserDto valeur = okObjectResult.Value as UserDto;
+
+ Assert.NotNull(valeur);
+ Assert.Equal("Leuser", valeur.Username);
+ Assert.Equal("motdepasse", valeur.Password);
+ Assert.Equal("deuxadresse@gmail.com", valeur.Email);
+ Assert.True(valeur.IsAdmin);
+ }
+ }
+
+ [Fact]
+ public void PromoteUserFail()
+ {
+ _userService.Setup(x => x.PromoteUser(1))
+ .Returns(new UserDto(
+ 1,
+ "Leuser",
+ "motdepasse",
+ "deuxadresse@gmail.com",
+ true
+ ));
+ var usersController = new UsersController(new NullLogger(), _userService.Object);
+
+ var userResult = usersController.PromoteUser(356262);
+
+ if (userResult is BadRequestResult bdObjectResult)
+ {
+ Assert.Equal(404, bdObjectResult.StatusCode);
+ }
+ }
private List GetUsersData()
{
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 e4bbe1c..08a8329 100644
--- a/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs
+++ b/API_SQLuedo/TestEF/Service/TestBlackListDataService.cs
@@ -26,24 +26,24 @@ public class TestBlackListDataService
[Fact]
public void BanUser_Success()
{
- _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example@email.com", Password = "password", IsAdmin = true });
- _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example@email.com", Password = "password", IsAdmin = false });
- _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test3", Email = "example@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test101", Email = "example101@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test102", Email = "example102@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test103", Email = "example103@email.com", Password = "password", IsAdmin = true });
_dbContext.SaveChanges();
- var banResult = _blackListDataService.BanUser("Test1");
+ var banResult = _blackListDataService.BanUser("Test101");
Assert.True(banResult);
}
[Fact]
public void GetNbBannedUsers()
{
- _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example1@email.com", Password = "password", IsAdmin = true });
- _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example2@email.com", Password = "password", IsAdmin = false });
- _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test3", Email = "example3@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test61", Email = "example61@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test62", Email = "example62@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test63", Email = "example63@email.com", Password = "password", IsAdmin = true });
_dbContext.SaveChanges();
- var banResult1 = _blackListDataService.BanUser("Test1");
- var banResult2 = _blackListDataService.BanUser("Test2");
- var banResult3 = _blackListDataService.BanUser("Test3");
+ var banResult1 = _blackListDataService.BanUser("Test61");
+ var banResult2 = _blackListDataService.BanUser("Test62");
+ var banResult3 = _blackListDataService.BanUser("Test63");
Assert.True(banResult1);
Assert.True(banResult2);
Assert.True(banResult3);
@@ -53,9 +53,9 @@ public class TestBlackListDataService
[Fact]
public void BanUser_Fail()
{
- _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example@email.com", Password = "password", IsAdmin = true });
- _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example@email.com", Password = "password", IsAdmin = false });
- _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test3", Email = "example@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test71", Email = "example71@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test72", Email = "example72@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test73", Email = "example73@email.com", Password = "password", IsAdmin = true });
_dbContext.SaveChanges();
var banResult = _blackListDataService.BanUser("Test42");
Assert.False(banResult);
@@ -64,24 +64,105 @@ public class TestBlackListDataService
[Fact]
public void IsBanned_Success()
{
- _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example1@email.com", Password = "password", IsAdmin = true });
- _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example@email.com", Password = "password", IsAdmin = false });
- _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test3", Email = "example@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test81", Email = "example81@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test82", Email = "example82@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test83", Email = "example83@email.com", Password = "password", IsAdmin = true });
_dbContext.SaveChanges();
- var banResult = _blackListDataService.BanUser("Test1");
+ var banResult = _blackListDataService.BanUser("Test81");
Assert.True(banResult);
- Assert.NotNull(_blackListDataService.GetUserBannedByEmail("example1@email.com"));
+ Assert.NotNull(_blackListDataService.GetUserBannedByEmail("example81@email.com"));
}
[Fact]
public void UnbanUser_Success()
{
- _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example1@email.com", Password = "password", IsAdmin = true });
- _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example@email.com", Password = "password", IsAdmin = false });
- _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test3", Email = "example@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test91", Email = "example91@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test92", Email = "example92@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test93", Email = "example93@email.com", Password = "password", IsAdmin = true });
_dbContext.SaveChanges();
- var banResult = _blackListDataService.BanUser("Test1");
+ var banResult = _blackListDataService.BanUser("Test91");
Assert.True(banResult);
- Assert.True(_blackListDataService.UnbanUser("example1@email.com"));
+ Assert.True(_blackListDataService.UnbanUser("example91@email.com"));
+ }
+
+ [Fact]
+ public void UnbanUser_Fail_Cause_Email_Null()
+ {
+ _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test91", Email = "example91@email.com", Password = "password", IsAdmin = true });
+ _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test92", Email = "example92@email.com", Password = "password", IsAdmin = false });
+ _dbContext.Users.Add(new UserEntity() { Id = 3, Username = "Test93", Email = "example93@email.com", Password = "password", IsAdmin = true });
+ _dbContext.SaveChanges();
+ var banResult = _blackListDataService.BanUser("Test91");
+ Assert.True(banResult);
+ Assert.False(_blackListDataService.UnbanUser(null));
+ }
+
+ [Fact]
+ public void GetNumberOfBanned_Success()
+ {
+ _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.GetNumberOfBannedUsers();
+ Assert.Equal(3,banResult);
+ }
+
+ [Fact]
+ 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) });
+ _dbContext.BlackLists.Add(new BlackListEntity { Email = "eeemail@email.com", ExpirationDate = new DateOnly(2024, 03, 30) });
+ _dbContext.SaveChanges();
+ var banResult = _blackListDataService.GetBannedUsers(1,3,0);
+ 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()
+ {
+ _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, 0);
+ Assert.Equal(3, banResult.Count());
}
}
\ No newline at end of file
diff --git a/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs b/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
index 1a6fb96..2a64386 100644
--- a/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
+++ b/API_SQLuedo/TestEF/Service/TestInquiryDataService.cs
@@ -37,6 +37,19 @@ public class TestInquiryDataService
Assert.Equal(2, result.Count());
}
+ [Fact]
+ public void GetNumberOfInquiries()
+ {
+ _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.GetNumberOfInquiries();
+
+ Assert.Equal(3, result);
+ }
+
[Fact]
public void GetInquiries_OrderedByTitle_ReturnsCorrectNumberOfInquiries()
{
@@ -76,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()
{
diff --git a/API_SQLuedo/TestEF/Service/TestInquiryTableDataService.cs b/API_SQLuedo/TestEF/Service/TestInquiryTableDataService.cs
new file mode 100644
index 0000000..63ed0cf
--- /dev/null
+++ b/API_SQLuedo/TestEF/Service/TestInquiryTableDataService.cs
@@ -0,0 +1,62 @@
+using DbContextLib;
+using DbDataManager.Service;
+using Entities;
+using Microsoft.Data.Sqlite;
+using Microsoft.EntityFrameworkCore;
+
+namespace TestEF.Service;
+
+public class TestInquiryTableDataService
+{
+ private readonly UserDbContext _dbContext;
+ private readonly InquiryTableDataService _inquiryTableDataService;
+
+ public TestInquiryTableDataService()
+ {
+ var connection = new SqliteConnection("DataSource=:memory:");
+ connection.Open();
+ var options = new DbContextOptionsBuilder()
+ .UseSqlite(connection)
+ .Options;
+
+ _dbContext = new UserDbContext(options);
+ _inquiryTableDataService = new InquiryTableDataService(_dbContext);
+ }
+
+ [Fact]
+ public void GetDatabaseFromInquiryId_Success()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity
+ { Id = 42, Title = "Titre", Description = "Description", IsUser = false });
+ var inquiryTable = new InquiryTableEntity()
+ {
+ OwnerId = 42,
+ DatabaseName = "Database",
+ ConnectionInfo = "ConnectionString"
+ };
+ _dbContext.InquiryTables.Add(inquiryTable);
+ _dbContext.SaveChanges();
+ var result = _inquiryTableDataService.GetDatabaseNameByInquiryId(42);
+ Assert.Equal("Database",result);
+ }
+
+ [Fact]
+ public void GetSolution_NotFound()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity
+ { Id = 42, Title = "Titre", Description = "Description", IsUser = false });
+ var inquiryTable = new InquiryTableEntity()
+ {
+ OwnerId = 42,
+ DatabaseName = "Database",
+ ConnectionInfo = "ConnectionString"
+ };
+ _dbContext.InquiryTables.Add(inquiryTable);
+ _dbContext.SaveChanges();
+
+ Assert.Throws(() =>
+ {
+ _inquiryTableDataService.GetDatabaseNameByInquiryId(10);
+ });
+ }
+}
\ No newline at end of file
diff --git a/API_SQLuedo/TestEF/Service/TestNotepadDataService.cs b/API_SQLuedo/TestEF/Service/TestNotepadDataService.cs
new file mode 100644
index 0000000..f67a561
--- /dev/null
+++ b/API_SQLuedo/TestEF/Service/TestNotepadDataService.cs
@@ -0,0 +1,169 @@
+using DbContextLib;
+using DbDataManager.Service;
+using Entities;
+using Microsoft.Data.Sqlite;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure.Internal;
+using Model.OrderCriteria;
+
+namespace TestEF.Service;
+
+public class TestNotepadDataService
+{
+ private readonly UserDbContext _dbContext;
+ private readonly NotepadDataService _notepadDataService;
+
+ public TestNotepadDataService()
+ {
+ var connection = new SqliteConnection("DataSource=:memory:");
+ connection.Open();
+ var options = new DbContextOptionsBuilder()
+ .UseSqlite(connection)
+ .Options;
+
+ _dbContext = new UserDbContext(options);
+ _notepadDataService = new NotepadDataService(_dbContext);
+ }
+
+ [Fact]
+ public void GetNotepad_Success()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity
+ { Id = 42, Title = "Titre", Description = "Descritpion", IsUser = false });
+ _dbContext.Users.Add(new UserEntity
+ { Id = 42, Username = "Username", Email = "email@example.com", Password = "password", IsAdmin = true });
+ var notepad = new NotepadEntity { UserId = 42, InquiryId = 42, Notes = "These are some notes" };
+ _dbContext.Notepads.Add(notepad);
+ _dbContext.SaveChanges();
+
+ var result = _notepadDataService.GetNotepadFromUserAndInquiryId(42, 42);
+
+ Assert.Equal(notepad,result);
+ }
+
+ [Fact]
+ public void GetNotepad_Fail_UserNotFound()
+ {
+ _dbContext.Inquiries.Add(new InquiryEntity
+ { Id = 42, Title = "Titre", Description = "Descritpion", IsUser = false });
+ _dbContext.Users.Add(new UserEntity
+ { Id = 42, Username = "Username", Email = "email@example.com", Password = "password", IsAdmin = true });
+ var notepad = new NotepadEntity { UserId = 42, InquiryId = 42, Notes = "These are some notes" };
+ _dbContext.Notepads.Add(notepad);
+ _dbContext.SaveChanges();
+ Assert.Throws