Compare commits

...

73 Commits

Author SHA1 Message Date
Rami KHEDAIR 8c1fd7912a 📝 Readme
continuous-integration/drone/push Build is passing Details
1 year ago
Rami KHEDAIR 88dcb77439 Merge pull request 'lastBranch' (#9) from lastBranch into master
continuous-integration/drone/push Build is passing Details
1 year ago
Hugo LIVET 8d69915d21 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 2003fedc51 dernier push
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 21ee166715 Update 'code/server/Server/Room.cs'
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR b9a6abeff8 Update 'code/server/Server/Room.cs'
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 547a298c21 quel que changement
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 3c5af17f49 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 9ed29c5f21 first push
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 94d79627be Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 4aad4968bb Essaye plusieurs rooms
2 years ago
Noan RANDON e9a5f70234 Update '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Noan RANDON 5030d0e7d4 Update '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 652e18cede faire que dans 2min le partie soit fini
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA c210eab349 Compteur 2 minutes mis en place
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 44be783055 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 b2fff06bba 🔨 modif playerconnexion
2 years ago
Rami KHEDAIR 77dac0fc1f Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 3121071b16 améilloration
2 years ago
Noan07 f1804432ac 🔨 ajout tests
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 10f5bda5ac On fait maintenant en fonction du temps pour liberer le port, optimisatonnnn!!!
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA a1bbc0b034 Modification, maintenant on envoie un bool aussi pour savoir qui sera le host pour les coordonées de la balle
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA dbce60600a Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 7fa47ae47c Semaphores teste
2 years ago
Noan07 52119e94e3 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 069170c9c8 🔨 ajout swagger
2 years ago
Bruno DA COSTA CUNHA 76374fbce1 Implementation de semaphores pour tester la concurrence
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET df2e5f131a Merge branch 'master' of https://codefirst.iut.uca.fr/git/LeapHitTeam/LeapHitServer
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 77b6a7c19c Pb de sync et de concurance d'accès problablement
2 years ago
Noan07 79522dea88 🔨 modif controleur PlayersConnexion
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 6a707509ef 🔨 test
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 ab1ab84abb 🔨 ajout d'un controleur
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 86811a5cdf 🔨 test 3 bdd
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 1d86edba7a 🔨 test 2 BDD
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 a036f87a0b 🔨 test
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET babff8b5b0 Serv réparer
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET fc7c1c217b Revert "Envoi et recvoir ok"
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 2ab7726853 Fusion
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 44ad57f422 Envoi et recvoir ok
2 years ago
Noan07 087e7863c1 🔨 tests en commentaires
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 504d5cf06d Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is failing Details
2 years ago
Noan07 1722dcfe4b 🔨 Modifications PongDbContext
2 years ago
Bruno DA COSTA CUNHA dcaa46107c 🐛 serveur n'arrive pas à recevoir dans le port unique, on va resoudre
continuous-integration/drone/push Build is failing Details
2 years ago
Bruno DA COSTA CUNHA e31c68d90b On ira tester mnt avec Hugo en tant que serveur pour regarder les packets qui arrivent via WireShark
continuous-integration/drone/push Build is failing Details
2 years ago
Bruno DA COSTA CUNHA 092822705f Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is failing Details
2 years ago
Bruno DA COSTA CUNHA b0d54b2af9 🐛 mis à jour du serveur, mais j'ai quand meme une exception lors de la connexion client
2 years ago
Hugo LIVET 4a78c4bc56 💚 CI
continuous-integration/drone/push Build is failing Details
2 years ago
Bruno DA COSTA CUNHA d1eb396d99 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 4b8a66cd01 🔨 encore des modifs du serveur en mettant à jour le client aussi
2 years ago
Noan RANDON 6e51df2b4d 📝 fail dockerFile
continuous-integration/drone/push Build is passing Details
2 years ago
Noan RANDON 641d272346 📝 drone
continuous-integration/drone/push Build is failing Details
2 years ago
Noan07 293c057c19 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 8f12af8a9e 🔨 modif PongDbContext
2 years ago
Bruno DA COSTA CUNHA 2f4a18c494 🐛 modifications
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA f87243c262 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 63496281b4 🐛 testing avec le client
2 years ago
Noan07 d6dbc05e98 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 bfde32eac5 🔨 ajout des variables pour la connexion à la bdd
2 years ago
Bruno DA COSTA CUNHA f667227bcd 🔨 Changements du server , c'est le moment de tester
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 1514756a76 🔨 ajout de certains nugets
continuous-integration/drone/push Build is passing Details
2 years ago
Noan RANDON fcbb790b72 🔨 drone
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 e4ce9ba2c7 🔨
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA f1e9c4da94 Merge branch 'master' of https://codefirst.iut.uca.fr/git/leap-hit-team/leap-hit-server
continuous-integration/drone/push Build is passing Details
2 years ago
Bruno DA COSTA CUNHA 533ddf1f69 🔨 beaucoup de modifcations et changement de strategie
2 years ago
Noan RANDON f6b0c4dfcd 🔨 drone
continuous-integration/drone/push Build is passing Details
2 years ago
Noan RANDON 2e7517cfe7 🔨 update drone
continuous-integration/drone/push Build encountered an error Details
2 years ago
Noan RANDON 7c6f085f6e 🔨 ajout docker-container mariadb
continuous-integration/drone/push Build is passing Details
2 years ago
Rami KHEDAIR 89f8b31cc0 🔨 changer pas mal de chose
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET ba0086a46d Merge branch 'master' of https://codefirst.iut.uca.fr/git/LeapHitTeam/LeapHitServer
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 5d9daafd6c Modification dto
2 years ago
Noan RANDON 52ef2a91de 🔨 modif dockerFile
continuous-integration/drone/push Build is passing Details
2 years ago
Noan07 20777fe25d 🔨 Modif DockerFile / essai pour résoudre le problème d'instance dans le conteneur
continuous-integration/drone/push Build is failing Details
2 years ago
Noan07 56a8c35eb3 🔨 modif Program.cs de l'Api
continuous-integration/drone/push Build is passing Details
2 years ago

@ -7,6 +7,45 @@ trigger:
- push
steps:
- name: build
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd code/server
- dotnet workload restore
- dotnet restore Server.sln
- dotnet build Server.sln -c Release --no-restore
- dotnet publish Server.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- name: tests
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd code/server
- dotnet restore Server.sln
- dotnet test Server.sln --no-restore
depends_on: [build]
- name: code-analysis
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dronesonarplugin-dotnet6
commands:
- cd code/server
- dotnet workload restore
- dotnet restore Server.sln
- dotnet sonarscanner begin /k:PongSrv /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions="Tests/**,DataBase/Program.cs,DataBase/Migrations/**,DataBase/DataManager/**,DataBase/Context/PongDbContextWithStub.cs" /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
- dotnet build Server.sln -c Release --no-restore
- dotnet test Server.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish Server.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- dotnet sonarscanner end /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
secrets: [ SECRET_SONAR_LOGIN ]
settings:
# accessible en ligne de commande par ${PLUGIN_SONAR_HOST}
sonar_host: https://codefirst.iut.uca.fr/sonar/
# accessible en ligne de commande par ${PLUGIN_SONAR_TOKEN}
sonar_token:
from_secret: SECRET_SONAR_LOGIN
depends_on: [tests]
- name: build-docker-image
image: plugins/docker
settings:
@ -18,6 +57,7 @@ steps:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
depends_on: [tests]
# container deployment
- name: deploy-server
@ -28,4 +68,24 @@ steps:
COMMAND: create
OVERWRITE: true
ADMINS: brunoda_costa_cunha,noanrandon,ramikhedair,lorisperret,hugolivet
depends_on: [ build-docker-image ]
# database container deployment
- name: deploy-container-mysql
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
IMAGENAME: mariadb:10
CONTAINERNAME: mysql
COMMAND: create
# OVERWRITE: false
PRIVATE: true
CODEFIRST_CLIENTDRONE_ENV_MARIADB_ROOT_PASSWORD:
from_secret: db_root_password
CODEFIRST_CLIENTDRONE_ENV_MARIADB_DATABASE:
from_secret: db_database
CODEFIRST_CLIENTDRONE_ENV_MARIADB_USER:
from_secret: db_user
CODEFIRST_CLIENTDRONE_ENV_MARIADB_PASSWORD:
from_secret: db_password
ADMINS: noanrandon,hugolivet,ramikhedair,lorisperret,brunoda_costa_cunha
depends_on: [ build-docker-image ]

@ -1 +1 @@
# LeapHitServer
# LeapHitServer

@ -0,0 +1,56 @@
using DataBase.DataManager;
using DataBase.Entity;
using DTO.Factory;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Net;
namespace ApiLeapHit.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PlayersConnexionController : Controller
{
private readonly DbDataManager _dataManager;
private readonly ILogger<PlayersConnexionController> _logger;
public PlayersConnexionController(DbDataManager dataManager, ILogger<PlayersConnexionController> logger)
{
_dataManager = dataManager;
_logger = logger;
}
[HttpGet("{idIdentification}")]
public async Task<ActionResult<ApiResponse<string>>> CreatePlayer(string idIdentification)
{
try
{
if (!idIdentification.Equals("K02q7naLzjmodzAFfoSO4mPydr7W5hydPMrHtA6D"))
{
return StatusCode((int)HttpStatusCode.NotFound, new ApiResponse("Le numéro n'est pas correct."));
}
var player = new Player();
string id;
do
{
// Générer un id unique avec des chiffres et des lettres
id = Guid.NewGuid().ToString("N").Substring(0, 6);
}
while (await _dataManager.GetPlayer(id) != null);
player.playerId = id;
player.name = id;
player.timePlayed = 0;
player.nbBallTouchTotal = 0;
await _dataManager.AddPlayer(player);
//var response = new ApiResponse<string>($"Le joueur a été créé avec succès. Id du joueur : {id}.", id);
return Ok(id);
}
catch (Exception ex)
{
_logger.LogError(ex, "Une erreur est survenue lors de la création du joueur.");
return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la création du joueur."));
}
}
}
}

@ -22,36 +22,6 @@ namespace ApiLeapHit.Controllers
_logger = logger;
}
[HttpGet("/clePlayer/{idIdentification}")]
public async Task<ActionResult<ApiResponse<string>>> CreatePlayer(string idIdentification)
{
try
{
if(!idIdentification.Equals("K02q7naLzjmodzAFfoSO4mPydr7W5hydPMrHtA6D"))
{
return StatusCode((int)HttpStatusCode.NotFound, new ApiResponse("Le numéo n'est pas correct."));
}
var player = new Player();
string id;
do
{
// Générer un id unique avec des chiffres et des lettres
id = Guid.NewGuid().ToString("N");
}
while (await _dataManager.GetPlayer(id) != null);
player.playerId = id;
await _dataManager.AddPlayer(player);
var response = new ApiResponse<string>($"Le joueur a été créé avec succès. Id du joueur : {id}.", id);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Une erreur est survenue lors de la création du joueur.");
return StatusCode((int)HttpStatusCode.InternalServerError, new ApiResponse("Une erreur est survenue lors de la création du joueur."));
}
}
[HttpGet("{id}")]
public async Task<ActionResult<ApiResponse<DTOPlayer>>> GetPlayer(string id)
{

@ -1,4 +1,6 @@
using DataBase.Context;
using DataBase.DataManager;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
var builder = WebApplication.CreateBuilder(args);
@ -8,7 +10,14 @@ builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<DbDataManager>();
builder.Services.AddSingleton<DbDataManager>();
var context = new PongDbContext(); //ou une autre classe dérivant de TheDbContext
await context.Database.EnsureCreatedAsync();
//builder.Services.AddSingleton<IDataManager, StubData>();
// Add logging
@ -17,11 +26,11 @@ builder.Logging.AddConsole();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwaggerUI();
}
//}
app.UseHttpsRedirection();

@ -13,7 +13,8 @@ class Program
static void StartClient()
{
IPEndPoint serverEndPoint = new IPEndPoint(Dns.GetHostAddresses("hulivet.fr").FirstOrDefault(), 3131);
//IPEndPoint serverEndPoint = new IPEndPoint(Dns.GetHostAddresses("hulivet.fr").FirstOrDefault(), 3131);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("192.168.205.58"), 3131);
UdpClient client = new UdpClient();
// Send connection message to server
@ -31,7 +32,7 @@ class Program
string message = "";
while (message != "exit")
{
serverEndPoint = new IPEndPoint(Dns.GetHostAddresses("hulivet.fr").FirstOrDefault(), int.Parse(receivedPort));
serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(receivedPort));
Console.Write("Enter message to send (or 'exit' to quit): ");
message = Console.ReadLine();

@ -15,18 +15,6 @@ namespace DataBase.Context
public PongDbContext() { }
public PongDbContext(DbContextOptions<PongDbContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//base.OnConfiguring(optionsBuilder);
if (!optionsBuilder.IsConfigured)
{
//optionsBuilder.UseNpgsql(@"host=localhost;database=postgres;user id=postgres;password=1234;");
string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\..\\..\\..\\DataBase\\PongDB.db");
optionsBuilder.UseSqlite($"Data Source={path}");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Player>().ToTable("Players");
@ -35,5 +23,25 @@ namespace DataBase.Context
modelBuilder.Entity<Chat>().ToTable("Chats");
}
protected override async void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
if (!optionsBuilder.IsConfigured)
{
//optionsBuilder.UseNpgsql(@"host=localhost;database=postgres;user id=postgres;password=1234;");
//string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\..\\..\\..\\DataBase\\PongDB.db");
//optionsBuilder.UseSqlite($"Data Source={path}");
var dbDatabase = Environment.GetEnvironmentVariable("MARIADB_DATABASE", EnvironmentVariableTarget.Process);
var dbUser = Environment.GetEnvironmentVariable("MARIADB_USER", EnvironmentVariableTarget.Process);
var dbPassword = Environment.GetEnvironmentVariable("MARIADB_PASSWORD", EnvironmentVariableTarget.Process);
var dbServer = Environment.GetEnvironmentVariable("DB_SERVER", EnvironmentVariableTarget.Process);
Debug.WriteLine(dbPassword);
optionsBuilder.UseMySql($"server=leap-hit-team-mysql;port=3306;user=leaphit;password=leaphit;database=leaphit", new MySqlServerVersion(new Version(10, 11, 1)));
}
}
}
}

@ -9,12 +9,15 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.3">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
</ItemGroup>
</Project>

@ -1,5 +1,3 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientConsole", "ClientCons
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{CA1465F2-A006-4AF6-8231-59DB00963BD0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsDatabase", "TestsDatabase\TestsDatabase.csproj", "{EDAC56C7-0AC9-465A-A361-63347F435327}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -53,12 +55,17 @@ Global
{CA1465F2-A006-4AF6-8231-59DB00963BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA1465F2-A006-4AF6-8231-59DB00963BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA1465F2-A006-4AF6-8231-59DB00963BD0}.Release|Any CPU.Build.0 = Release|Any CPU
{EDAC56C7-0AC9-465A-A361-63347F435327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDAC56C7-0AC9-465A-A361-63347F435327}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDAC56C7-0AC9-465A-A361-63347F435327}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDAC56C7-0AC9-465A-A361-63347F435327}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A9DFF203-7F27-44BA-A460-F65C01D0EDFD} = {12A97D16-34BB-4D4F-9F76-D74061A9BA77}
{EDAC56C7-0AC9-465A-A361-63347F435327} = {12A97D16-34BB-4D4F-9F76-D74061A9BA77}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BE2DC93-D511-4DA9-9C47-F286E71354BA}

@ -8,6 +8,7 @@ using DataBase.Entity;
using Shared.DTO;
using System.Text.Json;
using Server;
using System.ComponentModel;
public class PongServer
{
@ -38,68 +39,111 @@ public class PongServer
string fileJson = Encoding.UTF8.GetString(receivedData);
ObjectTransfert<Player> data = JsonSerializer.Deserialize<ObjectTransfert<Player>>(fileJson);
if (data.Informations.Action == Shared.DTO.Action.Create)
if (data.Informations.Action == Shared.DTO.Action.Host)
{
Room room = new Room(data.Data.playerID);
room.playerHost = data.Data;
room.nbPlayer++;
Console.WriteLine("New connection from " + remoteEndPoint.ToString());
// Assign a unique port to the client
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort);
room.Port = nextPort;
nextPort++;
UdpClient clientSocket = new UdpClient(clientEndPoint);
clients[remoteEndPoint] = clientSocket;
// Send connection message to client
string connectionMessage = room.ID;
byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
// Start thread to receive data from client
Thread receiveThread = new Thread(() => ReceiveMessages(clientSocket));
receiveThread.Start();
Host(data, remoteEndPoint, serverSocket, false);
}
if (data.Informations.Action == Shared.DTO.Action.Join)
{
Console.WriteLine("New connection from " + remoteEndPoint.ToString());
// Assign a unique port to the client
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++);
UdpClient clientSocket = new UdpClient(clientEndPoint);
clients[remoteEndPoint] = clientSocket;
// Send connection message to client
string connectionMessage = clientEndPoint.Port.ToString();
byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
// Start thread to receive data from client
Thread receiveThread = new Thread(() => ReceiveMessages(clientSocket));
receiveThread.Start();
var choisenRoom = rooms.FirstOrDefault(room => room.Key == data.Informations.IdRoom);
if(choisenRoom.Value != default)
{
Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
}
}
if (room.MaxPlayers.Count == 2)
if (data.Informations.Action == Shared.DTO.Action.Connect) // Join = rejoindre un room , et Host ça va juste créer un room
{
Console.WriteLine("Starting game...");
// Call a function to start the game
var choisenRoom = rooms.FirstOrDefault(room => room.Value.Availaible);
Console.WriteLine("Connection " + choisenRoom.Key);
if (choisenRoom.Value != default )
{
Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
}
else
{
Host(data, remoteEndPoint, serverSocket, true);
}
}
Console.WriteLine("");
}
}
static void ReceiveMessages(UdpClient clientSocket)
private void Host(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, bool availaible)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
var choisenRoom = rooms.FirstOrDefault(room => room.Value.Free);
var chosenPort = nextPort;
if (choisenRoom.Value != default)
{
chosenPort= choisenRoom.Value.Port;
rooms.Remove(choisenRoom.Key);
choisenRoom = default;
}
while (true)
Room room = new Room(data.Data.playerId, availaible);
// Assign a unique port to the client
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, chosenPort);
UdpClient clientSocket = new UdpClient(clientEndPoint);
room.playerHost = new KeyValuePair<Player,UdpClient>(data.Data,clientSocket);
room.NbPlayer++;
Console.WriteLine("New connection Host From " + remoteEndPoint.ToString());
room.Port = chosenPort;
if(chosenPort==nextPort)
{
byte[] receivedData = clientSocket.Receive(ref remoteEndPoint);
string receivedMessage = Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received from " + remoteEndPoint.ToString() + ": " + receivedMessage);
nextPort++;
}
Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, true);
Console.WriteLine(JsonSerializer.Serialize(dataToSend));
// Send port message to client
byte[] connectionData = Encoding.ASCII.GetBytes(JsonSerializer.Serialize(dataToSend));
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
rooms[data.Data.playerId] = room;
Console.WriteLine("FIN HOST...............");
}
private void Join(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, Room room)
{
room.playerJoin = new KeyValuePair<Player, UdpClient>(data.Data, room.playerHost.Value);
Console.WriteLine("New connection Client from " + remoteEndPoint.ToString());
Tuple<int, bool> dataToSend = new Tuple<int, bool>(room.Port, false);
Console.WriteLine(JsonSerializer.Serialize(dataToSend));
// Send port message to client
byte[] connectionData = Encoding.ASCII.GetBytes(JsonSerializer.Serialize(dataToSend));
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
room.PropertyChanged += room.OnReadyChanged;
room.NbPlayer++;
Console.WriteLine("FIN JOIN...............");
}
}

@ -2,25 +2,193 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Shared.DTO;
using System.ComponentModel;
using System.Text.Json;
using static System.Formats.Asn1.AsnWriter;
namespace Server
{
public class Room
public class Room : INotifyPropertyChanged
{
public Room(int id)
public Room(string id, bool availaible)
{
ID = id;
Id = id;
Availaible = availaible;
}
Tuple<int, int> ScoreImp = new(0, 0);
public int ID { get; set; }
ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data ;
public Player playerHost;
public Player playerJoin;
public bool Availaible { get; set; }
public int nbPlayer = 0;
public bool Free { get; set; }=false;
public event PropertyChangedEventHandler? PropertyChanged;
public string Id { get; set; }
public KeyValuePair <Player, UdpClient> playerHost;
public KeyValuePair <Player, UdpClient> playerJoin;
public int Port { get; set; }
public bool gameRunning=true ;
public int NbPlayer
{
get
{
return nbPlayer;
}
set
{
nbPlayer = value;
if (value >= 2)
{
NotifyPropertyChanged("nbPlayer");
}
}
}
private int nbPlayer;
protected void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, Semaphore semaphore,bool isHost)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
Thread secondsCount = new Thread(() => CountSeconds() );
bool isDisconected=false;
secondsCount.Start();
while ((ScoreImp.Item1<6 && ScoreImp.Item2 < 6) && gameRunning)
{
try
{
byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint);
if (isHost) {
string fileJson = Encoding.UTF8.GetString(receivedData);
try
{
data = JsonSerializer.Deserialize<ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>>>(fileJson);
ScoreImp = data.Data.Item2 != null ? data.Data.Item2 : ScoreImp;
}
catch (Exception ex) { }
}
semaphore.WaitOne();
clientSocket2.Send(receivedData, receivedData.Length, endpoint2);
semaphore.Release();
} catch (SocketException){
try
{
semaphore.Release();
}catch { }
isDisconected = true;
break;
}
}
//Tuple<GameEntities, Tuple<int, int>> game = new Tuple<GameEntities, Tuple<int, int>>(new GameEntities(new Tuple<float,float>(0,0),0), ScoreImp);
/* ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data2 = new ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>>() {
Informations = new Informations(Shared.DTO.Action.End, 0, typeof(Tuple<GameEntities, Tuple<int, int>>).ToString()),
Data = game
};*/
if (!isDisconected)
{
data.Informations.Action = Shared.DTO.Action.End;
string sendFinish = JsonSerializer.Serialize(data);
byte[] sendFinishByt = Encoding.ASCII.GetBytes(sendFinish);
try
{
clientSocket2.Send(sendFinishByt, sendFinishByt.Length, endpoint2);
}
catch (Exception ex) { }
}
if (isHost)
{
try
{
semaphore.Release();
}
catch { }
playerJoin.Value.Close();
}
else
{
playerHost.Value.Close();
}
Free = true;
Console.WriteLine("Game Finished Am i host " + isHost);
}
private void CountSeconds()
{
int seconds = 0;
while (seconds<=122)
{
seconds++;
Thread.Sleep(1000);
}
gameRunning = false;
}
async public void OnReadyChanged(object sender, PropertyChangedEventArgs e)
{
await Task.Run(() =>
{
Room room = sender as Room;
int maxPlayer = room.nbPlayer;
if (maxPlayer == 2)
{
room.Availaible = false;
IPEndPoint remoteEndPointHost = new IPEndPoint(IPAddress.Any, room.Port);
IPEndPoint remoteEndPointJoin = new IPEndPoint(IPAddress.Any, room.Port);
byte[] receivedDataHost = playerHost.Value.Receive(ref remoteEndPointHost);
byte[] receivedDataJoin = playerJoin.Value.Receive(ref remoteEndPointJoin);
playerJoin.Value.Send(receivedDataHost, receivedDataHost.Length, remoteEndPointHost);
playerHost.Value.Send(receivedDataJoin, receivedDataJoin.Length, remoteEndPointJoin);
Semaphore semaphore = new Semaphore(2, 2);
Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore,true));
Thread receiveThread2 = new Thread(() =>
{
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore,false);
});
receiveThread1.Start();
receiveThread2.Start();
receiveThread1.Join();
receiveThread2.Join();
}
});
}
}
}

@ -8,8 +8,14 @@ namespace Shared.DTO
{
public enum Action
{
Start,
Join,
Host,
Connect,
End
End,
SendPlayer,
RecivePlayer,
SendEntities,
SendScore
}
}

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shared.DTO
{
public class GameEntities
{
public Tuple<float, float> Ball { get; set; }
public float Paddle { get; set; }
public GameEntities(Tuple<float, float> ball, float paddle)
{
Ball = ball;
Paddle = paddle;
}
}
}

@ -9,5 +9,16 @@ namespace Shared.DTO
public class Informations
{
public Action Action { get; set; }
public long Frame { get; set; }
public string TypeData { get; set; }
public string? IdRoom { get; set; }
public Informations(Action action, long frame, string typeData, string? idRoom = null)
{
Action = action;
Frame = frame;
TypeData = typeData;
IdRoom = idRoom;
}
}
}

@ -10,5 +10,6 @@ namespace Shared.DTO
{
public Informations Informations { get; set; }
public T Data { get; set; }
}
}

@ -20,146 +20,146 @@ namespace TestControleurs
[TestClass]
public class UnitTestChats
{
private DbDataManager _dataManager = new DbDataManager();
private readonly ILogger<ChatsController> _logger = new NullLogger<ChatsController>();
[TestMethod]
public async Task AddChat_ReturnsOkResult_WhenChatIsAdded()
{
// Arrange
var player1 = new Player { playerId = 1, name = "Player1" };
var player2 = new Player { playerId = 2, name = "Player2" };
var dtoChat = new DTOChat { PlayerId1 = player1.playerId, PlayerId2 = player2.playerId };
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.AddChat(dtoChat);
var objectResult = result as ObjectResult;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task AddChat_ReturnsBadRequestResult()
{
// Arrange
var nb = await _dataManager.GetNbChats();
var dtoChat = new DTOChat { PlayerId1 = 1, PlayerId2 = nb+10 };
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.AddChat(dtoChat);
var objectResult = result as ObjectResult;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
}
[TestMethod]
public async Task GetChats_ReturnsOkResult()
{
// Arrange
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.GetChats();
var objectResult = (ObjectResult)result.Result;
var dtoChats = objectResult.Value as IEnumerable<DTOChat>;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
//private DbDataManager _dataManager = new DbDataManager();
//private readonly ILogger<ChatsController> _logger = new NullLogger<ChatsController>();
//[TestMethod]
//public async Task GetChats_ReturnsNotFoundResult()
//public async Task AddChat_ReturnsOkResult_WhenChatIsAdded()
//{
// // Arrange
// var mockDataManager = new Mock<DbDataManager>();
// mockDataManager.Setup(dm => dm.GetChats()).ReturnsAsync(new List<Chat>());
// var controller = new ChatsController(mockDataManager.Object, _logger);
// var player1 = new Player { playerId = 1, name = "Player1" };
// var player2 = new Player { playerId = 2, name = "Player2" };
// var dtoChat = new DTOChat { PlayerId1 = player1.playerId, PlayerId2 = player2.playerId };
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.AddChat(dtoChat);
// var objectResult = result as ObjectResult;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task AddChat_ReturnsBadRequestResult()
//{
// // Arrange
// var nb = await _dataManager.GetNbChats();
// var dtoChat = new DTOChat { PlayerId1 = 1, PlayerId2 = "test" };
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.AddChat(dtoChat);
// var objectResult = result as ObjectResult;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task GetChats_ReturnsOkResult()
//{
// // Arrange
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.GetChats();
// var objectResult = (ObjectResult)result.Result;
// var dtoChats = objectResult.Value as IEnumerable<DTOChat>;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
////[TestMethod]
////public async Task GetChats_ReturnsNotFoundResult()
////{
//// // Arrange
//// var mockDataManager = new Mock<DbDataManager>();
//// mockDataManager.Setup(dm => dm.GetChats()).ReturnsAsync(new List<Chat>());
//// var controller = new ChatsController(mockDataManager.Object, _logger);
//// // Act
//// var result = await controller.GetChats();
//// var objectResult = (ObjectResult)result.Result;
//// // Assert
//// Assert.IsNotNull(objectResult);
//// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
////}
//[TestMethod]
//public async Task GetChatById_ReturnsOkResult()
//{
// // Arrange
// var chat = new Chat { chatId = 1, player1 = 1, player2 = 2 };
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.GetChatById(chat.chatId);
// var objectResult = result.Result as ObjectResult;
// var dtoChat = objectResult.Value as DTOChat;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
// Assert.IsNotNull(dtoChat);
// Assert.AreEqual(chat.chatId, dtoChat.chatId);
//}
//[TestMethod]
//public async Task GetChatById_ReturnsNotFoundResult()
//{
// // Arrange
// var chatId = 1000;
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.GetChatById(chatId);
// var objectResult = result.Result as ObjectResult;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
//}
[TestMethod]
public async Task GetChatById_ReturnsOkResult()
{
// Arrange
var chat = new Chat { chatId = 1, player1 = 1, player2 = 2 };
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.GetChatById(chat.chatId);
var objectResult = result.Result as ObjectResult;
var dtoChat = objectResult.Value as DTOChat;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
Assert.IsNotNull(dtoChat);
Assert.AreEqual(chat.chatId, dtoChat.chatId);
}
[TestMethod]
public async Task GetChatById_ReturnsNotFoundResult()
{
// Arrange
var chatId = 1000;
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.GetChatById(chatId);
var objectResult = result.Result as ObjectResult;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveChat_ReturnsOkResult()
{
// Arrange
var nb = await _dataManager.GetNbChats();
var chat = new Chat { chatId = nb+1, player1 = 1, player2 = 2 };
await _dataManager.AddChat(chat);
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.RemoveChat(chat.chatId);
var objectResult = result as ObjectResult;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveChat_ReturnsNotFoundResult()
{
// Arrange
var chatId = 1000;
var controller = new ChatsController(_dataManager, _logger);
// Act
var result = await controller.RemoveChat(chatId);
var objectResult = result as ObjectResult;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
//[TestMethod]
//public async Task RemoveChat_ReturnsOkResult()
//{
// // Arrange
// var nb = await _dataManager.GetNbChats();
// var chat = new Chat { chatId = nb+1, player1 = 1, player2 = 2 };
// await _dataManager.AddChat(chat);
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.RemoveChat(chat.chatId);
// var objectResult = result as ObjectResult;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task RemoveChat_ReturnsNotFoundResult()
//{
// // Arrange
// var chatId = 1000;
// var controller = new ChatsController(_dataManager, _logger);
// // Act
// var result = await controller.RemoveChat(chatId);
// var objectResult = result as ObjectResult;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
//}
}
}

@ -19,111 +19,111 @@ namespace TestControleurs
[TestClass]
public class UnitTestGames
{
private DbDataManager _dataManager = new DbDataManager();
private readonly ILogger<GamesController> _logger = new NullLogger<GamesController>();
[TestMethod]
public async Task GetGame_ReturnsOkResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbGames();
var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
await _dataManager.AddGame(testGame);
// Act
var result = await controller.GetGame(nb.Result + 1);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task GetGame_ReturnsNotFoundResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbGames();
// Act
var result = await controller.GetGame(nb.Result + 1);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveGame_ReturnsNotFoundResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbGames();
// Act
var result = await controller.RemoveGame(nb.Result + 1);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveGame_ReturnsOKResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbGames();
var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
await _dataManager.AddGame(testGame);
// Act
var result = await controller.RemoveGame(nb.Result + 1);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task GetGameByIdPlayer_ReturnsOKResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbGames();
var nbP = _dataManager.GetNbPlayers();
var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = nbP.Result, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
await _dataManager.AddGame(testGame);
// Act
var result = await controller.GetGameByIdPlayer(nbP.Result);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task GetGameByIdPlayer_ReturnsNotFoundResult()
{
// Arrange
var controller = new GamesController(_dataManager, _logger);
var nb = _dataManager.GetNbPlayers();
// Act
var result = await controller.GetGameByIdPlayer(nb.Result + 1);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
//private DbDataManager _dataManager = new DbDataManager();
//private readonly ILogger<GamesController> _logger = new NullLogger<GamesController>();
//[TestMethod]
//public async Task GetGame_ReturnsOkResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbGames();
// var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
// await _dataManager.AddGame(testGame);
// // Act
// var result = await controller.GetGame(nb.Result + 1);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task GetGame_ReturnsNotFoundResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbGames();
// // Act
// var result = await controller.GetGame(nb.Result + 1);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task RemoveGame_ReturnsNotFoundResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbGames();
// // Act
// var result = await controller.RemoveGame(nb.Result + 1);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task RemoveGame_ReturnsOKResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbGames();
// var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = 1, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
// await _dataManager.AddGame(testGame);
// // Act
// var result = await controller.RemoveGame(nb.Result + 1);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task GetGameByIdPlayer_ReturnsOKResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbGames();
// var nbP = _dataManager.GetNbPlayers();
// var testGame = new Game { gameId = nb.Result + 1, durationGame = 3, loser = nbP.Result, winner = 2, nbMaxEchanges = 33, scoreLoser = 5, scoreWinner = 6 };
// await _dataManager.AddGame(testGame);
// // Act
// var result = await controller.GetGameByIdPlayer(nbP.Result);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
//}
//[TestMethod]
//public async Task GetGameByIdPlayer_ReturnsNotFoundResult()
//{
// // Arrange
// var controller = new GamesController(_dataManager, _logger);
// var nb = _dataManager.GetNbPlayers();
// // Act
// var result = await controller.GetGameByIdPlayer(nb.Result + 1);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
//}
//[HttpPost]
//public async Task<ActionResult> AddGame([FromBody] DTOGame dtoGame)

@ -16,114 +16,114 @@ using System.Threading.Tasks;
namespace TestControleurs
{
[TestClass]
public class UnitTestMessages
{
private DbDataManager _dataManager = new DbDataManager();
private readonly ILogger<MessagesController> _logger = new NullLogger<MessagesController>();
[TestMethod]
public async Task ReceiveMessage_ReturnsOkResult()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
var testMessage = new Message { messageId = nb.Result+1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1 , chat =1};
await _dataManager.SendMessage(testMessage);
// Act
var result = await controller.ReceiveMessage(1);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
}
[TestMethod]
public async Task ReceiveMessage_ReturnsNotFound()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
// Act
var result = await controller.ReceiveMessage(nb.Result+1);
var objectResult = (ObjectResult)result.Result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveMessage_ReturnsBadRequest()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
// Act
var result = await controller.RemoveMessage(nb.Result + 1);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
}
[TestMethod]
public async Task RemoveMessage_ReturnsOk()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
var testMessage = new Message { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1, chat = 1 };
// Act
var result = await controller.RemoveMessage(nb.Result + 1);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
}
[TestMethod]
public async Task SendMessage_ReturnsCreated()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = 1, ChatId = 1 };
// Act
var result = await controller.SendMessage(testMessage);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.Created, objectResult.StatusCode);
await controller.RemoveMessage(nb.Result + 1);
}
[TestMethod]
public async Task SendMessage_ReturnsNotFound()
{
// Arrange
var controller = new MessagesController(_dataManager, _logger);
var nb = _dataManager.GetNbMessages();
var nbP = _dataManager.GetNbPlayers();
var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = nb.Result+1, ChatId = 1 };
// Act
var result = await controller.SendMessage(testMessage);
var objectResult = (ObjectResult)result;
// Assert
Assert.IsNotNull(objectResult);
Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
await controller.RemoveMessage(nb.Result + 1);
}
}
//[TestClass]
//public class UnitTestMessages
//{
// private DbDataManager _dataManager = new DbDataManager();
// private readonly ILogger<MessagesController> _logger = new NullLogger<MessagesController>();
// [TestMethod]
// public async Task ReceiveMessage_ReturnsOkResult()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// var testMessage = new Message { messageId = nb.Result+1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1 , chat =1};
// await _dataManager.SendMessage(testMessage);
// // Act
// var result = await controller.ReceiveMessage(1);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.OK, objectResult.StatusCode);
// }
// [TestMethod]
// public async Task ReceiveMessage_ReturnsNotFound()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// // Act
// var result = await controller.ReceiveMessage(nb.Result+1);
// var objectResult = (ObjectResult)result.Result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
// }
// [TestMethod]
// public async Task RemoveMessage_ReturnsBadRequest()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// // Act
// var result = await controller.RemoveMessage(nb.Result + 1);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
// }
// [TestMethod]
// public async Task RemoveMessage_ReturnsOk()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// var testMessage = new Message { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), player = 1, chat = 1 };
// // Act
// var result = await controller.RemoveMessage(nb.Result + 1);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.BadRequest, objectResult.StatusCode);
// }
// [TestMethod]
// public async Task SendMessage_ReturnsCreated()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = 1, ChatId = 1 };
// // Act
// var result = await controller.SendMessage(testMessage);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.Created, objectResult.StatusCode);
// await controller.RemoveMessage(nb.Result + 1);
// }
// [TestMethod]
// public async Task SendMessage_ReturnsNotFound()
// {
// // Arrange
// var controller = new MessagesController(_dataManager, _logger);
// var nb = _dataManager.GetNbMessages();
// var nbP = _dataManager.GetNbPlayers();
// var testMessage = new DTOMessage { messageId = nb.Result + 1, message = "Test message", timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc), PlayerId = nb.Result+1, ChatId = 1 };
// // Act
// var result = await controller.SendMessage(testMessage);
// var objectResult = (ObjectResult)result;
// // Assert
// Assert.IsNotNull(objectResult);
// Assert.AreEqual((int)HttpStatusCode.NotFound, objectResult.StatusCode);
// await controller.RemoveMessage(nb.Result + 1);
// }
//}
}

@ -0,0 +1,150 @@
using DataBase.Context;
using DataBase.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestsDatabase
{
public class TestsChat
{
[Fact]
public void Add_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Add_Test_Database_Chats")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
context.Players.Add(player);
context.Players.Add(player2);
context.Chats.Add(chat);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
Assert.Equal(1, context.Chats.Count());
Assert.Equal(1, context.Chats.First().chatId);
}
}
[Fact]
public void Modify_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Modify_Test_Database_Chats")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
context.Players.Add(player);
context.Players.Add(player2);
context.Chats.Add(chat);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int chatid = 1;
Assert.Equal(1, context.Chats.Where(n => n.chatId.Equals(chatid)).Count());
var elementalist = context.Chats.Where(n => n.chatId.Equals(chatid)).First();
elementalist.player1 = "Loris1";
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int chatid = 1;
Assert.Equal(1, context.Chats.Where(n => n.chatId.Equals(chatid)).Count());
var elementalist = context.Chats.Where(n => n.chatId.Equals(chatid)).First();
Assert.Equal("Loris1", elementalist.player1);
}
}
[Fact]
public void Delete_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Delete_Test_Database_Chats")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
context.Players.Add(player);
context.Players.Add(player2);
context.Chats.Add(chat);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int chatid = 1;
Assert.Equal(1, context.Chats.Where(n => n.chatId.Equals(chatid)).Count());
context.Chats.Remove(context.Chats.Where(n => n.chatId.Equals(chatid)).First());
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int chatid = 1;
Assert.NotEqual(1, context.Chats.Where(n => n.chatId.Equals(chatid)).Count());
}
}
[Fact]
public void GetAllChat_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "GetAllSkin_Test_Database_Chats")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
Chat chat2 = new Chat { chatId = 2, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
context.Players.Add(player);
context.Players.Add(player2);
context.Chats.Add(chat);
context.Chats.Add(chat2);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
var chats = context.Chats.ToList();
Assert.Equal(2, chats.Count);
var classic = chats.FirstOrDefault(c => c.chatId == 1);
Assert.NotNull(classic);
Assert.Equal("Loris12345", classic.player1);
Assert.Equal("Rami12345", classic.player2);
var elementalist = chats.FirstOrDefault(c => c.chatId == 2);
Assert.NotNull(elementalist);
Assert.Equal("Loris12345", elementalist.player1);
Assert.Equal("Rami12345", elementalist.player2);
}
}
}
}

@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<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="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataBase\DataBase.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,150 @@
using DataBase.Context;
using DataBase.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace TestsDatabase
{
public class TestsGame
{
[Fact]
public void Add_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Add_Test_Database_Games")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player playerRami = new Player { playerId = "Rami12345", name = "The Lady Rami", nbBallTouchTotal = 9, timePlayed = 3 };
Game game = new Game { gameId = 1, durationGame = 2, nbMaxEchanges = 8, loser = "Loris12345", winner = "Rami12345", scoreLoser = 2, scoreWinner = 6, PlayerLoser = player, PlayerWinner = playerRami };
context.Players.Add(player);
context.Players.Add(playerRami);
context.Games.Add(game);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
Assert.Equal(1, context.Games.Count());
Assert.Equal(1, context.Games.First().gameId);
}
}
[Fact]
public void Modify_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Modify_Test_Database_Games")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player playerRami = new Player { playerId = "Rami12345", name = "The Lady Rami", nbBallTouchTotal = 9, timePlayed = 3 };
Game game = new Game { gameId = 1, durationGame = 2, nbMaxEchanges = 8, loser = "Loris12345", winner = "Rami12345", scoreLoser = 2, scoreWinner = 6, PlayerLoser = player, PlayerWinner = playerRami };
context.Players.Add(player);
context.Players.Add(playerRami);
context.Games.Add(game);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int idPong = 1;
Assert.Equal(1, context.Games.Where(n => n.gameId.Equals(idPong)).Count());
var elementalist = context.Games.Where(n => n.gameId.Equals(idPong)).First();
elementalist.nbMaxEchanges = 6;
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int idPong = 1;
Assert.Equal(1, context.Games.Where(n => n.gameId.Equals(idPong)).Count());
var elementalist = context.Games.Where(n => n.gameId.Equals(idPong)).First();
Assert.Equal(6, elementalist.nbMaxEchanges);
}
}
[Fact]
public void Delete_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Delete_Test_Database_Games")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player playerRami = new Player { playerId = "Rami12345", name = "The Lady Rami", nbBallTouchTotal = 9, timePlayed = 3 };
Game game = new Game { gameId = 1, durationGame = 2, nbMaxEchanges = 8, loser = "Loris12345", winner = "Rami12345", scoreLoser = 2, scoreWinner = 6, PlayerLoser = player, PlayerWinner = playerRami };
context.Players.Add(player);
context.Players.Add(playerRami);
context.Games.Add(game);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int idPong = 1;
Assert.Equal(1, context.Games.Where(n => n.gameId.Equals(idPong)).Count());
context.Games.Remove(context.Games.Where(n => n.gameId.Equals(idPong)).First());
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int idPong = 1;
Assert.NotEqual(1, context.Games.Where(n => n.gameId.Equals(idPong)).Count());
}
}
[Fact]
public void GetAllGame_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "GetAllSkin_Test_Database_Games")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player playerRami = new Player { playerId = "Rami12345", name = "The Lady Rami", nbBallTouchTotal = 9, timePlayed = 3 };
Game game = new Game { gameId = 1, durationGame = 2, nbMaxEchanges = 8, loser = "Loris12345", winner = "Rami12345", scoreLoser = 2, scoreWinner = 6, PlayerLoser = player, PlayerWinner = playerRami };
Game game2 = new Game { gameId = 2, durationGame = 2, nbMaxEchanges = 8, loser = "Loris12345", winner = "Rami12345", scoreLoser = 2, scoreWinner = 6, PlayerLoser = player, PlayerWinner = playerRami };
context.Players.Add(player);
context.Players.Add(playerRami);
context.Games.Add(game);
context.Games.Add(game2);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
var games = context.Games.ToList();
Assert.Equal(2, games.Count);
var classic = games.FirstOrDefault(c => c.gameId == 1);
Assert.NotNull(classic);
Assert.Equal(2, classic.durationGame);
Assert.Equal(2, classic.scoreLoser);
var elementalist = games.FirstOrDefault(c => c.gameId == 2);
Assert.NotNull(elementalist);
Assert.Equal(2, elementalist.durationGame);
Assert.Equal(2, elementalist.scoreLoser);
}
}
}
}

@ -0,0 +1,143 @@
using DataBase.Context;
using DataBase.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestsDatabase
{
public class TestsMessage
{
[Fact]
public void Add_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Add_Test_Database_Messages")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
Message message = new Message { messageId = 1, ChatId = chat, message = "message", chat = 1, player = "Loris12345", PlayerId = player, timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc) };
context.Messages.Add(message);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
Assert.Equal(1, context.Messages.Count());
Assert.Equal(1, context.Messages.First().messageId);
}
}
[Fact]
public void Modify_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Modify_Test_Database_Messages")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
Message message = new Message { messageId = 1, ChatId = chat, message = "message", chat = 1, player = "Loris12345", PlayerId = player, timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc) };
context.Messages.Add(message);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int messageId = 1;
Assert.Equal(1, context.Messages.Where(n => n.messageId.Equals(messageId)).Count());
var elementalist = context.Messages.Where(n => n.messageId.Equals(messageId)).First();
elementalist.message = "Loris1";
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int messageId = 1;
Assert.Equal(1, context.Messages.Where(n => n.messageId.Equals(messageId)).Count());
var elementalist = context.Messages.Where(n => n.messageId.Equals(messageId)).First();
Assert.Equal("Loris1", elementalist.message);
}
}
[Fact]
public void Delete_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Delete_Test_Database_Messages")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
Message message = new Message { messageId = 1, ChatId = chat, message = "message", chat = 1, player = "Loris12345", PlayerId = player, timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc) };
context.Messages.Add(message);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int messageId = 1;
Assert.Equal(1, context.Messages.Where(n => n.messageId.Equals(messageId)).Count());
context.Messages.Remove(context.Messages.Where(n => n.messageId.Equals(messageId)).First());
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
int messageId = 1;
Assert.Equal(0, context.Messages.Where(n => n.messageId.Equals(messageId)).Count());
}
}
[Fact]
public void GetAllMessage_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "GetAllSkin_Test_Database_Messages")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Rami12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Chat chat = new Chat { chatId = 1, player1 = "Loris12345", player2 = "Rami12345", PlayerId1 = player, PlayerId2 = player2 };
Message message = new Message { messageId = 1, ChatId = chat, message = "message", chat = 1, player = "Loris12345", PlayerId = player, timestamp = new DateTime(2023, 3, 10, 14, 30, 0, DateTimeKind.Utc) };
context.Messages.Add(message);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
var messages = context.Messages.ToList();
Assert.Equal(1, messages.Count);
var classic = messages.FirstOrDefault(c => c.messageId == 1);
Assert.NotNull(classic);
Assert.Equal("Loris12345", classic.player);
Assert.Equal("message", classic.message);
}
}
}
}

@ -0,0 +1,134 @@
using DataBase.Context;
using DataBase.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestsDatabase
{
public class TestsPlayer
{
[Fact]
public void Add_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Add_Test_Database_Players")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
context.Players.Add(player);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
Assert.Equal(1, context.Players.Count());
Assert.Equal("The Lady", context.Players.First().name);
}
}
[Fact]
public void Modify_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Modify_Test_Database_Players")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
context.Players.Add(player);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
string nameToFind = "the lady";
Assert.Equal(1, context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).Count());
var elementalist = context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).First();
elementalist.nbBallTouchTotal = 8;
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
string nameToFind = "the lady";
Assert.Equal(1, context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).Count());
var elementalist = context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).First();
Assert.Equal(8, elementalist.nbBallTouchTotal);
}
}
[Fact]
public void Delete_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "Delete_Test_Database_Players")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
context.Players.Add(player);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
string nameToFind = "the lady";
Assert.Equal(1, context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).Count());
context.Players.Remove(context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).First());
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
string nameToFind = "the lady";
Assert.NotEqual(1, context.Players.Where(n => n.name.ToLower().Contains(nameToFind)).Count());
}
}
[Fact]
public void GetAllPlayer_Test()
{
var options = new DbContextOptionsBuilder<PongDbContext>()
.UseInMemoryDatabase(databaseName: "GetAllSkin_Test_Database_Players")
.Options;
using (var context = new PongDbContext(options))
{
Player player = new Player { playerId = "Loris12345", name = "The Lady", nbBallTouchTotal = 8, timePlayed = 2 };
Player player2 = new Player { playerId = "Noan12345", name = "The Lady Noan", nbBallTouchTotal = 9, timePlayed = 5 };
context.Players.Add(player);
context.Players.Add(player2);
context.SaveChanges();
}
using (var context = new PongDbContext(options))
{
var players = context.Players.ToList();
Assert.Equal(2, players.Count);
var classic = players.FirstOrDefault(c => c.name == "The Lady Noan");
Assert.NotNull(classic);
Assert.Equal(9, classic.nbBallTouchTotal);
Assert.Equal(5, classic.timePlayed);
var elementalist = players.FirstOrDefault(c => c.name == "The Lady");
Assert.NotNull(elementalist);
Assert.Equal(8, elementalist.nbBallTouchTotal);
Assert.Equal(2, elementalist.timePlayed);
}
}
}
}
Loading…
Cancel
Save