🧪 Add somes console and unit tests
continuous-integration/drone/push Build is failing Details

tests_merging
Antoine PEREDERII 1 year ago
parent 7cfe9981e2
commit d4176ee17b

@ -43,6 +43,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIMappers", "APIMappers\AP
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestsModel", "Tests\UnitTestsModel\UnitTestsModel.csproj", "{508D380F-145C-437E-A7DF-7A17C526B2F3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestsModel", "Tests\UnitTestsModel\UnitTestsModel.csproj", "{508D380F-145C-437E-A7DF-7A17C526B2F3}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepositoriesUnitTest", "Tests\RepositoriesUnitTest\RepositoriesUnitTest.csproj", "{707B1AC4-F896-4270-BC2F-1A589F48979D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAPIConsoleTests", "Tests\WebAPIConsoleTests\WebAPIConsoleTests.csproj", "{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -121,6 +125,14 @@ Global
{508D380F-145C-437E-A7DF-7A17C526B2F3}.Debug|Any CPU.Build.0 = Debug|Any CPU {508D380F-145C-437E-A7DF-7A17C526B2F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{508D380F-145C-437E-A7DF-7A17C526B2F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {508D380F-145C-437E-A7DF-7A17C526B2F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{508D380F-145C-437E-A7DF-7A17C526B2F3}.Release|Any CPU.Build.0 = Release|Any CPU {508D380F-145C-437E-A7DF-7A17C526B2F3}.Release|Any CPU.Build.0 = Release|Any CPU
{707B1AC4-F896-4270-BC2F-1A589F48979D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{707B1AC4-F896-4270-BC2F-1A589F48979D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{707B1AC4-F896-4270-BC2F-1A589F48979D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{707B1AC4-F896-4270-BC2F-1A589F48979D}.Release|Any CPU.Build.0 = Release|Any CPU
{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -134,6 +146,8 @@ Global
{31FA8E5E-D642-4C43-A2B2-02B9832B2CEC} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18} {31FA8E5E-D642-4C43-A2B2-02B9832B2CEC} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{73EA27F2-9F0C-443F-A5EE-2960C983A422} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18} {73EA27F2-9F0C-443F-A5EE-2960C983A422} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{508D380F-145C-437E-A7DF-7A17C526B2F3} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18} {508D380F-145C-437E-A7DF-7A17C526B2F3} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{707B1AC4-F896-4270-BC2F-1A589F48979D} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{D0EE112F-3151-4C28-A6EC-B1CEC7883FAE} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0F3487F4-66CA-4034-AC66-1BC899C9B523} SolutionGuid = {0F3487F4-66CA-4034-AC66-1BC899C9B523}

@ -9,6 +9,7 @@ public static class EnumMappeur
return value switch return value switch
{ {
"None" => Shared.AthleteOrderCriteria.None, "None" => Shared.AthleteOrderCriteria.None,
"ById" => Shared.AthleteOrderCriteria.ById,
"ByUsername" => Shared.AthleteOrderCriteria.ByUsername, "ByUsername" => Shared.AthleteOrderCriteria.ByUsername,
"ByFirstName" => Shared.AthleteOrderCriteria.ByFirstName, "ByFirstName" => Shared.AthleteOrderCriteria.ByFirstName,
"ByLastName" => Shared.AthleteOrderCriteria.ByLastName, "ByLastName" => Shared.AthleteOrderCriteria.ByLastName,
@ -17,7 +18,7 @@ public static class EnumMappeur
"ByWeight" => Shared.AthleteOrderCriteria.ByWeight, "ByWeight" => Shared.AthleteOrderCriteria.ByWeight,
"ByDateOfBirth" => Shared.AthleteOrderCriteria.ByDateOfBirth, "ByDateOfBirth" => Shared.AthleteOrderCriteria.ByDateOfBirth,
"ByEmail" => Shared.AthleteOrderCriteria.ByEmail, "ByEmail" => Shared.AthleteOrderCriteria.ByEmail,
"ByIsCoach" => Shared.AthleteOrderCriteria.ByIsCoach, "ByIsCoach" => Shared.AthleteOrderCriteria.ByRole,
_ => Shared.AthleteOrderCriteria.None _ => Shared.AthleteOrderCriteria.None
}; };
} }

@ -3,15 +3,16 @@
public enum AthleteOrderCriteria public enum AthleteOrderCriteria
{ {
None, None,
ById,
ByUsername, ByUsername,
ByFirstName, ByFirstName,
ByLastName, ByLastName,
ByEmail,
BySexe, BySexe,
ByLenght, ByLenght,
ByWeight, ByWeight,
ByDateOfBirth, ByDateOfBirth,
ByEmail, ByRole
ByIsCoach
} }
} }

@ -0,0 +1,112 @@
using Xunit;
using Model2Entities;
using Microsoft.EntityFrameworkCore;
using DbContextLib;
using StubbedContextLib;
using System.Linq;
using Microsoft.Data.Sqlite;
using System;
using Shared;
using Model;
using Moq;
using Microsoft.Extensions.Logging;
using Entities;
namespace UnitTestsEntities
{
public class ActivityRepositoryTests : IClassFixture<DatabaseFixture>
{
private readonly DatabaseFixture _fixture;
public ActivityRepositoryTests(DatabaseFixture fixture)
{
_fixture = fixture;
}
[Fact]
public async Task GetActivities_ReturnsActivities()
{
var options = new DbContextOptionsBuilder<HeartTrackContext>()
.UseSqlite(_fixture._connection)
.Options;
using (var context = new HeartTrackContext(options))
{
context.Database.EnsureCreated();
}
using (var context = new HeartTrackContext(options))
{
var repository = new DbDataManager.ActivityRepository(new DbDataManager(context), null);
var activities = await repository.GetActivities(0, 10, ActivityOrderCriteria.None);
Assert.NotNull(activities);
Assert.Equal(10, activities.Count());
}
}
[Fact]
public async Task GetActivityByIdAsync_ReturnsCorrectActivity_WhenIdExists()
{
// Arrange
var activityId = 1;
var expectedActivity = new Activity { Id = activityId, Type = "Running" };
var mockDataManager = new Mock<DbDataManager>();
mockDataManager.Setup(dm => dm.DbContext.ActivitiesSet.SingleOrDefaultAsync(a => a.IdActivity == activityId))
.ReturnsAsync(expectedActivity.ToEntity());
var loggerMock = new Mock<ILogger<DbDataManager>>();
var activityRepository = new DbDataManager.ActivityRepository(mockDataManager.Object, loggerMock.Object);
// Act
var result = await activityRepository.GetActivityByIdAsync(activityId);
// Assert
Assert.NotNull(result);
Assert.Equal(expectedActivity.Id, result.Id);
Assert.Equal(expectedActivity.Type, result.Type);
}
[Fact]
public async Task GetActivityByIdAsync_ReturnsNull_WhenIdDoesNotExist()
{
// Arrange
var activityId = 999;
var mockDataManager = new Mock<DbDataManager>();
mockDataManager.Setup(dm => dm.DbContext.ActivitiesSet.SingleOrDefaultAsync(a => a.IdActivity == activityId))
.ReturnsAsync((ActivityEntity)null);
var loggerMock = new Mock<ILogger<DbDataManager>>();
var activityRepository = new DbDataManager.ActivityRepository(mockDataManager.Object, loggerMock.Object);
// Act
var result = await activityRepository.GetActivityByIdAsync(activityId);
// Assert
Assert.Null(result);
}
[Fact]
public async Task AddActivity_SuccessfullyAddsNewActivity()
{
// Arrange
var newActivity = new Activity { Type = "Walking" };
var mockDataManager = new Mock<DbDataManager>();
mockDataManager.Setup(dm => dm.DbContext.AddItem(It.IsAny<ActivityEntity>()))
.ReturnsAsync(newActivity.ToEntity());
var loggerMock = new Mock<ILogger<DbDataManager>>();
var activityRepository = new DbDataManager.ActivityRepository(mockDataManager.Object, loggerMock.Object);
// Act
var result = await activityRepository.AddActivity(newActivity);
// Assert
Assert.NotNull(result);
Assert.Equal(newActivity.Type, result.Type);
}
}
}

@ -0,0 +1,31 @@
<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="..\..\Model2Entities\Model2Entities.csproj" />
<ProjectReference Include="..\UnitTestsEntities\UnitTestsEntities.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,10 @@
namespace RepositoriesUnitTest;
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}

@ -1 +0,0 @@
global using Microsoft.VisualStudio.TestTools.UnitTesting;

@ -1,26 +0,0 @@
<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="MSTest.TestAdapter" Version="3.0.4"/>
<PackageReference Include="MSTest.TestFramework" Version="3.0.4"/>
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\HeartTrackAPI\HeartTrackAPI.csproj" />
<ProjectReference Include="..\..\Model\Model.csproj" />
<ProjectReference Include="..\..\Shared\Shared.csproj" />
<ProjectReference Include="..\..\StubAPI\StubAPI.csproj" />
</ItemGroup>
</Project>

@ -86,7 +86,6 @@ public class UsersControllerTest
[TestMethod] [TestMethod]
public async Task Get_ReturnsPageResponse_WhenRequestIsValid() public async Task Get_ReturnsPageResponse_WhenRequestIsValid()
{ {
var request = new PageRequest var request = new PageRequest
{ {
Index = 0, Index = 0,
@ -95,11 +94,10 @@ public class UsersControllerTest
Descending = false Descending = false
}; };
// Act
var result = await _usersController.Get(request); var result = await _usersController.Get(request);
Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult)); Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult));
var okResult = result.Result as OkObjectResult; var okResult = result.Result as OkObjectResult;
// Assert
Assert.IsNotNull(okResult); Assert.IsNotNull(okResult);
Assert.IsInstanceOfType(okResult.Value, typeof(PageResponse<UserDto>)); Assert.IsInstanceOfType(okResult.Value, typeof(PageResponse<UserDto>));
var pageResponse = okResult.Value as PageResponse<UserDto>; var pageResponse = okResult.Value as PageResponse<UserDto>;
@ -118,7 +116,6 @@ public class UsersControllerTest
public async Task Get_ReturnsCorrectPaginationAndOrdering(int index, int count, string orderingProperty, public async Task Get_ReturnsCorrectPaginationAndOrdering(int index, int count, string orderingProperty,
bool descending, int expectedItemCount) bool descending, int expectedItemCount)
{ {
var request = new PageRequest var request = new PageRequest
{ {
Index = index, Index = index,
@ -126,11 +123,11 @@ public class UsersControllerTest
OrderingPropertyName = orderingProperty, OrderingPropertyName = orderingProperty,
Descending = descending Descending = descending
}; };
// Act
var result = await _usersController.Get(request); var result = await _usersController.Get(request);
Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult)); Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult));
var okResult = result.Result as OkObjectResult; var okResult = result.Result as OkObjectResult;
// Assert
Assert.IsNotNull(okResult); Assert.IsNotNull(okResult);
Assert.IsInstanceOfType(okResult.Value, typeof(PageResponse<UserDto>)); Assert.IsInstanceOfType(okResult.Value, typeof(PageResponse<UserDto>));
var pageResponse = okResult.Value as PageResponse<UserDto>; var pageResponse = okResult.Value as PageResponse<UserDto>;
@ -157,67 +154,59 @@ public class UsersControllerTest
[TestMethod] [TestMethod]
public async Task GetById_ReturnsUserDto_WhenRequestIsValid() public async Task GetById_ReturnsUserDto_WhenRequestIsValid()
{ {
var id = 1;
_dataManagerMock.Setup(dm => dm.UserRepo.GetItemById(id)).ReturnsAsync(_users.First(x => x.Id == id));
var id = 1; var result = await _usersController.GetById(id) ;
_dataManagerMock.Setup(dm => dm.UserRepo.GetItemById(id)).ReturnsAsync(_users.First(x => x.Id == id)); Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult));
var okResult = result.Result as OkObjectResult;
// Act
var result = await _usersController.GetById(id) ;
Assert.IsInstanceOfType(result.Result, typeof(OkObjectResult));
var okResult = result.Result as OkObjectResult;
// Assert
Assert.IsNotNull(okResult);
var resultObject = result.Result as OkObjectResult;
Assert.IsNotNull(resultObject);
Assert.IsInstanceOfType(resultObject.Value, typeof(UserDto));
var user = resultObject.Value as UserDto;
Assert.IsNotNull(user);
var tmp = _users.First(x => x.Id == id).ToDto();
Assert.AreEqual(tmp.Id, user.Id);
}
[TestMethod] Assert.IsNotNull(okResult);
public async Task GetById_ReturnsUserDto_WhenRequestUserDoesNotExist() var resultObject = result.Result as OkObjectResult;
{ Assert.IsNotNull(resultObject);
Assert.IsInstanceOfType(resultObject.Value, typeof(UserDto));
var user = resultObject.Value as UserDto;
Assert.IsNotNull(user);
var tmp = _users.First(x => x.Id == id).ToDto();
Assert.AreEqual(tmp.Id, user.Id);
}
var id = 0; [TestMethod]
_dataManagerMock.Setup(dm => dm.UserRepo.GetItemById(id)).ReturnsAsync((User)null!); public async Task GetById_ReturnsUserDto_WhenRequestUserDoesNotExist()
{
// Act var id = 0;
var result = await _usersController.GetById(id) ; _dataManagerMock.Setup(dm => dm.UserRepo.GetItemById(id)).ReturnsAsync((User)null!);
// Assert // Act
Assert.IsInstanceOfType(result.Result, typeof(NotFoundObjectResult)); var result = await _usersController.GetById(id) ;
}
// Assert
Assert.IsInstanceOfType(result.Result, typeof(NotFoundObjectResult));
}
[TestMethod]
public async Task GetById_Returns404_WhenIdIsInvalid()
{
var id = -2; [TestMethod]
public async Task GetById_Returns404_WhenIdIsInvalid()
{
var id = -2;
// Act var result = await _usersController.GetById(id);
var result = await _usersController.GetById(id);
// Assert Assert.IsInstanceOfType(result.Result, typeof(NotFoundObjectResult));
Assert.IsInstanceOfType(result.Result, typeof(NotFoundObjectResult)); }
}
[TestMethod] [TestMethod]
public async Task Count_ReturnsInt_WhenRequestIsValid() public async Task Count_ReturnsInt_WhenRequestIsValid()
{ {
// Act
var result = await _usersController.Count(); var result = await _usersController.Count();
Assert.IsNotNull(result); Assert.IsNotNull(result);
result = result.Result as OkObjectResult; result = result.Result as OkObjectResult;
// Assert
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.IsInstanceOfType(result.Value, typeof(int)); Assert.IsInstanceOfType(result.Value, typeof(int));
} }

@ -7,7 +7,7 @@ namespace UnitTestsEntities;
public class DatabaseFixture : IDisposable public class DatabaseFixture : IDisposable
{ {
private readonly SqliteConnection _connection; public readonly SqliteConnection _connection;
public readonly DbContextOptions<HeartTrackContext> _options; public readonly DbContextOptions<HeartTrackContext> _options;
public DatabaseFixture() public DatabaseFixture()
{ {

@ -0,0 +1,110 @@
/*!
* \file BookDataServiceAPI.cs
* \author HeartTeam
* \brief Fichier contenant la classe BookDataServiceAPI.
*/
using System.Diagnostics;
using Dto;
using Model.Repository;
using Shared;
using APIMappers;
/*!
* \brief Implémentation de l'interface IActivityRepository pour récupérer des activités via un service HTTP.
*/
public class ActivityServiceAPI : IActivityRepository
{
private HttpRequest<ActivityDto> myRequest = new HttpRequest<ActivityDto>();
/*!
* \brief Constructeur de la classe ActivityServiceAPI.
* Initialise l'adresse de base du client HTTP.
*/
public ActivityServiceAPI()
{
myRequest.HttpClient.BaseAddress = new Uri("http://localhost:5030/api/v1/Activity/");
}
/*!
* \brief Récupère toutes les Activités de manière asynchrone.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste d'Activity.
*/
public async Task<IEnumerable<Model.Activity>?> GetActivities(int index, int count, ActivityOrderCriteria criteria, bool descending = false)
{
var activityDtos = await myRequest.GetAllAsync();
return activityDtos?.ToModels();
}
/*!
* \brief Récupère les activités par index et compte de manière asynchrone.
* \param index L'index de départ pour la pagination.
* \param count Le nombre d'éléments à récupérer.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste d'Activity.
*/
public async Task<List<Model.Activity>> GetBooksAsync(ActivityOrderCriteria criteria, bool descending, int index, int count)
{
var activityDtos = await myRequest.GetAsync(criteria, descending, index, count);
return (List<Model.Activity>)activityDtos.ToModels();
}
/*!
* \brief Récupère une activité par son identifiant de manière asynchrone.
* \param id L'identifiant du livre à récupérer.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste d'Activity.
*/
public async Task<IEnumerable<Model.Activity>?> GetActivityByIdAsync(int id)
{
var activityDtos = await myRequest.GetByIdAsync(id);
return activityDtos.ToModels();
}
/*!
* \brief Ajoute une activité de manière asynchrone.
* \param activity L'Activity à ajouter.
* \return Une tâche représentant l'opération asynchrone qui retourne l'activité ajouté (Activity).
*/
public async Task<Model.Activity?> AddActivity(Model.Activity activity)
{
return await myRequest.PostAsync(activity.ToDto()).ToModel();
}
/*!
* \brief Met à jour une activité de manière asynchrone.
* \param id L'identifiant de l'activité à mettre à jour.
* \param activity Les nouvelles données de l'activité à mettre à jour.
* \return Une tâche représentant l'opération asynchrone qui retourne l'activité mis à jour (Activity).
*/
public async Task<Model.Activity?> UpdateActivity(int id, Model.Activity activity)
{
var activityDto = activity.ToDto();
var updatedActivityDto = await myRequest.PutAsync(id, activityDto);
return updatedActivityDto?.ToModel();
}
/*!
* \brief Supprime une activité de manière asynchrone.
* \param id L'identifiant de l'activité à supprimer.
* \return Une tâche représentant l'opération asynchrone.
*/
public async Task<bool> DeleteActivity(int id)
{
await myRequest.DeleteAsync(id);
return true;
}
public Task<int> GetNbItems()
{
return myRequest.GetNbItems();
}
public Task<IEnumerable<Model.Activity>?> GetActivitiesByUser(int userId, int index, int count, ActivityOrderCriteria orderCriteria, bool descending = false)
{
return (List<ActivityDto>)myRequest.GetActivitiesByUser(userId, index, count, orderCriteria, descending).ToModels();
}
public Task<int> GetNbActivitiesByUser(int userId)
{
return myRequest.GetNbActivitiesByUser(userId);
}
}

@ -0,0 +1,99 @@
/*!
* \file HttpRequest.cs
* \author Antoine PEREDERII
* \brief Fichier contenant la classe HttpRequest.
*/
using System.Diagnostics;
using System.Net.Http.Json;
using Dto;
using Shared;
/*!
* \brief Classe représentant un client HTTP pour les requêtes vers un service de gestion de livres.
*/
public class HttpRequest<T> where T : class
{
private HttpClient _httpClient { get; } = new HttpClient();
public HttpClient HttpClient => _httpClient;
/*!
* \brief Récupère tous les livres de manière asynchrone.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste de T.
*/
public async Task<List<T>> GetAllAsync()
{
return await _httpClient.GetFromJsonAsync<List<T>>("");
}
/*!
* \brief Récupère les activités par index et compte de manière asynchrone.
* \param index L'index de départ pour la pagination.
* \param count Le nombre d'éléments à récupérer.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste de T.
*/
public async Task<List<T>> GetAsync((ActivityOrderCriteria, AthleteOrderCriteria) criteria, bool descending, int index, int count)
{
return await _httpClient.GetFromJsonAsync<List<T>>($"?OrderingPropertyName={criteria}&Descending={descending}&Index={index}&Count={count}");
}
/*!
* \brief Récupère un livre par son identifiant de manière asynchrone.
* \param id L'identifiant du livre à récupérer.
* \return Une tâche représentant l'opération asynchrone qui retourne une liste de T.
*/
public async Task<List<T>> GetByIdAsync(int id)
{
return await _httpClient.GetFromJsonAsync<List<T>>($"{id}");
}
public Task<int> GetNbItems()
{
return _httpClient.GetFromJsonAsync<int>("count");
}
public Task<IEnumerable<T>?> GetActivitiesByUser(int userId, int index, int count, (ActivityOrderCriteria, AthleteOrderCriteria) orderCriteria, bool descending = false)
{
return _httpClient.GetFromJsonAsync<IEnumerable<T>?>($"?userId={userId}&index={index}&count={count}&orderCriteria={orderCriteria}&descending={descending}");
}
public Task<int> GetNbActivitiesByUser(int userId)
{
return _httpClient.GetFromJsonAsync<int>($"count?userId={userId}");
}
/*!
* \brief Ajoute un livre de manière asynchrone.
* \param book Le livre à ajouter.
* \return Une tâche représentant l'opération asynchrone qui retourne le livre ajouté (T).
*/
public async Task<T> PostAsync(T activity)
{
var response = await _httpClient.PostAsJsonAsync("", activity);
return await response.Content.ReadFromJsonAsync<T>();
}
/*!
* \brief Met à jour un livre de manière asynchrone.
* \param id L'identifiant du livre à mettre à jour.
* \param book Les nouvelles données du livre à mettre à jour.
* \return Une tâche représentant l'opération asynchrone qui retourne le livre mis à jour (T).
*/
public async Task<T> PutAsync(int id, T activity)
{
var response = await _httpClient.PutAsJsonAsync($"{id}", activity);
return await response.Content.ReadFromJsonAsync<T>();
}
/*!
* \brief Supprime un livre de manière asynchrone.
* \param id L'identifiant du livre à supprimer.
* \return Une tâche représentant l'opération asynchrone.
*/
public async Task DeleteAsync(int id)
{
await _httpClient.DeleteAsync($"{id}");
}
}

@ -0,0 +1,63 @@
using Dto;
using Model;
using Model.Repository;
using Shared;
IActivityRepository myConsoleTest = new ActivityServiceAPI();
// defini un delais d'attente du déploiement de l'API
await Task.Delay(5000);
// Affiche toutes les activités
Console.WriteLine("Affichage de toutes les Activités : ");
var res = await myConsoleTest.GetActivities(0, 10, ActivityOrderCriteria.ByAthleteId, false);
foreach(var myActivity in res)
{
Console.WriteLine(myActivity.Id + ", " + myActivity.Type + ", " + myActivity.StartTime + ", " + myActivity.EndTime + ", " + myActivity.DataSource + ", " + myActivity.Athlete);
}
// Affiche les activités par id
Console.WriteLine("Affichage du livre d'id 1 : ");
res = (IEnumerable<Model.Activity>)await myConsoleTest.GetActivityByIdAsync(1);
foreach (var myActivity in res)
{
Console.WriteLine(myActivity.Id + ", " + myActivity.Type + ", " + myActivity.StartTime + ", " + myActivity.EndTime + ", " + myActivity.DataSource + ", " + myActivity.Athlete);
}
// Ajouter une nouvelle activité
Console.WriteLine("Ajout d'un nouveau livre : ");
var newActivity = new ActivityDto { Type = "New Activity", StartTime = DateTime.Now, EndTime = DateTime.Now, DataSource = new DataSourceDto{}, Athlete = new UserDto{ Username = "Hello", FirstName = "feee", Email = "exemple.com", LastName = "dddd", Sexe = "M" } };
var addedActivity = await myConsoleTest.AddActivity(newActivity);
Console.WriteLine($"Id: {addedActivity.Id}, Type: {addedActivity.Type}, StartTime: {addedActivity.StartTime}, EndTime: {addedActivity.EndTime}, DataSource: {addedActivity.DataSource}, Athlete: {addedActivity.Athlete}");
// Mettre à jour l'activity ajouté
Console.WriteLine("Mise à jour du livre ajouté : ");
var activity = await myConsoleTest.UpdateActivity(1, new ActivityDto { Id = 1, Type = "Updated Activity", StartTime = DateTime.Now, EndTime = DateTime.Now, DataSource = new DataSourceDto{}, Athlete = new UserDto{ Username = "Hello", FirstName = "feee", Email = "exemple.com", LastName = "dddd", Sexe = "M" } });
Console.WriteLine($"Id: {activity.Id}, Type: {activity.Type}, StartTime: {activity.StartTime}, EndTime: {activity.EndTime}, DataSource: {activity.DataSource}, Athlete: {activity.Athlete}");
// Supprimer l'activity ajouté
Console.WriteLine("Suppression du livre ajouté : ");
await myConsoleTest.DeleteActivity(newActivity.Id);
res = await myConsoleTest.GetActivities(0, 10, ActivityOrderCriteria.ByAthleteId, false);
foreach (var activity1 in res)
{
Console.WriteLine(activity1.Id + ", " + activity1.Type + ", " + activity1.StartTime + ", " + activity1.EndTime + ", " + activity1.DataSource + ", " + activity1.Athlete);
}
// Affiche le nombre d'activités
Console.WriteLine("Affichage du nombre d'activités : ");
var nb = await myConsoleTest.GetNbItems();
Console.WriteLine(nb);
// Affiche les activités par utilisateur
Console.WriteLine("Affichage des activités par utilisateur : ");
res = await myConsoleTest.GetActivitiesByUser(1, 0, 10, ActivityOrderCriteria.ByAthleteId, false);
foreach (var activity3 in res)
{
Console.WriteLine(activity3.Id + ", " + activity3.Type + ", " + activity3.StartTime + ", " + activity3.EndTime + ", " + activity3.DataSource + ", " + activity3.Athlete);
}
// Affiche le nombre d'activités par utilisateur
Console.WriteLine("Affichage du nombre d'activités par utilisateur : ");
nb = await myConsoleTest.GetNbActivitiesByUser(1);
Console.WriteLine(nb);

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\Dto\Dto.csproj" />
<ProjectReference Include="..\..\Shared\Shared.csproj" />
<ProjectReference Include="..\..\Model\Model.csproj" />
<ProjectReference Include="..\..\APIMappers\APIMappers.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Loading…
Cancel
Save