Merge branch 'Merge_API_EF' of https://codefirst.iut.uca.fr/git/WhatTheFantasy/WF-PmAPI into Merge_API_EF
continuous-integration/drone/push Build is passing Details

pull/6/head
kekentin 3 weeks ago
commit c13a864252

@ -1,82 +1,82 @@
kind: pipeline kind: pipeline
type: docker type: docker
name: CI_ApiPm name: CI_ApiPm
trigger: trigger:
event: event:
- push - push
branch: branch:
exclude: exclude:
- master - master
steps: steps:
- name: retore & build - name: retore & build
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet build --configuration Release - dotnet build WF_EF_Api/WF_EF_Api.sln --configuration Release
depend_on: [clone] depend_on: [clone]
- name: test - name: test
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet test - dotnet test WF_EF_Api/XUnitTest/XUnitTest.csproj
depends_on: [retore & build] depends_on: [retore & build]
- name: publish - name: publish
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet publish -c Release -o out - dotnet publish WF_EF_Api/WfApi/WfApi.csproj -c Release -o out
depends_on: [retore & build, test] depends_on: [retore & build, test]
--- ---
kind: pipeline kind: pipeline
type: docker type: docker
name: CI_ApiPm_Master name: CI_ApiPm_Master
trigger: trigger:
event: event:
- push - push
branch: branch:
- master - master
volumes: volumes:
- name: doc - name: doc
temp: {} temp: {}
steps: steps:
- name: retore & build - name: retore & build
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet build --configuration Release - dotnet build --configuration Release
depend_on: [clone] depend_on: [clone]
- name: test - name: test
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet test - dotnet test
depends_on: [retore & build] depends_on: [retore & build]
- name: generate doc - name: generate doc
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
volumes: volumes:
- name: doc - name: doc
path: /doc path: /doc
commands: commands:
- dotnet new tool-manifest - dotnet new tool-manifest
- dotnet tool install NSwag.ConsoleCore - dotnet tool install NSwag.ConsoleCore
- dotnet restore - dotnet restore
- cd WF_EF_Api/WfApi - cd WF_EF_Api/WfApi
- dotnet nswag aspnetcore2openapi /output:/doc/swagger.json - dotnet nswag aspnetcore2openapi /output:/doc/swagger.json
depends_on: [clone, retore & build] depends_on: [clone, retore & build]
#- name: code-inspection #- name: code-inspection
# image: hub.codefirst.iut.uca.fr/marc.chevaldonne:codefirs-dronsonarplugin-dotnet8 # image: hub.codefirst.iut.uca.fr/marc.chevaldonne:codefirs-dronsonarplugin-dotnet8
# secret: [SECRET_SONAR_LOGIN] # secret: [SECRET_SONAR_LOGIN]
# A FINIR # A FINIR
- name: publish - name: publish
image: mcr.microsoft.com/dotnet/sdk:8.0 image: mcr.microsoft.com/dotnet/sdk:8.0
commands: commands:
- dotnet publish -c Release -o out - dotnet publish -c Release -o out
depends_on: [retore & build, test] depends_on: [retore & build, test]

@ -38,20 +38,28 @@ namespace Contextlib
.Include(q => q.Commentarys) // collection des commentaires est chargée .Include(q => q.Commentarys) // collection des commentaires est chargée
.FirstOrDefaultAsync(q => q.Id == idQuote); .FirstOrDefaultAsync(q => q.Id == idQuote);
var dbU = new DbUsersManager(_context);
var User = await dbU.GetUserByUsername(comment.User.UserName);
if (User == null)
{
throw new ArgumentException("Quote not exist", nameof(comment.User.UserName));
}
if (quote == null) if (quote == null)
{ {
throw new ArgumentException("Quote not exist", nameof(idQuote)); throw new ArgumentException("Quote not exist", nameof(idQuote));
} }
comment.User = User;
comment.IdUser = User.Id;
// Lien entre le commentaire et la citation // Lien entre le commentaire et la citation
comment.Quote = quote; comment.Quote = quote;
comment.IdQuote = idQuote; comment.IdQuote = idQuote;
// Ajout commentaire à la collection des commentaires de la citation // Ajout commentaire à la collection des commentaires de la citation
quote.Commentarys.Add(comment); //_repo.Insert(comment);
_context.Add(comment);
_repo.Insert(comment);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
} }
@ -163,7 +171,13 @@ namespace Contextlib
public async Task RemoveCommentary(int id) public async Task RemoveCommentary(int id)
{ {
_repo.Delete(id);
Commentary? commentary = await GetCommentaryById(id);
if (commentary == null)
{
throw new KeyNotFoundException($"Error : No comment found with the ID: {id}.");
}
_repo.Delete(commentary);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
} }

@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Entity; using Entity;
using Shared; using Shared;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace Contextlib namespace Contextlib
{ {
@ -40,6 +41,12 @@ namespace Contextlib
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async Task<PaginationResult<Source>> GetSomesSource(int page, int count)
{
var srcLst = _repo.GetItems(page, count, []).ToList();
return new PaginationResult<Source>(srcLst.Count, 0, srcLst.Count, srcLst);
}
public async Task<PaginationResult<Source>> GetSourceByDate(int date) public async Task<PaginationResult<Source>> GetSourceByDate(int date)
{ {

@ -53,7 +53,7 @@ namespace Contextlib
.HasMany<Quote>() .HasMany<Quote>()
.WithMany() .WithMany()
.UsingEntity<Commentary>( .UsingEntity<Commentary>(
i => i.HasKey(e => new { e.IdUser, e.IdQuote }) i => i.HasKey(e => e.Id)
); );
modelBuilder.Entity<Commentary>() modelBuilder.Entity<Commentary>()

@ -282,7 +282,9 @@ namespace Dto2Entities
commentary.Id = item.Id; commentary.Id = item.Id;
commentary.DateCommentary = item.Date; commentary.DateCommentary = item.Date;
commentary.Comment = item.Comment; commentary.Comment = item.Comment;
commentary.User = new Users();
commentary.User.UserName = item.User; commentary.User.UserName = item.User;
commentary.User.Images = new Images();
commentary.User.Images.ImgPath = item.ImagePath; commentary.User.Images.ImgPath = item.ImagePath;
return commentary; return commentary;
} }

@ -42,7 +42,14 @@ namespace ServicesApi
public async Task<CommentaryDTO> GetCommentaryById(int id) public async Task<CommentaryDTO> GetCommentaryById(int id)
{ {
return commentaryService.GetCommentaryById(id).Result.ToDto(); try
{
return (await commentaryService.GetCommentaryById(id)).ToDto();
}
catch(KeyNotFoundException)
{
throw new KeyNotFoundException($"No comments found with the given ID: {id}.");
}
} }
public async Task<PaginationResult<CommentaryDTO>> GetCommentaryByQuote(int quoteId, int index, int pageSize) public async Task<PaginationResult<CommentaryDTO>> GetCommentaryByQuote(int quoteId, int index, int pageSize)

@ -36,16 +36,21 @@ namespace ServicesApi
return await srcService.GetLastSourceId(); return await srcService.GetLastSourceId();
} }
public async Task<PaginationResult<SourceDTO>> GetSomesSource(int page, int count)
{
var sources = (await srcService.GetSomesSource(page, count)).items;
return new PaginationResult<SourceDTO>(sources.Count(), page, count, sources.ToDto());
}
public async Task<PaginationResult<SourceDTO>> GetSourceByDate(int date) public async Task<PaginationResult<SourceDTO>> GetSourceByDate(int date)
{ {
var sources = ( await srcService.GetSourceByDate(date)).items; var sources = (await srcService.GetSourceByDate(date)).items;
return new PaginationResult<SourceDTO>(sources.Count(), 0, 10, sources.ToDto()); return new PaginationResult<SourceDTO>(sources.Count(), 0, 10, sources.ToDto());
} }
public async Task<SourceDTO> GetSourceById(int id) public async Task<SourceDTO> GetSourceById(int id)
{ {
return srcService.GetSourceById(id).Result.ToDto(); return (await srcService.GetSourceById(id)).ToDto();
} }
public async Task<SourceDTO> GetSourceByTitle(string title) public async Task<SourceDTO> GetSourceByTitle(string title)

@ -42,5 +42,7 @@ namespace Shared
// Retrieves the unique identifier of the last added source. // Retrieves the unique identifier of the last added source.
Task<int> GetLastSourceId(); Task<int> GetLastSourceId();
Task<PaginationResult<TSource>> GetSomesSource(int page, int count);
} }
} }

File diff suppressed because it is too large Load Diff

@ -1,22 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class migr1 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,126 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class migr5 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsValid",
table: "question",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.CreateTable(
name: "admins",
columns: table => new
{
IdUsers = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_admins", x => x.IdUsers);
table.ForeignKey(
name: "FK_admins_users_UserId",
column: x => x.UserId,
principalTable: "users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 1,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 2,
column: "IsValid",
value: false);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 3,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 4,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 5,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 6,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 7,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 8,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 9,
column: "IsValid",
value: true);
migrationBuilder.UpdateData(
table: "question",
keyColumn: "Id",
keyValue: 10,
column: "IsValid",
value: true);
migrationBuilder.CreateIndex(
name: "IX_admins_UserId",
table: "admins",
column: "UserId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "admins");
migrationBuilder.DropColumn(
name: "IsValid",
table: "question");
}
}
}

@ -1,61 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class suprDailyQuote : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "dailyquotes");
migrationBuilder.UpdateData(
table: "quotes",
keyColumn: "Id",
keyValue: 10,
column: "IsValid",
value: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "dailyquotes",
columns: table => new
{
IdQuote = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_dailyquotes", x => x.IdQuote);
table.ForeignKey(
name: "FK_dailyquotes_quotes_IdQuote",
column: x => x.IdQuote,
principalTable: "quotes",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.InsertData(
table: "dailyquotes",
column: "IdQuote",
values: new object[]
{
1,
5
});
migrationBuilder.UpdateData(
table: "quotes",
keyColumn: "Id",
keyValue: 10,
column: "IsValid",
value: true);
}
}
}

@ -1,32 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class myFirstMigration : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "quotes",
keyColumn: "Id",
keyValue: 10,
column: "IsValid",
value: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "quotes",
keyColumn: "Id",
keyValue: 10,
column: "IsValid",
value: true);
}
}
}

@ -1,22 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class migration204 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

@ -1,22 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class migration1 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

@ -12,8 +12,8 @@ using StubbedContextLib;
namespace StubbedContextLib.Migrations namespace StubbedContextLib.Migrations
{ {
[DbContext(typeof(StubWTFContext))] [DbContext(typeof(StubWTFContext))]
[Migration("20250402105029_migration1")] [Migration("20250402113707_pm_api")]
partial class migration1 partial class pm_api
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)

@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace StubbedContextLib.Migrations namespace StubbedContextLib.Migrations
{ {
/// <inheritdoc /> /// <inheritdoc />
public partial class migrationTest1 : Migration public partial class pm_api : Migration
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder) protected override void Up(MigrationBuilder migrationBuilder)
@ -37,7 +37,8 @@ namespace StubbedContextLib.Migrations
AnswerB = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false), AnswerB = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
AnswerC = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false), AnswerC = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
AnswerD = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false), AnswerD = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
CorrectAnswer = table.Column<string>(type: "nvarchar(1)", maxLength: 1, nullable: false) CorrectAnswer = table.Column<string>(type: "nvarchar(1)", maxLength: 1, nullable: false),
IsValid = table.Column<bool>(type: "bit", nullable: false)
}, },
constraints: table => constraints: table =>
{ {
@ -147,6 +148,25 @@ namespace StubbedContextLib.Migrations
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
}); });
migrationBuilder.CreateTable(
name: "admins",
columns: table => new
{
IdUsers = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_admins", x => x.IdUsers);
table.ForeignKey(
name: "FK_admins_users_UserId",
column: x => x.UserId,
principalTable: "users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "quotes", name: "quotes",
columns: table => new columns: table => new
@ -210,23 +230,6 @@ namespace StubbedContextLib.Migrations
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
}); });
migrationBuilder.CreateTable(
name: "dailyquotes",
columns: table => new
{
IdQuote = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_dailyquotes", x => x.IdQuote);
table.ForeignKey(
name: "FK_dailyquotes_quotes_IdQuote",
column: x => x.IdQuote,
principalTable: "quotes",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "favorites", name: "favorites",
columns: table => new columns: table => new
@ -268,19 +271,19 @@ namespace StubbedContextLib.Migrations
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "question", table: "question",
columns: new[] { "Id", "AnswerA", "AnswerB", "AnswerC", "AnswerD", "CorrectAnswer", "Text" }, columns: new[] { "Id", "AnswerA", "AnswerB", "AnswerC", "AnswerD", "CorrectAnswer", "IsValid", "Text" },
values: new object[,] values: new object[,]
{ {
{ 1, "Gimli", "Aragorn", "Frodon", "Gandalf", "B", "Qui est le leader de la Communauté de l'Anneau ?" }, { 1, "Gimli", "Aragorn", "Frodon", "Gandalf", "B", true, "Qui est le leader de la Communauté de l'Anneau ?" },
{ 2, "Serdaigle", "Gryffondor", "Serpentard", "Poufsouffle", "B", "Dans quelle maison Harry Potter est-il ?" }, { 2, "Serdaigle", "Gryffondor", "Serpentard", "Poufsouffle", "B", false, "Dans quelle maison Harry Potter est-il ?" },
{ 3, "Saroumane", "Sauron", "Gollum", "Gothmog", "B", "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" }, { 3, "Saroumane", "Sauron", "Gollum", "Gothmog", "B", true, "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" },
{ 4, "Han Solo", "Princesse Leia", "Chewbacca", "R2-D2", "A", "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" }, { 4, "Han Solo", "Princesse Leia", "Chewbacca", "R2-D2", "A", true, "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" },
{ 5, "Reine Jadis", "Aslan", "Edmund", "Lucy", "B", "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" }, { 5, "Reine Jadis", "Aslan", "Edmund", "Lucy", "B", true, "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" },
{ 6, "Smaug", "Falkor", "Norbert", "Shenron", "A", "Quel est le nom du dragon dans Le Hobbit ?" }, { 6, "Smaug", "Falkor", "Norbert", "Shenron", "A", true, "Quel est le nom du dragon dans Le Hobbit ?" },
{ 7, "Bella Swan", "Edward Cullen", "Jacob Black", "Victoria", "A", "Qui est la première personne à être mordue par un vampire dans Twilight ?" }, { 7, "Bella Swan", "Edward Cullen", "Jacob Black", "Victoria", "A", true, "Qui est la première personne à être mordue par un vampire dans Twilight ?" },
{ 8, "Obi-Wan Kenobi", "Yoda", "Han Solo", "Luke Skywalker", "A", "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" }, { 8, "Obi-Wan Kenobi", "Yoda", "Han Solo", "Luke Skywalker", "A", true, "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" },
{ 9, "Dr. Ellie Sattler", "Alan Grant", "John Hammond", "Dennis Nedry", "B", "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" }, { 9, "Dr. Ellie Sattler", "Alan Grant", "John Hammond", "Dennis Nedry", "B", true, "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" },
{ 10, "Cersei Lannister", "Arya Stark", "Daenerys Targaryen", "Sansa Stark", "C", "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" } { 10, "Cersei Lannister", "Arya Stark", "Daenerys Targaryen", "Sansa Stark", "C", true, "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" }
}); });
migrationBuilder.InsertData( migrationBuilder.InsertData(
@ -369,7 +372,7 @@ namespace StubbedContextLib.Migrations
{ 7, "Je suis la dernière Targaryen. Je suis la reine des dragons", 7, 3, 1, true, 1, 11025 }, { 7, "Je suis la dernière Targaryen. Je suis la reine des dragons", 7, 3, 1, true, 1, 11025 },
{ 8, "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", 8, 5, 1, true, 1, 11025 }, { 8, "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", 8, 5, 1, true, 1, 11025 },
{ 9, "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", 9, 5, 1, true, 1, 11025 }, { 9, "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", 9, 5, 1, true, 1, 11025 },
{ 10, "La quoi ?", 10, 4, 1, true, 1, 11025 } { 10, "La quoi ?", 10, 4, 1, false, 1, 11025 }
}); });
migrationBuilder.InsertData( migrationBuilder.InsertData(
@ -381,15 +384,6 @@ namespace StubbedContextLib.Migrations
{ 1, 3, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 2 } { 1, 3, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 2 }
}); });
migrationBuilder.InsertData(
table: "dailyquotes",
column: "IdQuote",
values: new object[]
{
1,
5
});
migrationBuilder.InsertData( migrationBuilder.InsertData(
table: "favorites", table: "favorites",
columns: new[] { "IdQuote", "IdUsers" }, columns: new[] { "IdQuote", "IdUsers" },
@ -406,6 +400,11 @@ namespace StubbedContextLib.Migrations
{ 10, 5 } { 10, 5 }
}); });
migrationBuilder.CreateIndex(
name: "IX_admins_UserId",
table: "admins",
column: "UserId");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_characters_IdImage", name: "IX_characters_IdImage",
table: "characters", table: "characters",
@ -456,10 +455,10 @@ namespace StubbedContextLib.Migrations
protected override void Down(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder)
{ {
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "comments"); name: "admins");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "dailyquotes"); name: "comments");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "favorites"); name: "favorites");

@ -12,8 +12,8 @@ using StubbedContextLib;
namespace StubbedContextLib.Migrations namespace StubbedContextLib.Migrations
{ {
[DbContext(typeof(StubWTFContext))] [DbContext(typeof(StubWTFContext))]
[Migration("20250401141906_suprDailyQuote")] [Migration("20250402134601_pm_apiV2")]
partial class suprDailyQuote partial class pm_apiV2
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -130,11 +130,11 @@ namespace StubbedContextLib.Migrations
modelBuilder.Entity("Entity.Commentary", b => modelBuilder.Entity("Entity.Commentary", b =>
{ {
b.Property<int>("IdUser") b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int"); .HasColumnType("int");
b.Property<int>("IdQuote") SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
.HasColumnType("int");
b.Property<string>("Comment") b.Property<string>("Comment")
.IsRequired() .IsRequired()
@ -145,34 +145,36 @@ namespace StubbedContextLib.Migrations
.HasColumnType("date") .HasColumnType("date")
.HasColumnName("DateCommentary"); .HasColumnName("DateCommentary");
b.Property<int>("Id") b.Property<int>("IdQuote")
.ValueGeneratedOnAdd()
.HasColumnType("int"); .HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); b.Property<int>("IdUser")
.HasColumnType("int");
b.HasKey("IdUser", "IdQuote"); b.HasKey("Id");
b.HasIndex("IdQuote"); b.HasIndex("IdQuote");
b.HasIndex("IdUser");
b.ToTable("comments"); b.ToTable("comments");
b.HasData( b.HasData(
new new
{ {
IdUser = 2, Id = 1,
IdQuote = 1,
Comment = "Ce film est le meilleur", Comment = "Ce film est le meilleur",
DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified),
Id = 1 IdQuote = 1,
IdUser = 2
}, },
new new
{ {
IdUser = 3, Id = 2,
IdQuote = 1,
Comment = "Very good", Comment = "Very good",
DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified),
Id = 2 IdQuote = 1,
IdUser = 3
}); });
}); });

@ -0,0 +1,86 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace StubbedContextLib.Migrations
{
/// <inheritdoc />
public partial class pm_apiV2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_comments",
table: "comments");
migrationBuilder.DeleteData(
table: "comments",
keyColumns: new[] { "IdQuote", "IdUser" },
keyValues: new object[] { 1, 2 });
migrationBuilder.DeleteData(
table: "comments",
keyColumns: new[] { "IdQuote", "IdUser" },
keyValues: new object[] { 1, 3 });
migrationBuilder.AddPrimaryKey(
name: "PK_comments",
table: "comments",
column: "Id");
migrationBuilder.InsertData(
table: "comments",
columns: new[] { "Id", "Comment", "DateCommentary", "IdQuote", "IdUser" },
values: new object[,]
{
{ 1, "Ce film est le meilleur", new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 2 },
{ 2, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 3 }
});
migrationBuilder.CreateIndex(
name: "IX_comments_IdUser",
table: "comments",
column: "IdUser");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_comments",
table: "comments");
migrationBuilder.DropIndex(
name: "IX_comments_IdUser",
table: "comments");
migrationBuilder.DeleteData(
table: "comments",
keyColumn: "Id",
keyValue: 1);
migrationBuilder.DeleteData(
table: "comments",
keyColumn: "Id",
keyValue: 2);
migrationBuilder.AddPrimaryKey(
name: "PK_comments",
table: "comments",
columns: new[] { "IdUser", "IdQuote" });
migrationBuilder.InsertData(
table: "comments",
columns: new[] { "IdQuote", "IdUser", "Comment", "DateCommentary", "Id" },
values: new object[,]
{
{ 1, 2, "Ce film est le meilleur", new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), 1 },
{ 1, 3, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 2 }
});
}
}
}

@ -18,4 +18,8 @@
<ProjectReference Include="..\Entity\Entity.csproj" /> <ProjectReference Include="..\Entity\Entity.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Migrations\" />
</ItemGroup>
</Project> </Project>

@ -57,15 +57,17 @@ namespace WfApi.Controllers
return BadRequest(new { message = "Comment data is required." }); return BadRequest(new { message = "Comment data is required." });
} }
var existingCommentary = _commentary.GetCommentaryById(newCommentary.Id).Result; try
if (existingCommentary != null)
{ {
var existingCommentary = await _commentary.GetCommentaryById(newCommentary.Id);
return Conflict(new { message = "A comment with this ID already exists." }); return Conflict(new { message = "A comment with this ID already exists." });
} }
catch (KeyNotFoundException e)
{
await _commentary.AddComment(newCommentary, idQuote);
await _commentary.AddComment(newCommentary, idQuote); return CreatedAtAction(nameof(GetCommentary), new { id = newCommentary.Id }, newCommentary);
}
return CreatedAtAction(nameof(GetCommentary), new { id = newCommentary.Id }, newCommentary);
} }
catch (Exception) catch (Exception)
{ {
@ -89,7 +91,7 @@ namespace WfApi.Controllers
return NotFound(new { message = "Commentary not found." }); return NotFound(new { message = "Commentary not found." });
} }
_commentary.RemoveCommentary(existingCommentary.Id); await _commentary.RemoveCommentary(existingCommentary.Id);
return Ok(new { message = $"Commentary {id} deleted successfully." }); return Ok(new { message = $"Commentary {id} deleted successfully." });
} }

@ -33,13 +33,9 @@ namespace WfApi.Controllers
try try
{ {
var result = await _quote.GetQuoteById(id); var result = await _quote.GetQuoteById(id);
if (result == null)
{
throw new KeyNotFoundException($"Error : No quotes found with the ID: {id}.");
}
if (result!=null) if (result!=null)
{ {
return await Task.FromResult<IActionResult>(Ok(result)); return Ok(result);
} }
else else
{ {

@ -0,0 +1,125 @@
using System.Net;
using DTO;
using Entity;
using Microsoft.AspNetCore.Mvc;
using Shared;
namespace WfApi.Controllers
{
[Route("api/v1/source")]
[ApiController]
public class SourceController : ControllerBase
{
private readonly ISourceService<SourceDTO> _source;
private readonly ILogger<SourceController> _logger;
public SourceController(ISourceService<SourceDTO> sourceService, ILogger<SourceController> logger)
{
_source = sourceService;
_logger = logger;
}
[HttpGet("{id}")] // Indiquer que l'id est dans l'URL
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> GetSource(int id)
{
try
{
var source = await _source.GetSourceById(id);
if(source != null)
{
return Ok(source);
}
else
{
return NoContent();
}
}
catch(Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal Server Error (" + e + ")" });
}
}
[HttpGet("all")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> GetAllSource(int index = 0, int count = 10)
{
try
{
var result = await _source.GetSomesSource(index, count);
if (result != null)
{
return await Task.FromResult<IActionResult>(Ok(result));
}
else
{
return NoContent();
}
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal Server Error (" + e + ")" });
}
}
[HttpPost]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> CreateSource([FromBody] SourceDTO newSource)
{
try
{
if(newSource == null)
{
return BadRequest(new { message = "Source data is required." });
}
try
{
var existingSource = await _source.GetSourceById(newSource.Id);
return Conflict(new { message = "A source with this ID already exists." });
}
catch(KeyNotFoundException e)
{
await _source.AddSource(newSource);
return CreatedAtAction(nameof(GetAllSource), new { id = newSource.Id }, newSource);
}
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal Server Error (" + e + ")" });
}
}
[HttpPut()]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> UpdateSource([FromQuery] int id, [FromBody] SourceDTO updatedSource)
{
try
{
if (updatedSource == null)
{
return BadRequest(new { message = "new source data is required." });
}
var result = _source.UpdateSource(id, updatedSource);
return Ok(result);
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new { message = "Internal Server Error (" + e + ")" });
}
}
}
}

@ -11,272 +11,272 @@ namespace XUnitTest
{ {
public class UnitTest1 public class UnitTest1
{ {
private readonly Mock<IUserService<UserDTO>> _mockUserService; //private readonly Mock<IUserService<UserDTO>> _mockUserService;
private readonly Mock<ILogger<UsersController>> _mockLogger; //private readonly Mock<ILogger<UsersController>> _mockLogger;
private readonly UsersController _userController; //private readonly UsersController _userController;
public UnitTest1() //public UnitTest1()
{ //{
// Initialisation des mocks // // Initialisation des mocks
_mockUserService = new Mock<IUserService<UserDTO>>(); // _mockUserService = new Mock<IUserService<UserDTO>>();
_mockLogger = new Mock<ILogger<UsersController>>(); // _mockLogger = new Mock<ILogger<UsersController>>();
_userController = new UsersController(_mockUserService.Object, _mockLogger.Object); // _userController = new UsersController(_mockUserService.Object, _mockLogger.Object);
} //}
[Fact] //[Fact]
public async Task Get_ReturnsOk_WhenUserExists() //public async Task Get_ReturnsOk_WhenUserExists()
{ //{
// Arrange // // Arrange
var userId = 1; // var userId = 1;
var userDTO = new UserDTO // var userDTO = new UserDTO
{ // {
Id = userId, // Id = userId,
Pseudo = "test", // Pseudo = "test",
Email = "test@unitaire.fr", // Email = "test@unitaire.fr",
ImageProfil = "http://test", // ImageProfil = "http://test",
Password = "1234" // Password = "1234"
}; // };
_mockUserService.Setup(service => service.GetUserById(userId)).ReturnsAsync(userDTO); // _mockUserService.Setup(service => service.GetUserById(userId)).ReturnsAsync(userDTO);
// Act // // Act
var result = await _userController.Get(userId); // var result = await _userController.Get(userId);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetAllUsers_ReturnsOk() //public async Task GetAllUsers_ReturnsOk()
{ //{
// Arrange // // Arrange
var userDTO = new UserDTO // var userDTO = new UserDTO
{ // {
Id = 1, // Id = 1,
Pseudo = "test", // Pseudo = "test",
Email = "test@unitaire.fr", // Email = "test@unitaire.fr",
ImageProfil = "http://test", // ImageProfil = "http://test",
Password = "1234" // Password = "1234"
}; // };
var userDTO2 = new UserDTO // var userDTO2 = new UserDTO
{ // {
Id = 2, // Id = 2,
Pseudo = "test", // Pseudo = "test",
Email = "test@unitaire.fr", // Email = "test@unitaire.fr",
ImageProfil = "http://test", // ImageProfil = "http://test",
Password = "1234" // Password = "1234"
}; // };
_mockUserService.Setup(service => service.GetUserById(1)).ReturnsAsync(userDTO); // _mockUserService.Setup(service => service.GetUserById(1)).ReturnsAsync(userDTO);
_mockUserService.Setup(service => service.GetUserById(2)).ReturnsAsync(userDTO); // _mockUserService.Setup(service => service.GetUserById(2)).ReturnsAsync(userDTO);
// Act // // Act
var result = await _userController.GetAllUsers(); // var result = await _userController.GetAllUsers();
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetHashPassword_ReturnsOk_WhenPasswordHashIsFound() //public async Task GetHashPassword_ReturnsOk_WhenPasswordHashIsFound()
{ //{
// Arrange // // Arrange
var username = "testUser"; // var username = "testUser";
var expectedHash = "hashedPassword"; // var expectedHash = "hashedPassword";
var taskResult = Task.FromResult(expectedHash); // var taskResult = Task.FromResult(expectedHash);
_mockUserService.Setup(service => service.GetHashPassword(username)).Returns(taskResult); // _mockUserService.Setup(service => service.GetHashPassword(username)).Returns(taskResult);
// Act // // Act
var result = await _userController.GetHashPassword(username); // var result = await _userController.GetHashPassword(username);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetUserByUsername_ReturnsOk_WhenPasswordHashIsFound() //public async Task GetUserByUsername_ReturnsOk_WhenPasswordHashIsFound()
{ //{
// Arrange // // Arrange
var username = "testUser"; // var username = "testUser";
var userDTO = new UserDTO // var userDTO = new UserDTO
{ // {
Id = 1, // Id = 1,
Pseudo = "testUser", // Pseudo = "testUser",
Email = "test@unitaire.fr", // Email = "test@unitaire.fr",
ImageProfil = "http://test", // ImageProfil = "http://test",
Password = "1234" // Password = "1234"
}; // };
var taskResult = Task.FromResult(userDTO); // var taskResult = Task.FromResult(userDTO);
_mockUserService.Setup(service => service.GetUserByUsername(username)).Returns(taskResult); // _mockUserService.Setup(service => service.GetUserByUsername(username)).Returns(taskResult);
// Act // // Act
var result = await _userController.GetUserByUsername(username); // var result = await _userController.GetUserByUsername(username);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetUserByEmail_ReturnsOk_WhenUserExists() //public async Task GetUserByEmail_ReturnsOk_WhenUserExists()
{ //{
// Arrange // // Arrange
var email = "test@unitaire.fr"; // var email = "test@unitaire.fr";
var userDTO = new UserDTO // var userDTO = new UserDTO
{ // {
Id = 1, // Id = 1,
Pseudo = "testUser", // Pseudo = "testUser",
Email = email, // Email = email,
ImageProfil = "http://test", // ImageProfil = "http://test",
Password = "1234" // Password = "1234"
}; // };
var taskResult = Task.FromResult(userDTO); // var taskResult = Task.FromResult(userDTO);
_mockUserService.Setup(service => service.GetUserByEmail(email)).Returns(taskResult); // _mockUserService.Setup(service => service.GetUserByEmail(email)).Returns(taskResult);
// Act // // Act
var result = await _userController.GetUserByEmail(email); // var result = await _userController.GetUserByEmail(email);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetCountUser_ReturnsOk_WhenCountIsSuccessful() //public async Task GetCountUser_ReturnsOk_WhenCountIsSuccessful()
{ //{
// Arrange // // Arrange
var expectedCount = 5; // var expectedCount = 5;
var taskResult = Task.FromResult(expectedCount); // var taskResult = Task.FromResult(expectedCount);
_mockUserService.Setup(service => service.CountUser()).Returns(taskResult); // _mockUserService.Setup(service => service.CountUser()).Returns(taskResult);
// Act // // Act
var result = await _userController.GetCountUser(); // var result = await _userController.GetCountUser();
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetExistUsername_ReturnsOk_WhenUserExists() //public async Task GetExistUsername_ReturnsOk_WhenUserExists()
{ //{
// Arrange // // Arrange
var username = "testUser"; // var username = "testUser";
var taskResult = Task.FromResult(true); // var taskResult = Task.FromResult(true);
_mockUserService.Setup(service => service.ExistUsername(username)).Returns(taskResult); // _mockUserService.Setup(service => service.ExistUsername(username)).Returns(taskResult);
// Act // // Act
var result = await _userController.GetExistUsername(username); // var result = await _userController.GetExistUsername(username);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task GetExistEmail_ReturnsOk_WhenEmailExists() //public async Task GetExistEmail_ReturnsOk_WhenEmailExists()
{ //{
// Arrange // // Arrange
var email = "test@unitaire.fr"; // var email = "test@unitaire.fr";
var taskResult = Task.FromResult(true); // var taskResult = Task.FromResult(true);
_mockUserService.Setup(service => service.ExistEmail(email)).Returns(taskResult); // _mockUserService.Setup(service => service.ExistEmail(email)).Returns(taskResult);
// Act // // Act
var result = await _userController.GetExistEmail(email); // var result = await _userController.GetExistEmail(email);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task UpdateUser_ReturnsOk_WhenUserDataIsValid() //public async Task UpdateUser_ReturnsOk_WhenUserDataIsValid()
{ //{
// Arrange // // Arrange
var id = 1; // var id = 1;
var updatedUser = new UserDTO // var updatedUser = new UserDTO
{ // {
Id = id, // Id = id,
Pseudo = "UpdatedUser", // Pseudo = "UpdatedUser",
Email = "updated@unitaire.fr", // Email = "updated@unitaire.fr",
ImageProfil = "http://updatedImage.com", // ImageProfil = "http://updatedImage.com",
Password = "newPassword123" // Password = "newPassword123"
}; // };
var taskResult = Task.FromResult(updatedUser); // var taskResult = Task.FromResult(updatedUser);
_mockUserService.Setup(service => service.UpdateUser(id, updatedUser)).Returns(taskResult); // _mockUserService.Setup(service => service.UpdateUser(id, updatedUser)).Returns(taskResult);
// Act // // Act
var result = await _userController.UpdateUser(id, updatedUser); // var result = await _userController.UpdateUser(id, updatedUser);
// Assert // // Assert
var okResult = Assert.IsType<OkObjectResult>(result); // var okResult = Assert.IsType<OkObjectResult>(result);
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
[Fact] //[Fact]
public async Task CreateUser_ReturnsCreatedAtAction_WhenUserIsValid() //public async Task CreateUser_ReturnsCreatedAtAction_WhenUserIsValid()
{ //{
// Arrange // // Arrange
var newUser = new UserDTO // var newUser = new UserDTO
{ // {
Id = 2, // Id = 2,
Pseudo = "NewUser", // Pseudo = "NewUser",
Email = "newuser@unitaire.fr", // Email = "newuser@unitaire.fr",
ImageProfil = "http://newuserimage.com", // ImageProfil = "http://newuserimage.com",
Password = "newPassword123" // Password = "newPassword123"
}; // };
_mockUserService.Setup(service => service.GetUserById(newUser.Id)).ReturnsAsync((UserDTO)null); // _mockUserService.Setup(service => service.GetUserById(newUser.Id)).ReturnsAsync((UserDTO)null);
_mockUserService.Setup(service => service.AddUser(newUser)).Verifiable(); // _mockUserService.Setup(service => service.AddUser(newUser)).Verifiable();
// Act // // Act
var result = await _userController.CreateUser(newUser); // var result = await _userController.CreateUser(newUser);
// Assert // // Assert
var createdResult = Assert.IsType<CreatedAtActionResult>(result); // var createdResult = Assert.IsType<CreatedAtActionResult>(result);
Assert.Equal(newUser.Id, createdResult.RouteValues["id"]); // Assert.Equal(newUser.Id, createdResult.RouteValues["id"]);
} //}
[Fact] //[Fact]
public async Task DeletePlayer_ReturnsOk_WhenPlayerExists() //public async Task DeletePlayer_ReturnsOk_WhenPlayerExists()
{ //{
// Arrange // // Arrange
var id = 1; // var id = 1;
var existingPlayer = new UserDTO // var existingPlayer = new UserDTO
{ // {
Id = id, // Id = id,
Pseudo = "ExistingUser", // Pseudo = "ExistingUser",
Email = "existing@unitaire.fr", // Email = "existing@unitaire.fr",
ImageProfil = "http://existingimage.com", // ImageProfil = "http://existingimage.com",
Password = "existingPassword123" // Password = "existingPassword123"
}; // };
_mockUserService.Setup(service => service.GetUserById(id)).ReturnsAsync(existingPlayer); // _mockUserService.Setup(service => service.GetUserById(id)).ReturnsAsync(existingPlayer);
_mockUserService.Setup(service => service.RemoveUser(existingPlayer.Id)).Verifiable(); // _mockUserService.Setup(service => service.RemoveUser(existingPlayer.Id)).Verifiable();
// Act // // Act
var result = await _userController.DeletePlayer(id); // var result = await _userController.DeletePlayer(id);
// Assert // // Assert
Assert.IsType<OkObjectResult>(result); // Assert.IsType<OkObjectResult>(result);
} //}
} }

Loading…
Cancel
Save