Merge branch 'master' of https://codefirst.iut.uca.fr/git/Verax/Verax_API_EF
continuous-integration/drone/push Build is failing Details

testTony
Louis LABORIE 1 year ago
commit db2aa4551d

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="" />
</component>
</project>

@ -11,22 +11,24 @@ namespace API.Controllers
public class ArticleController : ControllerBase
{
private readonly IArticleService _articleService;
//private readonly IArticleService _articleService;
private readonly IDataManager _dataManager;
private readonly ILogger<ArticleController> _logger;
public ArticleController(IArticleService articleService, ILogger<ArticleController> logger)
public ArticleController(IDataManager dataManager, ILogger<ArticleController> logger)
{
this._articleService = articleService;
this._dataManager = dataManager;
this._logger = logger;
}
[Route("/articles")]
[HttpGet]
public async Task<IActionResult> GetAllArticles([FromQuery] int index = 0, [FromQuery] int count = 10, [FromQuery] ArticleOrderCriteria orderCriterium = ArticleOrderCriteria.None)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetAllArticles), index, count, orderCriterium);
try
{
var result = (await _articleService.GetAllArticles(index, count, orderCriterium)).Select(a => a.ToDTO());
var result = (await _dataManager.ArticleService.GetAllArticles(index, count, orderCriterium)).Select(a => a.ToDTO());
if (result == null)
{
return NotFound();
@ -46,7 +48,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetArticleById), id);
try
{
var result = (await _articleService.GetArticleById(id)).ToDTO();
var result = (await _dataManager.ArticleService.GetArticleById(id)).ToDTO();
if (result == null)
{
return NotFound($"Article ID {id} not found");
@ -68,7 +70,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(CreateArticle), article);
try
{
var result = (await _articleService.CreateArticle(article)).ToDTO();
var result = (await _dataManager.ArticleService.CreateArticle(article)).ToDTO();
if (result == null)
{
return BadRequest($"Article not created");
@ -88,7 +90,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(DeleteArticle), id);
try
{
var result = await _articleService.DeleteArticle(id);
var result = await _dataManager.ArticleService.DeleteArticle(id);
if (result == null)
{
return NotFound($"Article ID {id} not found");
@ -108,8 +110,8 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(UpdateArticle), id, a);
try
{
var result = await _articleService.UpdateArticle(id, a);
if (result == false)
var result = (await _dataManager.ArticleService.UpdateArticle(id, a)).ToDTO();
if (result == null)
{
return NotFound($"Article ID {id} not found");
}

@ -1,121 +0,0 @@
using API_Services;
using Entities;
using Microsoft.AspNetCore.Mvc;
namespace API.Controllers;
[Route("api/[controller]")]
[ApiController]
public class ArticleUserController : ControllerBase
{
private readonly IArticleUserService _us;
private readonly ILogger<ArticleUserController> _logger;
public ArticleUserController(IArticleUserService us, ILogger<ArticleUserController> logger)
{
this._us = us;
this._logger = logger;
}
[HttpGet("/articleUsers")]
public async Task<IActionResult> GetAllArticleUsers()
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetAllArticleUsers), "");
try
{
var result = await _us.GetAllArticleUsers();
if (result == null)
{
return NoContent();
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpGet("/user/{pseudo}/article")]
public async Task<IActionResult> GetArticleUser(string pseudo)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetArticleUser), pseudo);
try
{
var result = await _us.GetArticleUser(pseudo);
if (result == null)
{
return NoContent();
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpPost("/user/{pseudo}/article")]
public async Task<IActionResult> CreateArticleUser(ArticleUserEntity articleUser)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(CreateArticleUser), articleUser);
try
{
var result = await _us.CreateArticleUser(articleUser);
if (result == null)
{
return BadRequest($"ArticleUser {articleUser.UserEntityPseudo} already exists");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpDelete("/user/{pseudo}/article")]
public async Task<IActionResult> DeleteArticleUser(string pseudo)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(DeleteArticleUser), pseudo);
try
{
var result = await _us.DeleteArticleUser(pseudo);
if (!result)
{
return BadRequest($"ArticleUser {pseudo} does not exist");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpPut("/user/{pseudo}/article")]
public async Task<IActionResult> UpdateArticleUser(ArticleUserEntity articleUser)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(UpdateArticleUser), articleUser);
try
{
var result = await _us.UpdateArticleUser(articleUser);
if (!result)
{
return BadRequest($"ArticleUser {articleUser.UserEntityPseudo} does not exist");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
}

@ -12,12 +12,13 @@ namespace API.Controllers
[ApiController]
public class FormulaireController : ControllerBase
{
private readonly IFormulaireService _form;
//private readonly IFormulaireService _form;
private readonly IDataManager _dataManager;
private readonly ILogger<FormulaireController> _logger;
public FormulaireController(IFormulaireService iform, ILogger<FormulaireController> logger)
public FormulaireController(IDataManager dataManager, ILogger<FormulaireController> logger)
{
this._form = iform;
this._dataManager = dataManager;
this._logger = logger;
}
@ -27,7 +28,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetAllForm), index, count, orderCriteria);
try
{
var result = (await _form.GetAllForm(index, count, orderCriteria)).Select(f => f.ToDTO());
var result = (await _dataManager.FormulaireService.GetAllForm(index, count, orderCriteria)).Select(f => f.ToDTO());
if (result == null)
{
return NotFound($"No form found");
@ -48,7 +49,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetById), id);
try
{
var result = (await _form.GetById(id)).ToDTO();
var result = (await _dataManager.FormulaireService.GetById(id)).ToDTO();
if (result == null)
{
return NotFound($"form ID {id} not found");
@ -70,7 +71,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(CreateForm), formulaire);
try
{
var result = (await _form.CreateForm(formulaire)).ToDTO();
var result = (await _dataManager.FormulaireService.CreateForm(formulaire)).ToDTO();
if (result == null)
{
return BadRequest($"Form Id {formulaire.Id} already exists");
@ -90,8 +91,8 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(DeleteForm), id);
try
{
var result = await _form.DeleteForm(id);
if (result == false)
var result = (await _dataManager.FormulaireService.DeleteForm(id)).ToDTO();
if (result == null)
{
return NotFound($"Form Id {id} not found");
}
@ -111,8 +112,8 @@ namespace API.Controllers
try
{
var result = await _form.UpdateForm(id, formulaire);
if (result == false)
var result = (await _dataManager.FormulaireService.UpdateForm(id, formulaire)).ToDTO();
if (result == null)
{
return NotFound($"form Id {id} not found");
}

@ -12,12 +12,13 @@ namespace API.Controllers
[ApiController]
public class UserController : ControllerBase
{
private readonly IUserService _us;
//private readonly IUserService _us;
private readonly IDataManager _dataManager;
private readonly ILogger<UserController> _logger;
public UserController(IUserService us, ILogger<UserController> logger)
public UserController(IDataManager dataManager, ILogger<UserController> logger)
{
this._us = us;
this._logger = logger;
this._dataManager = dataManager;
}
[HttpGet("/users")]
@ -26,7 +27,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetAll), index, count, orderCriteria);
try
{
var result = (await _us.GetAll(index, count, orderCriteria)).Select(u => u.ToDTO());
var result = (await _dataManager.UserService.GetAll(index, count, orderCriteria)).Select(u => u.ToDTO());
if (result == null)
{
return NotFound($"No user found with the given parameters");
@ -46,7 +47,7 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetByPseudo), pseudo);
try
{
var result = (await _us.GetByPseudo(pseudo)).ToDTO();
var result = (await _dataManager.UserService.GetByPseudo(pseudo)).ToDTO();
if (result == null)
{
return NotFound($"Psuedo {pseudo} not found");
@ -67,8 +68,8 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(Create), user);
try
{
var result = await _us.Create(user);
if (result == false)
var result = (await _dataManager.UserService.Create(user)).ToDTO();
if (result == null)
{
return BadRequest($"User {user.Pseudo} already exists");
}
@ -89,8 +90,8 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(Update), user, pseudo);
try
{
var result = await _us.Update(user,pseudo);
if (result == false)
var result = (await _dataManager.UserService.Update(user, pseudo)).ToDTO();
if (result == null)
{
return NotFound();
}
@ -110,8 +111,8 @@ namespace API.Controllers
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(Delete), pseudo);
try
{
var result = await _us.Delete(pseudo);
if (result == false)
var result = (await _dataManager.UserService.Delete(pseudo)).ToDTO();
if (result == null)
{
return NotFound();
}
@ -124,7 +125,106 @@ namespace API.Controllers
}
}
[HttpGet("/articleUsers")]
public async Task<IActionResult> GetAllArticleUsers()
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetAllArticleUsers), "");
try
{
var result = (await _dataManager.UserService.GetAllArticleUsers()).Select(u => u.ToDTO());
if (result == null)
{
return NoContent();
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpGet("/user/{pseudo}/article")]
public async Task<IActionResult> GetArticleUser(string pseudo)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(GetArticleUser), pseudo);
try
{
var result = (await _dataManager.UserService.GetArticleUser(pseudo)).Select(a => a.ToDTO());
if (result == null)
{
return NoContent();
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpPost("/user/article")]
public async Task<IActionResult> CreateArticleUser(ArticleUserEntity articleUser)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(CreateArticleUser), articleUser);
try
{
Console.WriteLine(articleUser);
var result = await _dataManager.UserService.CreateArticleUser(articleUser);
if (result == null)
{
return BadRequest($"ArticleUser {articleUser.UserEntityPseudo} already exists");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpDelete("/user/{pseudo}/{id}")]
public async Task<IActionResult> DeleteArticleUser(string pseudo, long id)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(DeleteArticleUser), pseudo);
try
{
var result = await _dataManager.UserService.DeleteArticleUser(pseudo, id);
if (!result)
{
return BadRequest($"User {pseudo} or {id} does not exist");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
[HttpPut("/user/{pseudo}/article")]
public async Task<IActionResult> UpdateArticleUser(ArticleUserEntity articleUser)
{
_logger.LogInformation("Executing {Action} - with parameters: {Parameters}",nameof(UpdateArticleUser), articleUser);
try
{
var result = (await _dataManager.UserService.UpdateArticleUser(articleUser));
if (!result)
{
return BadRequest($"ArticleUser {articleUser.UserEntityPseudo} does not exist");
}
return Ok(result);
}
catch (Exception error)
{
_logger.LogError(error.Message);
return BadRequest(error.Message);
}
}
}

@ -2,6 +2,7 @@ using API_Services;
using DbContextLib;
using DbDataManager;
using Microsoft.EntityFrameworkCore;
using Model;
using StubbedContextLib;
var builder = WebApplication.CreateBuilder(args);
@ -20,10 +21,9 @@ builder.Services.AddDbContext<LibraryContext>(options =>
options.UseSqlite("Data Source=Entity_FrameWork.Article.db");
});
builder.Services.AddScoped<IArticleService, DbManagerArticle>();
builder.Services.AddScoped<IUserService, DbManagerUser>();
builder.Services.AddScoped<IFormulaireService, DbManagerFormulaire>();
builder.Services.AddScoped<IArticleUserService, DbManagerArticleUser>();
builder.Services.AddScoped<IDataManager, DbManager>();
var app = builder.Build();
@ -39,8 +39,8 @@ app.MapControllers();
using var scoped = app.Services.CreateScope();
var libraryContext = scoped.ServiceProvider.GetService<LibraryContext>();
libraryContext.Database.EnsureCreated();
//libraryContext.Database.Migrate();
//libraryContext.Database.EnsureCreated();
libraryContext.Database.Migrate();
app.Run();

@ -0,0 +1,34 @@
info: 03/15/2024 16:59:22.173 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*) FROM "sqlite_master" WHERE "name" = '__EFMigrationsHistory' AND "type" = 'table';
info: 03/15/2024 16:59:22.176 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*) FROM "sqlite_master" WHERE "name" = '__EFMigrationsHistory' AND "type" = 'table';
info: 03/15/2024 16:59:22.182 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "MigrationId", "ProductVersion"
FROM "__EFMigrationsHistory"
ORDER BY "MigrationId";
info: 03/15/2024 16:59:22.190 RelationalEventId.MigrationsNotApplied[20405] (Microsoft.EntityFrameworkCore.Migrations)
No migrations were applied. The database is already up to date.
info: 03/15/2024 16:59:30.063 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "a"."Id", "a"."Author", "a"."DatePublished", "a"."Description", "a"."LectureTime", "a"."Title"
FROM "ArticleSet" AS "a"
info: 03/15/2024 17:08:29.557 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*) FROM "sqlite_master" WHERE "name" = '__EFMigrationsHistory' AND "type" = 'table';
info: 03/15/2024 17:08:29.561 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*) FROM "sqlite_master" WHERE "name" = '__EFMigrationsHistory' AND "type" = 'table';
info: 03/15/2024 17:08:29.567 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "MigrationId", "ProductVersion"
FROM "__EFMigrationsHistory"
ORDER BY "MigrationId";
info: 03/15/2024 17:08:29.575 RelationalEventId.MigrationsNotApplied[20405] (Microsoft.EntityFrameworkCore.Migrations)
No migrations were applied. The database is already up to date.
info: 03/15/2024 17:08:33.305 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "a"."Id", "a"."Author", "a"."DatePublished", "a"."Description", "a"."LectureTime", "a"."Title"
FROM "ArticleSet" AS "a"

@ -1,12 +1,30 @@
using API_Services;
using DbContextLib;
using Model;
namespace DbDataManager;
public class DbManager
public class DbManager : IDataManager
{
protected LibraryContext _context;
protected LibraryContext _context { get; set; }
public DbManager()
{
_context = new LibraryContext();
ArticleService = new DbManagerArticle(_context);
UserService = new DbManagerUser(_context);
FormulaireService = new DbManagerFormulaire(_context);
}
public DbManager(LibraryContext context)
{
_context = context;
ArticleService = new DbManagerArticle(_context);
UserService = new DbManagerUser(_context);
FormulaireService = new DbManagerFormulaire(_context);
}
public IArticleService ArticleService { get; set; }
public IUserService UserService { get; set; }
public IFormulaireService FormulaireService { get; set; }
}

@ -11,9 +11,7 @@ public class DbManagerArticle : IArticleService
private readonly LibraryContext _context;
public DbManagerArticle(LibraryContext context)
{
_context = context;
}
=> this._context = context;
public async Task<IEnumerable<Article?>> GetAllArticles(int index, int count, ArticleOrderCriteria orderCriterium)
{
List<Article> articles = new List<Article>();
@ -65,8 +63,8 @@ public class DbManagerArticle : IArticleService
LectureTime = article.LectureTime,
};
_context.ArticleSet.Add(entity);
await _context.SaveChangesAsync();
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Article?>(null);
return entity.ToModel();
}
@ -76,22 +74,25 @@ public class DbManagerArticle : IArticleService
Console.WriteLine(entity);
if (entity == null) return null;
_context.ArticleSet.Remove(entity);
await _context.SaveChangesAsync();
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Article?>(null);
return entity.ToModel();
}
public async Task<bool> UpdateArticle(long id, Article? a)
public async Task<Article?> UpdateArticle(long id, Article? a)
{
var entity = _context.ArticleSet.FirstOrDefault(a => a.Id == id);
if (entity == null) return false;
if (entity == null) return await Task.FromResult<Article?>(null);
entity.Title = a.Title;
entity.Description = a.Description;
entity.Author = a.Author;
entity.DatePublished = a.DatePublished;
entity.LectureTime = a.LectureTime;
await _context.SaveChangesAsync();
return true;
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Article?>(null);
return entity.ToModel();
}
}

@ -1,67 +0,0 @@
using API_Services;
using DbContextLib;
using Entities;
using Model;
namespace DbDataManager;
public class DbManagerArticleUser : IArticleUserService
{
private readonly LibraryContext _context;
public DbManagerArticleUser(LibraryContext context)
{
_context = context;
}
public async Task<IEnumerable<ArticleUserEntity?>> GetAllArticleUsers()
{
var entities = _context.ArticleUserSet.ToList();
if (entities == null) return await Task.FromResult<IEnumerable<ArticleUserEntity?>>(null);
return await Task.FromResult(entities.AsEnumerable());
}
public async Task<ArticleUserEntity?> GetArticleUser(string pseudo)
{
var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(pseudo));
if (entity == null) return await Task.FromResult<ArticleUserEntity?>(null);
return await Task.FromResult(entity);
}
public async Task<ArticleUserEntity?> CreateArticleUser(ArticleUserEntity articleUser)
{
var result = await GetArticleUser(articleUser.UserEntityPseudo);
if (result != null) return await Task.FromResult<ArticleUserEntity?>(null);
var entity = new ArticleUserEntity()
{
ArticleEntityId = articleUser.ArticleEntityId,
UserEntityPseudo = articleUser.UserEntityPseudo
};
if (entity == null) return await Task.FromResult<ArticleUserEntity?>(null);
_context.ArticleUserSet.Add(entity);
await _context.SaveChangesAsync();
return await Task.FromResult(entity);
}
public async Task<bool> DeleteArticleUser(string pseudo)
{
var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(pseudo));
if (entity == null) return await Task.FromResult(false);
_context.ArticleUserSet.Remove(entity);
await _context.SaveChangesAsync();
return await Task.FromResult(true);
}
public async Task<bool> UpdateArticleUser(ArticleUserEntity articleUser)
{
var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(articleUser.UserEntityPseudo));
if (entity == null) return await Task.FromResult(false);
entity.ArticleEntityId = articleUser.ArticleEntityId;
entity.UserEntityPseudo = articleUser.UserEntityPseudo;
await _context.SaveChangesAsync();
return await Task.FromResult(true);
}
}

@ -11,9 +11,7 @@ public class DbManagerFormulaire : IFormulaireService
private readonly LibraryContext _context;
public DbManagerFormulaire(LibraryContext context)
{
_context = context;
}
=> this._context = context;
public async Task<IEnumerable<Formulaire?>> GetAllForm(int index, int count, FormOrderCriteria orderCriteria)
{
@ -61,28 +59,31 @@ public class DbManagerFormulaire : IFormulaireService
};
_context.FormSet.Add(entity);
await _context.SaveChangesAsync();
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Formulaire?>(null);
return entity.ToModel();
}
public async Task<bool> DeleteForm(long id)
public async Task<Formulaire?> DeleteForm(long id)
{
var entity = _context.FormSet.FirstOrDefault(f => f.Id == id);
if (entity == null) return false;
if (entity == null) return Task.FromResult<Formulaire?>(null).Result;
_context.FormSet.Remove(entity);
await _context.SaveChangesAsync();
return true;
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Formulaire?>(null);
return entity.ToModel();
}
public async Task<bool> UpdateForm(long id, Formulaire formulaire)
public async Task<Formulaire?> UpdateForm(long id, Formulaire formulaire)
{
var entity = _context.FormSet.FirstOrDefault(f => f.Id == id);
if (entity == null) return false;
if (entity == null) return Task.FromResult<Formulaire?>(null).Result;
entity.Theme = formulaire.Theme;
entity.DatePublication = formulaire.Date;
entity.Link = formulaire.Lien;
entity.UserEntityPseudo = formulaire.UserPseudo;
await _context.SaveChangesAsync();
return true;
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<Formulaire?>(null);
return entity.ToModel();
}
}

@ -11,9 +11,7 @@ public class DbManagerUser: IUserService
private readonly LibraryContext _context;
public DbManagerUser(LibraryContext context)
{
_context = context;
}
=> this._context = context;
public async Task<IEnumerable<User?>> GetAll(int index, int count, UserOrderCriteria orderCriteria)
{
@ -41,10 +39,11 @@ public class DbManagerUser: IUserService
public async Task<User?> GetByPseudo(string pseudo)
{
var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo);
if (entity == null) return await Task.FromResult<User?>(null);
return await Task.FromResult(entity.ToModel());
}
public async Task<bool> Create(User user)
public async Task<User?> Create(User user)
{
var entity = new UserEntity()
{
@ -56,32 +55,97 @@ public class DbManagerUser: IUserService
Role = user.Role
};
_context.UserSet.Add(entity);
await _context.SaveChangesAsync();
return true;
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<User?>(null);
return await Task.FromResult(entity.ToModel());
}
public async Task<bool> Update(User user, string pseudo)
public async Task<User?> Update(User user, string pseudo)
{
var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo);
if (entity == null) return false;
if (entity == null) return await Task.FromResult<User?>(null);
entity.Mdp = user.Mdp;
entity.Mail = user.Mail;
entity.Role = user.Role;
entity.Prenom = user.Prenom;
entity.Nom = user.Nom;
await _context.SaveChangesAsync();
return true;
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<User?>(null);
return await Task.FromResult(entity.ToModel());
}
public async Task<bool> Delete(string pseudo)
public async Task<User?> Delete(string pseudo)
{
var entity = _context.UserSet.FirstOrDefault(u => u.Pseudo == pseudo);
if (entity == null) return await Task.FromResult(false);
if (entity == null) return await Task.FromResult<User?>(null);
_context.UserSet.Remove(entity);
var result = await _context.SaveChangesAsync();
if (result == 0) return await Task.FromResult<User?>(null);
return await Task.FromResult(entity.ToModel());
}
public async Task<IEnumerable<User?>> GetAllArticleUsers()
{
var entities = _context.ArticleUserSet.ToList();
List<UserEntity> users = new List<UserEntity>();
foreach( var articleUser in entities)
{
var user = _context.UserSet.FirstOrDefault(u => u.Pseudo.Equals(articleUser.UserEntityPseudo));
if (user != null) users.Add(user);
}
if (users == null) return await Task.FromResult<IEnumerable<User?>>(null);
return await Task.FromResult(users.Select(u => u.ToModel()).AsEnumerable());
}
public async Task<IEnumerable<Article?>> GetArticleUser(string pseudo)
{
var entities = _context.ArticleUserSet.Where(a => a.UserEntityPseudo.Equals(pseudo));
List<ArticleEntity> articles = new List<ArticleEntity>();
foreach (var article in entities)
{
var art = _context.ArticleSet.FirstOrDefault(a => a.Id.Equals(article.ArticleEntityId));
if (art != null) articles.Add(art);
}
if (articles == null) return await Task.FromResult<IEnumerable<Article?>>(null);
return await Task.FromResult(articles.Select(a => a.ToModel()).AsEnumerable());
}
public async Task<bool> CreateArticleUser(ArticleUserEntity articleUser)
{
var result = await GetByPseudo(articleUser.UserEntityPseudo);
if (result == null) return await Task.FromResult(false);
var entity = new ArticleUserEntity()
{
ArticleEntityId = articleUser.ArticleEntityId,
UserEntityPseudo = articleUser.UserEntityPseudo
};
if (entity == null) return await Task.FromResult(false);
_context.ArticleUserSet.Add(entity);
await _context.SaveChangesAsync();
return await Task.FromResult(true);
}
public async Task<bool> DeleteArticleUser(string pseudo, long id)
{
var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(pseudo) && a.ArticleEntityId.Equals(id));
if (entity == null) return await Task.FromResult(false);
_context.ArticleUserSet.Remove(entity);
await _context.SaveChangesAsync();
return await Task.FromResult(true);
}
public async Task<bool> UpdateArticleUser(ArticleUserEntity articleUser)
{
var entity = _context.ArticleUserSet.FirstOrDefault(a => a.UserEntityPseudo.Equals(articleUser.UserEntityPseudo));
if (entity == null) return await Task.FromResult(false);
entity.ArticleEntityId = articleUser.ArticleEntityId;
entity.UserEntityPseudo = articleUser.UserEntityPseudo;
await _context.SaveChangesAsync();
return await Task.FromResult(true);
}

@ -5,7 +5,7 @@ namespace API_Mapping;
public static class FormulaireMapping
{
public static FormulaireDTO ToDTO(this Formulaire f) => new()
public static FormulaireDTO ToDTO(this Formulaire? f) => new()
{
Id = f.Id,
Theme = f.Theme,

@ -5,7 +5,7 @@ namespace API_Mapping;
public static class UserMapping
{
public static UserDTO ToDTO(this User u) => new()
public static UserDTO ToDTO(this User? u) => new()
{
Pseudo = u.Pseudo,
Mdp = u.Mdp,

@ -14,7 +14,7 @@ namespace API_Services
Task<Article?> DeleteArticle(long id);
Task<bool> UpdateArticle(long id, Article? a);
Task<Article?> UpdateArticle(long id, Article? a);
}

@ -1,15 +0,0 @@
using Entities;
namespace API_Services;
public interface IArticleUserService
{
Task<IEnumerable<ArticleUserEntity>> GetAllArticleUsers();
Task<ArticleUserEntity?> GetArticleUser(string pseudo);
Task<ArticleUserEntity?> CreateArticleUser(ArticleUserEntity articleUser);
Task<bool> DeleteArticleUser(string pseudo);
Task<bool> UpdateArticleUser(ArticleUserEntity articleUser);
}

@ -0,0 +1,13 @@
namespace Model;
using API_Services;
public interface IDataManager
{
IArticleService ArticleService { get; }
IUserService UserService { get; }
IFormulaireService FormulaireService { get; }
}

@ -12,7 +12,7 @@ public interface IFormulaireService
Task<Formulaire?> CreateForm(Formulaire formulaire);
Task<bool> DeleteForm(long id);
Task<Formulaire?> DeleteForm(long id);
Task<bool> UpdateForm(long id, Formulaire formulaire);
Task<Formulaire?> UpdateForm(long id, Formulaire formulaire);
}

@ -8,10 +8,19 @@ namespace API_Services
Task<IEnumerable<User?>> GetAll(int index, int count, UserOrderCriteria orderCriteria);
Task<User?> GetByPseudo(string pseudo);
Task<bool> Create(User user);
Task<bool> Update(User user, string pseudo);
Task<User?> Create(User user);
Task<User?> Update(User user, string pseudo);
Task<bool> Delete(string pseudo);
Task<User?> Delete(string pseudo);
Task<IEnumerable<User?>> GetAllArticleUsers();
Task<IEnumerable<Article?>> GetArticleUser(string pseudo);
Task<bool> CreateArticleUser(ArticleUserEntity articleUser);
Task<bool> DeleteArticleUser(string pseudo, long id);
Task<bool> UpdateArticleUser(ArticleUserEntity articleUser);

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Entities\Entities.csproj" />
<ProjectReference Include="..\Model\Model.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,427 @@
// See https://aka.ms/new-console-template for more information
using System.Text;
using System.Text.Json;
using Entities;
using Model;
class Tests_Console
{
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
//await TestUser();
await TestFormulaire();
//await TestArticle();
}
private static async Task TestFormulaire()
{
await TestFormulaireGetAll();
//await TestFormulaireGetId();
//await TestFormulaireCreate();
//await TestFormulaireDelete();
//await TestFormulaireUpdate();
}
private static async Task TestUser()
{
//await TestUserGetAll();
//await TestUserGetId();
//await TestUserCreate();
//await TestUserDelete();
//await TestUserUpdate();
//await TestGetAllArticleUser();
//await TestGetArticleByUser();
//await TestCreateArticleUser();
//await TestDeleteArticleUser();
//await TestUpdateArticleUser();
}
static async Task TestArticle()
{
await TestArticleGetId();
await TestArticleCreate();
await TestArticleGetAll();
await TestArticleDelete();
await TestArticleUpdate();
}
static async Task TestArticleGetAll()
{
try
{
var response = await client.GetAsync("http://localhost:5052/api/Article");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestArticleGetId()
{
try
{
var response = await client.GetAsync("http://localhost:5052/article/1");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestArticleCreate()
{
try
{
var article = new Article()
{
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 0
};
var json = JsonSerializer.Serialize(article);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://localhost:5052/article", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestArticleDelete()
{
try
{
var response = await client.DeleteAsync("http://localhost:5052/article/4");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestArticleUpdate()
{
try
{
var article = new Article()
{
Title = "Louis",
Description = "Je",
Author = "T'",
DatePublished = "aime",
LectureTime = 0
};
var json = JsonSerializer.Serialize(article);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync("http://localhost:5052/article/1", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestFormulaireGetAll()
{
try
{
var response = await client.GetAsync("http://localhost:5052/formulaires");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestFormulaireGetId()
{
try
{
var response = await client.GetAsync("http://localhost:5052/formulaire/2");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestFormulaireCreate()
{
try
{
var formulaire = new Formulaire()
{
Theme = "Test",
Date = "Test",
Lien = "Test",
UserPseudo = "Sha"
};
var json = JsonSerializer.Serialize(formulaire);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://localhost:5052/formulaire", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestFormulaireDelete()
{
try
{
var response = await client.DeleteAsync("http://localhost:5052/formulaire/5");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestFormulaireUpdate()
{
try
{
var formulaire = new Formulaire()
{
Theme = "J'",
Date = "aime",
Lien = "Les",
UserPseudo = "Sha"
};
var json = JsonSerializer.Serialize(formulaire);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync("http://localhost:5052/formulaire/4", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUserGetAll()
{
try
{
var response = await client.GetAsync("http://localhost:5052/users");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUserGetId()
{
try
{
var response = await client.GetAsync("http://localhost:5052/user/Sha");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUserCreate()
{
try
{
var user = new User()
{
Pseudo = "J",
Nom = "'",
Prenom = "aime",
Mail = "les",
Mdp = "pieds",
Role = "Admin"
};
var json = JsonSerializer.Serialize(user);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://localhost:5052/user", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUserDelete()
{
try
{
var response = await client.DeleteAsync("http://localhost:5052/user/J");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUserUpdate()
{
try
{
var user = new User()
{
Pseudo = "Sha",
Nom = "J'",
Prenom = "aime",
Mail = "les",
Mdp = "pieds",
Role = "Admin"
};
var json = JsonSerializer.Serialize(user);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync("http://localhost:5052/user/Sha", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestGetAllArticleUser()
{
try
{
var response = await client.GetAsync("http://localhost:5052/ArticleUsers");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestGetArticleByUser()
{
try
{
var response = await client.GetAsync("http://localhost:5052/user/Sha/article");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestCreateArticleUser()
{
try
{
var articleUser = new ArticleUserEntity()
{
ArticleEntityId = 1,
UserEntityPseudo = "Sha"
};
var json = JsonSerializer.Serialize(articleUser);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://localhost:5052/user/article", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestDeleteArticleUser()
{
try
{
var response = await client.DeleteAsync("http://localhost:5052/user/Sha/article");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static async Task TestUpdateArticleUser()
{
try
{
var articleUser = new ArticleUserEntity()
{
ArticleEntityId = 1,
UserEntityPseudo = "Sha"
};
var json = JsonSerializer.Serialize(articleUser);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync("http://localhost:5052/user/Sha/article", data);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}

@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0"/>
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="xunit" Version="2.4.2"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\API_Services\API_Services.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,129 @@
using API_Services;
using Model;
using Moq;
namespace API_Unit_Test;
public class UnitTest_Article
{
[Fact]
public void TestGetArticleById()
{
var mockArticleService = new Mock<IArticleService>();
var expected = new Article()
{
Id = 1,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
};
mockArticleService.Setup(x => x.GetArticleById(1)).ReturnsAsync(expected);
var result = mockArticleService.Object.GetArticleById(1);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestGetAllArticles()
{
var mockArticleService = new Mock<IArticleService>();
var expected = new List<Article>()
{
new Article()
{
Id = 1,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
},
new Article()
{
Id = 2,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
}
};
mockArticleService.Setup(x => x.GetAllArticles(0, 10, ArticleOrderCriteria.None)).ReturnsAsync(expected);
var result = mockArticleService.Object.GetAllArticles(0, 10, ArticleOrderCriteria.None);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestAddArticle()
{
var mockArticleService = new Mock<IArticleService>();
var expected = new Article()
{
Id = 1,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
};
mockArticleService.Setup(x => x.CreateArticle(expected)).ReturnsAsync(expected);
var result = mockArticleService.Object.CreateArticle(expected);
Assert.Equal(expected, result.Result);
}
[Fact]
public void UpdateArticle()
{
var mockArticleService = new Mock<IArticleService>();
var expected = new Article()
{
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
};
mockArticleService.Setup(x => x.CreateArticle(expected));
var result = mockArticleService.Object.CreateArticle(expected);
Assert.Equal(1, result.Id );
var updated = new Article()
{
Title = "Updated Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
};
mockArticleService.Setup(x => x.UpdateArticle(1, updated)).ReturnsAsync(updated);
var resultUpdated = mockArticleService.Object.UpdateArticle(1, updated);
Assert.Equal(updated ,resultUpdated.Result);
}
[Fact]
static void DeletedArticle()
{
var mockArticleService = new Mock<IArticleService>();
var expected = new Article()
{
Id = 1,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
};
mockArticleService.Setup(x => x.CreateArticle(expected)).ReturnsAsync(expected);
var result = mockArticleService.Object.CreateArticle(expected);
Assert.Equal(expected, result.Result);
mockArticleService.Setup(x => x.DeleteArticle(1)).ReturnsAsync(expected);
var resultDeleted = mockArticleService.Object.DeleteArticle(1);
Assert.Equal(expected, result.Result);
}
}

@ -0,0 +1,99 @@
using API_Services;
using Model;
using Moq;
namespace API_Unit_Test;
public class UnitTest_Form
{
[Fact]
public void TestGetAllForm()
{
var mockFormService = new Mock<IFormulaireService>();
var expected = new List<Formulaire>()
{
new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
},
new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
}
};
mockFormService.Setup(x => x.GetAllForm(0, 10, FormOrderCriteria.None)).ReturnsAsync(expected);
var result = mockFormService.Object.GetAllForm(0, 10, FormOrderCriteria.None);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestGetFormById()
{
var mockFormService = new Mock<IFormulaireService>();
var expected = new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
};
mockFormService.Setup(x => x.GetById(1)).ReturnsAsync(expected);
var result = mockFormService.Object.GetById(1);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestCreateForm()
{
var mockFormService = new Mock<IFormulaireService>();
var expected = new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
};
mockFormService.Setup(x => x.CreateForm(expected)).ReturnsAsync(expected);
var result = mockFormService.Object.CreateForm(expected);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestUpdateForm()
{
var mockFormService = new Mock<IFormulaireService>();
var expected = new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
};
mockFormService.Setup(x => x.CreateForm(expected)).ReturnsAsync(expected);
var result = mockFormService.Object.CreateForm(expected);
Assert.Equal(expected, result.Result);
}
[Fact]
public void TestDeleteForm()
{
var mockFormService = new Mock<IFormulaireService>();
var expected = new Formulaire()
{
Lien = "Test",
Theme = "Test",
Date = "Test",
UserPseudo = "Test"
};
mockFormService.Setup(x => x.DeleteForm(1)).ReturnsAsync(expected);
var result = mockFormService.Object.DeleteForm(1);
Assert.Equal(expected, result.Result);
}
}

@ -0,0 +1,215 @@
using API_Services;
using Entities;
using Model;
using Moq;
namespace API_Unit_Test;
public class UnitTest_User
{
[Fact]
static void TestAllUser()
{
var mockUserService = new Mock<IUserService>();
var expected = new List<User>()
{
new User()
{
Pseudo = "Tofgasy",
Prenom = "Tony",
Nom = "Fages",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin"
},
new User()
{
Pseudo = "Blizzard",
Prenom = "Louis",
Nom = "Laborie",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin",
},
};
mockUserService.Setup(x => x.GetAll(0, 10, UserOrderCriteria.None)).ReturnsAsync(expected);
var result = mockUserService.Object.GetAll(0, 10, UserOrderCriteria.None);
Assert.Equal(expected, result.Result);
}
[Fact]
static void TestGetUserByPseudo()
{
var mockUserService = new Mock<IUserService>();
var expected = new User()
{
Pseudo = "Tofgasy",
Prenom = "Tony",
Nom = "Fages",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin"
};
mockUserService.Setup(x => x.GetByPseudo("Tofgasy")).ReturnsAsync(expected);
var result = mockUserService.Object.GetByPseudo("Tofgasy");
Assert.Equal(expected, result.Result);
}
[Fact]
static void TestCreateUser()
{
var mockUserService = new Mock<IUserService>();
var user = new User()
{
Pseudo = "Tofgasy",
Prenom = "Tony",
Nom = "Fages",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin"
};
mockUserService.Setup(x => x.Create(user)).ReturnsAsync(user);
var result = mockUserService.Object.Create(user);
Assert.Equal( user,result.Result);
}
[Fact]
static void TestUpdateUser()
{
var mockUserService = new Mock<IUserService>();
var user = new User()
{
Pseudo = "Tofgasy",
Prenom = "Tonio",
Nom = "Fages",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin"
};
mockUserService.Setup(x => x.Update(user, "Tofgasy")).ReturnsAsync(user);
var result = mockUserService.Object.Update(user, "Tofgasy");
Assert.Equal( user,result.Result);
}
[Fact]
static void TestDeleteUser()
{
var mockUserService = new Mock<IUserService>();
var user = new User()
{
Pseudo = "Tofgasy",
Prenom = "Tonio",
Nom = "Fages",
Mail = "mail@mail.com",
Mdp = "1234",
Role = "Admin"
};
mockUserService.Setup(x => x.Delete("Tofgasy")).ReturnsAsync(user);
var result = mockUserService.Object.Delete("Tofgasy");
Assert.Equal( user,result.Result);
}
[Fact]
static void TestGetAllArticleUsers()
{
var mockUserService = new Mock<IUserService>();
var expected = new List<User>()
{
new User()
{
Pseudo = "Tofgasy",
Prenom = "Tony",
Nom = "Fages",
Mail = "",
Mdp = "",
Role = "",
},
new User()
{
Pseudo = "Blizzard",
Prenom = "Louis",
Nom = "Laborie",
Mail = "",
Mdp = "",
Role = "",
},
};
mockUserService.Setup(x => x.GetAllArticleUsers()).ReturnsAsync(expected);
var result = mockUserService.Object.GetAllArticleUsers();
Assert.Equal(expected, result.Result);
}
[Fact]
static void TestGetArticleUser()
{
var mockUserService = new Mock<IUserService>();
var expected = new List<Article>()
{
new Article()
{
Id = 1,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
},
new Article()
{
Id = 2,
Title = "Test",
Description = "Test",
Author = "Test",
DatePublished = "Test",
LectureTime = 10
}
};
mockUserService.Setup(x => x.GetArticleUser("Tofgasy")).ReturnsAsync(expected);
var result = mockUserService.Object.GetArticleUser("Tofgasy");
Assert.Equal(expected, result.Result);
}
[Fact]
static void TestCreateArticleUser()
{
var mockUserService = new Mock<IUserService>();
var articleUser = new ArticleUserEntity()
{
ArticleEntityId = 1,
UserEntityPseudo = "Tofgasy"
};
mockUserService.Setup(x => x.CreateArticleUser(articleUser)).ReturnsAsync(true);
var result = mockUserService.Object.CreateArticleUser(articleUser);
Assert.True(result.Result);
}
[Fact]
static void TestDeleteArticleUser()
{
var mockUserService = new Mock<IUserService>();
mockUserService.Setup(x => x.DeleteArticleUser("Tofgasy", 1)).ReturnsAsync(true);
var result = mockUserService.Object.DeleteArticleUser("Tofgasy", 1);
Assert.True(result.Result);
}
[Fact]
static void TestUpdateArticleUser()
{
var mockUserService = new Mock<IUserService>();
var articleUser = new ArticleUserEntity()
{
ArticleEntityId = 1,
UserEntityPseudo = "Tofgasy"
};
mockUserService.Setup(x => x.UpdateArticleUser(articleUser)).ReturnsAsync(true);
var result = mockUserService.Object.UpdateArticleUser(articleUser);
Assert.True(result.Result);
}
}

@ -1,28 +1,37 @@
using Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace DbContextLib;
public class LibraryContext : DbContext
{
public LibraryContext()
: base()
{ }
{
}
public LibraryContext(DbContextOptions<LibraryContext> options)
: base(options)
{ }
{
}
public DbSet<ArticleEntity> ArticleSet { get; set; }
public DbSet<UserEntity> UserSet { get; set; }
public DbSet<FormEntity> FormSet { get; set; }
public DbSet<ArticleUserEntity> ArticleUserSet { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.LogTo(message =>
{
using var logFile = new StreamWriter("log.txt", append: true);
logFile.WriteLine(message);
}, LogLevel.Information);
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite($"Data Source=Entity_FrameWork.Article.db");
@ -37,17 +46,17 @@ public class LibraryContext : DbContext
.HasMany(a => a.Users)
.WithMany(a => a.Articles)
.UsingEntity<ArticleUserEntity>();
modelBuilder.Entity<UserEntity>()
.HasMany(u => u.Forms)
.WithOne(f => f.User)
.HasForeignKey(f => f.UserEntityPseudo);
modelBuilder.Entity<FormEntity>()
.HasOne(f => f.User)
.WithMany(u => u.Forms)
.HasForeignKey(f => f.UserEntityPseudo);
/*
modelBuilder.Entity<ArticleEntity>().HasData(
new ArticleEntity
{
@ -76,7 +85,7 @@ public class LibraryContext : DbContext
Description = "M&M's new recipe is out and it's the best chocolate ever",
DatePublished = "2022-02-06",
LectureTime = 1,
Author = "M&M's Red"
Author = "M&M's Red"
}
);
@ -103,7 +112,7 @@ public class LibraryContext : DbContext
Nom = "Sillard", Prenom = "Noa", Pseudo = "NoaSil", Mail = "", Mdp = "1234", Role = "Admin"
}
);
modelBuilder.Entity<ArticleUserEntity>().HasData(
new ArticleUserEntity
{
@ -131,11 +140,11 @@ public class LibraryContext : DbContext
UserEntityPseudo = "TomS"
}
);
modelBuilder.Entity<FormEntity>().HasData(
new FormEntity
{
Id = 1,
Id = 1,
DatePublication = "Form 1 Description",
Link = "hhtp://form1.com",
UserEntityPseudo = "Sha"
@ -155,5 +164,6 @@ public class LibraryContext : DbContext
UserEntityPseudo = "Sha"
}
);
*/
}
}

@ -10,7 +10,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace DbContextLib.Migrations
{
[DbContext(typeof(LibraryContext))]
[Migration("20240311132206_mrg1")]
[Migration("20240312155559_mrg1")]
partial class mrg1
{
/// <inheritdoc />
@ -83,12 +83,12 @@ namespace DbContextLib.Migrations
b.Property<long>("ArticleEntityId")
.HasColumnType("INTEGER");
b.Property<long>("UserEntityId")
.HasColumnType("INTEGER");
b.Property<string>("UserEntityPseudo")
.HasColumnType("TEXT");
b.HasKey("ArticleEntityId", "UserEntityId");
b.HasKey("ArticleEntityId", "UserEntityPseudo");
b.HasIndex("UserEntityId");
b.HasIndex("UserEntityPseudo");
b.ToTable("ArticleUserSet");
@ -96,27 +96,27 @@ namespace DbContextLib.Migrations
new
{
ArticleEntityId = 1L,
UserEntityId = 1L
UserEntityPseudo = "TonyF"
},
new
{
ArticleEntityId = 2L,
UserEntityId = 2L
UserEntityPseudo = "NoaSil"
},
new
{
ArticleEntityId = 3L,
UserEntityId = 3L
UserEntityPseudo = "Sha"
},
new
{
ArticleEntityId = 3L,
UserEntityId = 1L
UserEntityPseudo = "RedM"
},
new
{
ArticleEntityId = 2L,
UserEntityId = 3L
UserEntityPseudo = "TomS"
});
});
@ -134,20 +134,17 @@ namespace DbContextLib.Migrations
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Pseudo")
b.Property<string>("Theme")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Theme")
b.Property<string>("UserEntityPseudo")
.IsRequired()
.HasColumnType("TEXT");
b.Property<long>("UserEntityId")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("UserEntityId");
b.HasIndex("UserEntityPseudo");
b.ToTable("FormSet");
@ -157,35 +154,31 @@ namespace DbContextLib.Migrations
Id = 1L,
DatePublication = "Form 1 Description",
Link = "hhtp://form1.com",
Pseudo = "Form 1",
Theme = "",
UserEntityId = 1L
UserEntityPseudo = "Sha"
},
new
{
Id = 2L,
DatePublication = "Form 2 Description",
Link = "hhtp://form2.com",
Pseudo = "Form 2",
Theme = "",
UserEntityId = 2L
UserEntityPseudo = "Sha"
},
new
{
Id = 3L,
DatePublication = "Form 3 Description",
Link = "hhtp://form3.com",
Pseudo = "Form 3",
Theme = "",
UserEntityId = 3L
UserEntityPseudo = "Sha"
});
});
modelBuilder.Entity("Entities.UserEntity", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Pseudo")
.HasColumnType("TEXT");
b.Property<string>("Mail")
.IsRequired()
@ -203,67 +196,58 @@ namespace DbContextLib.Migrations
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Pseudo")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Role")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasKey("Pseudo");
b.ToTable("UserSet");
b.HasData(
new
{
Id = 1L,
Pseudo = "TonyF",
Mail = "tony@gmail.com",
Mdp = "1234",
Nom = "Fages",
Prenom = "Tony",
Pseudo = "TonyF",
Role = "Admin"
},
new
{
Id = 2L,
Pseudo = "TomS",
Mail = "tom@mail.com",
Mdp = "1234",
Nom = "Smith",
Prenom = "Tom",
Pseudo = "TomS",
Role = "User"
},
new
{
Id = 3L,
Pseudo = "RedM",
Mail = "M&M#mail.com",
Mdp = "1234",
Nom = "M&M's",
Prenom = "Red",
Pseudo = "RedM",
Role = "Modérator"
},
new
{
Id = 4L,
Pseudo = "Sha",
Mail = "ShaCasca@gmail.com",
Mdp = "1234",
Nom = "Cascarra",
Prenom = "Cascarra",
Pseudo = "Sha",
Role = "Admin"
},
new
{
Id = 5L,
Pseudo = "NoaSil",
Mail = "",
Mdp = "1234",
Nom = "Sillard",
Prenom = "Noa",
Pseudo = "NoaSil",
Role = "Admin"
});
});
@ -278,7 +262,7 @@ namespace DbContextLib.Migrations
b.HasOne("Entities.UserEntity", null)
.WithMany()
.HasForeignKey("UserEntityId")
.HasForeignKey("UserEntityPseudo")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
@ -287,7 +271,7 @@ namespace DbContextLib.Migrations
{
b.HasOne("Entities.UserEntity", "User")
.WithMany("Forms")
.HasForeignKey("UserEntityId")
.HasForeignKey("UserEntityPseudo")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

@ -33,8 +33,6 @@ namespace DbContextLib.Migrations
name: "UserSet",
columns: table => new
{
Id = table.Column<long>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Pseudo = table.Column<string>(type: "TEXT", nullable: false),
Mdp = table.Column<string>(type: "TEXT", nullable: false),
Nom = table.Column<string>(type: "TEXT", nullable: false),
@ -44,19 +42,19 @@ namespace DbContextLib.Migrations
},
constraints: table =>
{
table.PrimaryKey("PK_UserSet", x => x.Id);
table.PrimaryKey("PK_UserSet", x => x.Pseudo);
});
migrationBuilder.CreateTable(
name: "ArticleUserSet",
columns: table => new
{
UserEntityId = table.Column<long>(type: "INTEGER", nullable: false),
UserEntityPseudo = table.Column<string>(type: "TEXT", nullable: false),
ArticleEntityId = table.Column<long>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArticleUserSet", x => new { x.ArticleEntityId, x.UserEntityId });
table.PrimaryKey("PK_ArticleUserSet", x => new { x.ArticleEntityId, x.UserEntityPseudo });
table.ForeignKey(
name: "FK_ArticleUserSet_ArticleSet_ArticleEntityId",
column: x => x.ArticleEntityId,
@ -64,10 +62,10 @@ namespace DbContextLib.Migrations
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ArticleUserSet_UserSet_UserEntityId",
column: x => x.UserEntityId,
name: "FK_ArticleUserSet_UserSet_UserEntityPseudo",
column: x => x.UserEntityPseudo,
principalTable: "UserSet",
principalColumn: "Id",
principalColumn: "Pseudo",
onDelete: ReferentialAction.Cascade);
});
@ -80,17 +78,16 @@ namespace DbContextLib.Migrations
Theme = table.Column<string>(type: "TEXT", nullable: false),
DatePublication = table.Column<string>(type: "TEXT", nullable: false),
Link = table.Column<string>(type: "TEXT", nullable: false),
Pseudo = table.Column<string>(type: "TEXT", nullable: false),
UserEntityId = table.Column<long>(type: "INTEGER", nullable: false)
UserEntityPseudo = table.Column<string>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_FormSet", x => x.Id);
table.ForeignKey(
name: "FK_FormSet_UserSet_UserEntityId",
column: x => x.UserEntityId,
name: "FK_FormSet_UserSet_UserEntityPseudo",
column: x => x.UserEntityPseudo,
principalTable: "UserSet",
principalColumn: "Id",
principalColumn: "Pseudo",
onDelete: ReferentialAction.Cascade);
});
@ -106,47 +103,47 @@ namespace DbContextLib.Migrations
migrationBuilder.InsertData(
table: "UserSet",
columns: new[] { "Id", "Mail", "Mdp", "Nom", "Prenom", "Pseudo", "Role" },
columns: new[] { "Pseudo", "Mail", "Mdp", "Nom", "Prenom", "Role" },
values: new object[,]
{
{ 1L, "tony@gmail.com", "1234", "Fages", "Tony", "TonyF", "Admin" },
{ 2L, "tom@mail.com", "1234", "Smith", "Tom", "TomS", "User" },
{ 3L, "M&M#mail.com", "1234", "M&M's", "Red", "RedM", "Modérator" },
{ 4L, "ShaCasca@gmail.com", "1234", "Cascarra", "Cascarra", "Sha", "Admin" },
{ 5L, "", "1234", "Sillard", "Noa", "NoaSil", "Admin" }
{ "NoaSil", "", "1234", "Sillard", "Noa", "Admin" },
{ "RedM", "M&M#mail.com", "1234", "M&M's", "Red", "Modérator" },
{ "Sha", "ShaCasca@gmail.com", "1234", "Cascarra", "Cascarra", "Admin" },
{ "TomS", "tom@mail.com", "1234", "Smith", "Tom", "User" },
{ "TonyF", "tony@gmail.com", "1234", "Fages", "Tony", "Admin" }
});
migrationBuilder.InsertData(
table: "ArticleUserSet",
columns: new[] { "ArticleEntityId", "UserEntityId" },
columns: new[] { "ArticleEntityId", "UserEntityPseudo" },
values: new object[,]
{
{ 1L, 1L },
{ 2L, 2L },
{ 2L, 3L },
{ 3L, 1L },
{ 3L, 3L }
{ 1L, "TonyF" },
{ 2L, "NoaSil" },
{ 2L, "TomS" },
{ 3L, "RedM" },
{ 3L, "Sha" }
});
migrationBuilder.InsertData(
table: "FormSet",
columns: new[] { "Id", "DatePublication", "Link", "Pseudo", "Theme", "UserEntityId" },
columns: new[] { "Id", "DatePublication", "Link", "Theme", "UserEntityPseudo" },
values: new object[,]
{
{ 1L, "Form 1 Description", "hhtp://form1.com", "Form 1", "", 1L },
{ 2L, "Form 2 Description", "hhtp://form2.com", "Form 2", "", 2L },
{ 3L, "Form 3 Description", "hhtp://form3.com", "Form 3", "", 3L }
{ 1L, "Form 1 Description", "hhtp://form1.com", "", "Sha" },
{ 2L, "Form 2 Description", "hhtp://form2.com", "", "Sha" },
{ 3L, "Form 3 Description", "hhtp://form3.com", "", "Sha" }
});
migrationBuilder.CreateIndex(
name: "IX_ArticleUserSet_UserEntityId",
name: "IX_ArticleUserSet_UserEntityPseudo",
table: "ArticleUserSet",
column: "UserEntityId");
column: "UserEntityPseudo");
migrationBuilder.CreateIndex(
name: "IX_FormSet_UserEntityId",
name: "IX_FormSet_UserEntityPseudo",
table: "FormSet",
column: "UserEntityId");
column: "UserEntityPseudo");
}
/// <inheritdoc />

@ -80,12 +80,12 @@ namespace DbContextLib.Migrations
b.Property<long>("ArticleEntityId")
.HasColumnType("INTEGER");
b.Property<long>("UserEntityId")
.HasColumnType("INTEGER");
b.Property<string>("UserEntityPseudo")
.HasColumnType("TEXT");
b.HasKey("ArticleEntityId", "UserEntityId");
b.HasKey("ArticleEntityId", "UserEntityPseudo");
b.HasIndex("UserEntityId");
b.HasIndex("UserEntityPseudo");
b.ToTable("ArticleUserSet");
@ -93,27 +93,27 @@ namespace DbContextLib.Migrations
new
{
ArticleEntityId = 1L,
UserEntityId = 1L
UserEntityPseudo = "TonyF"
},
new
{
ArticleEntityId = 2L,
UserEntityId = 2L
UserEntityPseudo = "NoaSil"
},
new
{
ArticleEntityId = 3L,
UserEntityId = 3L
UserEntityPseudo = "Sha"
},
new
{
ArticleEntityId = 3L,
UserEntityId = 1L
UserEntityPseudo = "RedM"
},
new
{
ArticleEntityId = 2L,
UserEntityId = 3L
UserEntityPseudo = "TomS"
});
});
@ -131,20 +131,17 @@ namespace DbContextLib.Migrations
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Pseudo")
b.Property<string>("Theme")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Theme")
b.Property<string>("UserEntityPseudo")
.IsRequired()
.HasColumnType("TEXT");
b.Property<long>("UserEntityId")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("UserEntityId");
b.HasIndex("UserEntityPseudo");
b.ToTable("FormSet");
@ -154,35 +151,31 @@ namespace DbContextLib.Migrations
Id = 1L,
DatePublication = "Form 1 Description",
Link = "hhtp://form1.com",
Pseudo = "Form 1",
Theme = "",
UserEntityId = 1L
UserEntityPseudo = "Sha"
},
new
{
Id = 2L,
DatePublication = "Form 2 Description",
Link = "hhtp://form2.com",
Pseudo = "Form 2",
Theme = "",
UserEntityId = 2L
UserEntityPseudo = "Sha"
},
new
{
Id = 3L,
DatePublication = "Form 3 Description",
Link = "hhtp://form3.com",
Pseudo = "Form 3",
Theme = "",
UserEntityId = 3L
UserEntityPseudo = "Sha"
});
});
modelBuilder.Entity("Entities.UserEntity", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Pseudo")
.HasColumnType("TEXT");
b.Property<string>("Mail")
.IsRequired()
@ -200,67 +193,58 @@ namespace DbContextLib.Migrations
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Pseudo")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Role")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasKey("Pseudo");
b.ToTable("UserSet");
b.HasData(
new
{
Id = 1L,
Pseudo = "TonyF",
Mail = "tony@gmail.com",
Mdp = "1234",
Nom = "Fages",
Prenom = "Tony",
Pseudo = "TonyF",
Role = "Admin"
},
new
{
Id = 2L,
Pseudo = "TomS",
Mail = "tom@mail.com",
Mdp = "1234",
Nom = "Smith",
Prenom = "Tom",
Pseudo = "TomS",
Role = "User"
},
new
{
Id = 3L,
Pseudo = "RedM",
Mail = "M&M#mail.com",
Mdp = "1234",
Nom = "M&M's",
Prenom = "Red",
Pseudo = "RedM",
Role = "Modérator"
},
new
{
Id = 4L,
Pseudo = "Sha",
Mail = "ShaCasca@gmail.com",
Mdp = "1234",
Nom = "Cascarra",
Prenom = "Cascarra",
Pseudo = "Sha",
Role = "Admin"
},
new
{
Id = 5L,
Pseudo = "NoaSil",
Mail = "",
Mdp = "1234",
Nom = "Sillard",
Prenom = "Noa",
Pseudo = "NoaSil",
Role = "Admin"
});
});
@ -275,7 +259,7 @@ namespace DbContextLib.Migrations
b.HasOne("Entities.UserEntity", null)
.WithMany()
.HasForeignKey("UserEntityId")
.HasForeignKey("UserEntityPseudo")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
@ -284,7 +268,7 @@ namespace DbContextLib.Migrations
{
b.HasOne("Entities.UserEntity", "User")
.WithMany("Forms")
.HasForeignKey("UserEntityId")
.HasForeignKey("UserEntityPseudo")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

@ -2,11 +2,10 @@ using DbContextLib;
using Entities;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Xunit;
namespace Tests;
namespace TestsUnitaires;
public class ArticleDB_Tests
public class TestsArticleEntity
{
[Fact]
public void Add_Test()
@ -21,13 +20,13 @@ public class ArticleDB_Tests
using (var context = new LibraryContext(options))
{
context.Database.EnsureCreated();
ArticleEntity a1 = new ArticleEntity { Id = 1, Title = "Breaking News Elisabeth 2 Died", Description = "The queen of England died today at the age of 95", DatePublished = "2022-02-06", LectureTime = 2, Author = "Tom Smith" };
ArticleEntity a2 = new ArticleEntity { Id = 2, Title = "The new iPhone 15", Description = "The new iPhone 15 is out and it's the best phone ever", DatePublished = "2022-02-06", LectureTime = 3, Author = "Tom Smith" };
ArticleEntity a3 = new ArticleEntity { Id = 3, Title = "M&M's new recipe", Description = "M&M's new recipe is out and it's the best chocolate ever", DatePublished = "2022-02-06", LectureTime = 1, Author = "M&M's Red" };
ArticleEntity a1 = new ArticleEntity { Title = "Breaking News Elisabeth 2 Died", Description = "The queen of England died today at the age of 95", DatePublished = "2022-02-06", LectureTime = 2, Author = "Tom Smith" };
ArticleEntity a2 = new ArticleEntity { Title = "The new iPhone 15", Description = "The new iPhone 15 is out and it's the best phone ever", DatePublished = "2022-02-06", LectureTime = 3, Author = "Tom Smith" };
ArticleEntity a3 = new ArticleEntity { Title = "M&M's new recipe", Description = "M&M's new recipe is out and it's the best chocolate ever", DatePublished = "2022-02-06", LectureTime = 1, Author = "M&M's Red" };
context.Add(a1);
context.Add(a2);
context.Add(a3);
context.ArticleSet.Add(a1);
context.ArticleSet.Add(a2);
context.ArticleSet.Add(a3);
context.SaveChanges();
@ -52,9 +51,9 @@ public class ArticleDB_Tests
ArticleEntity a1 = new ArticleEntity { Id = 1, Title = "Breaking News Elisabeth 2 Died", Description = "The queen of England died today at the age of 95", DatePublished = "2022-02-06", LectureTime = 2, Author = "Tom Smith" };
ArticleEntity a2 = new ArticleEntity { Id = 2, Title = "The new iPhone 15", Description = "The new iPhone 15 is out and it's the best phone ever", DatePublished = "2022-02-06", LectureTime = 3, Author = "Tom Smith" };
ArticleEntity a3 = new ArticleEntity { Id = 3, Title = "M&M's new recipe", Description = "M&M's new recipe is out and it's the best chocolate ever", DatePublished = "2022-02-06", LectureTime = 1, Author = "M&M's Red" };
context.Add(a1);
context.Add(a2);
context.Add(a3);
context.ArticleSet.Add(a1);
context.ArticleSet.Add(a2);
context.ArticleSet.Add(a3);
context.SaveChanges();

@ -0,0 +1,182 @@
using DbContextLib;
using Entities;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
namespace Tests;
public class TestsUserEntity
{
[Fact]
public void Add_Test()
{
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<LibraryContext>()
.UseSqlite(connection)
.Options;
using (var context = new LibraryContext(options))
{
context.Database.EnsureCreated();
UserEntity u1 = new UserEntity
{
Pseudo = "Tofgasy", Prenom = "Tony", Nom = "Fages", Mail = "he@gmail.com", Mdp = "1234", Role = "Admin"
};
UserEntity u2 = new UserEntity
{
Pseudo = "Blizzard", Prenom = "Louis", Nom = "Laborie", Mail = "he@gmail.com", Mdp = "1234",
Role = "Admin"
};
UserEntity u3 = new UserEntity
{
Pseudo = "TomS", Prenom = "Tom", Nom = "Smith", Mail = "TomS@gmail.com", Mdp = "1234", Role = "User"
};
UserEntity u4 = new UserEntity
{
Pseudo = "Siwa", Prenom = "Jean", Nom = "Marcillac", Mail = "occitan@gmail.com", Mdp = "1234",
Role = "Amin"
};
UserEntity u5 = new UserEntity
{
Pseudo = "Sha", Prenom = "Shana", Nom = "Cascarra", Mail = "shacas@gmail.com", Mdp = "1234",
Role = "Modérator"
};
UserEntity u6 = new UserEntity
{
Pseudo = "NoaSil", Prenom = "Noa", Nom = "Sillard", Mail = "noaSillar@gmail.com", Mdp = "1234",
Role = "Admin"
};
context.UserSet.Add(u1);
context.UserSet.Add(u2);
context.UserSet.Add(u3);
context.UserSet.Add(u4);
context.UserSet.Add(u5);
context.UserSet.Add(u6);
context.SaveChanges();
Assert.Equal(6, context.UserSet.Count());
Assert.Equal("Blizzard", context.UserSet.First().Pseudo);
connection.Close();
}
}
[Fact]
public void Modify_Test()
{
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<LibraryContext>()
.UseSqlite(connection)
.Options;
using (var context = new LibraryContext(options))
{
context.Database.EnsureCreated();
UserEntity u1 = new UserEntity
{
Pseudo = "Tofgasy", Prenom = "Tony", Nom = "Fages", Mail = "he@gmail.com", Mdp = "1234", Role = "Admin"
};
UserEntity u2 = new UserEntity
{
Pseudo = "Blizzard", Prenom = "Louis", Nom = "Laborie", Mail = "he@gmail.com", Mdp = "1234",
Role = "Admin"
};
UserEntity u3 = new UserEntity
{
Pseudo = "TomS", Prenom = "Tom", Nom = "Smith", Mail = "TomS@gmail.com", Mdp = "1234", Role = "User"
};
UserEntity u4 = new UserEntity
{
Pseudo = "Siwa", Prenom = "Jean", Nom = "Marcillac", Mail = "occitan@gmail.com", Mdp = "1234",
Role = "Amin"
};
UserEntity u5 = new UserEntity
{
Pseudo = "Sha", Prenom = "Shana", Nom = "Cascarra", Mail = "shacas@gmail.com", Mdp = "1234",
Role = "Modérator"
};
UserEntity u6 = new UserEntity
{
Pseudo = "NoaSil", Prenom = "Noa", Nom = "Sillard", Mail = "noaSillar@gmail.com", Mdp = "1234",
Role = "Admin"
};
context.UserSet.Add(u1);
context.UserSet.Add(u2);
context.UserSet.Add(u3);
context.UserSet.Add(u4);
context.UserSet.Add(u5);
context.UserSet.Add(u6);
context.SaveChanges();
var user = context.UserSet.First(u => u.Pseudo.Equals("Tofgasy"));
user.Prenom = "Tof";
context.SaveChanges();
string persRemove = "Tony";
string persNew = "Tof";
Assert.Equal(1, context.UserSet.Count(u => u.Prenom.Equals(persNew)));
Assert.Equal(0, context.UserSet.Count(u => u.Prenom.Equals(persRemove)));
connection.Close();
}
}
[Fact]
public void Remove_Test()
{
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<LibraryContext>()
.UseSqlite(connection)
.Options;
using (var context = new LibraryContext(options))
{
context.Database.EnsureCreated();
UserEntity u1 = new UserEntity
{
Pseudo = "Tofgasy", Prenom = "Tony", Nom = "Fages", Mail = "he@gmail.com", Mdp = "1234", Role = "Admin"
};
UserEntity u2 = new UserEntity
{
Pseudo = "Blizzard", Prenom = "Louis", Nom = "Laborie", Mail = "he@gmail.com", Mdp = "1234",
Role = "Admin"
};
UserEntity u3 = new UserEntity
{
Pseudo = "TomS", Prenom = "Tom", Nom = "Smith", Mail = "TomS@gmail.com", Mdp = "1234", Role = "User"
};
UserEntity u4 = new UserEntity
{
Pseudo = "Siwa", Prenom = "Jean", Nom = "Marcillac", Mail = "occitan@gmail.com", Mdp = "1234",
Role = "Amin"
};
UserEntity u5 = new UserEntity
{
Pseudo = "Sha", Prenom = "Shana", Nom = "Cascarra", Mail = "shacas@gmail.com", Mdp = "1234",
Role = "Modérator"
};
UserEntity u6 = new UserEntity
{
Pseudo = "NoaSil", Prenom = "Noa", Nom = "Sillard", Mail = "noaSillar@gmail.com", Mdp = "1234",
Role = "Admin"
};
context.UserSet.Add(u1);
context.UserSet.Add(u2);
context.UserSet.Add(u3);
context.UserSet.Add(u4);
context.UserSet.Add(u5);
context.UserSet.Add(u6);
context.SaveChanges();
Assert.Equal(6, context.UserSet.Count());
var user = context.UserSet.First(u => u.Pseudo.Equals("Tofgasy"));
context.Remove(user);
context.SaveChanges();
Assert.Equal(5, context.UserSet.Count());
Assert.Equal(0, context.UserSet.Count(u => u.Pseudo.Equals("Tofgasy")));
connection.Close();
}
}
}

@ -7,6 +7,7 @@
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<RootNamespace>TestsUnitaires</RootNamespace>
</PropertyGroup>
<ItemGroup>

@ -23,7 +23,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "API", "API\API.csproj", "{6AACD337-70A0-429B-979C-1B1E004BF2E0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsUnitaires", "TestsUnitaires\TestsUnitaires.csproj", "{C1982C7C-AE09-4E96-B1A9-B6ADE4097452}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unit_Test_EF", "Unit_Test_EF\Unit_Test_EF.csproj", "{C1982C7C-AE09-4E96-B1A9-B6ADE4097452}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API_Unit_Test", "API_Unit_Test\API_Unit_Test.csproj", "{B3B9C0F5-98A3-438B-A22A-ECFF33DA8F23}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API_Tests_Console", "API_Tests_Console\API_Tests_Console.csproj", "{EEB45245-5B65-4C99-A2B4-942991AE5F1A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -75,6 +79,14 @@ Global
{C1982C7C-AE09-4E96-B1A9-B6ADE4097452}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1982C7C-AE09-4E96-B1A9-B6ADE4097452}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1982C7C-AE09-4E96-B1A9-B6ADE4097452}.Release|Any CPU.Build.0 = Release|Any CPU
{B3B9C0F5-98A3-438B-A22A-ECFF33DA8F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B3B9C0F5-98A3-438B-A22A-ECFF33DA8F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3B9C0F5-98A3-438B-A22A-ECFF33DA8F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3B9C0F5-98A3-438B-A22A-ECFF33DA8F23}.Release|Any CPU.Build.0 = Release|Any CPU
{EEB45245-5B65-4C99-A2B4-942991AE5F1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EEB45245-5B65-4C99-A2B4-942991AE5F1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EEB45245-5B65-4C99-A2B4-942991AE5F1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EEB45245-5B65-4C99-A2B4-942991AE5F1A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -0,0 +1,15 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/modules.xml
/projectSettingsUpdater.xml
/.idea.Verax_API_EF.iml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# GitHub Copilot persisted chat sessions
/copilot/chatSessions

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>
Loading…
Cancel
Save