Compare commits

...

24 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

@ -31,7 +31,7 @@ steps:
- 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/**" /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
- 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"
@ -57,6 +57,7 @@ steps:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
depends_on: [tests]
# container deployment
- name: deploy-server

@ -1 +1 @@
# LeapHitServer
# LeapHitServer

@ -34,7 +34,7 @@ namespace ApiLeapHit.Controllers
do
{
// Générer un id unique avec des chiffres et des lettres
id = Guid.NewGuid().ToString("N");
id = Guid.NewGuid().ToString("N").Substring(0, 6);
}
while (await _dataManager.GetPlayer(id) != null);
player.playerId = id;

@ -10,6 +10,7 @@
<ItemGroup>
<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.4">

@ -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}

@ -38,9 +38,10 @@ public class PongServer
byte[] receivedData = serverSocket.Receive(ref remoteEndPoint);
string fileJson = Encoding.UTF8.GetString(receivedData);
ObjectTransfert<Player> data = JsonSerializer.Deserialize<ObjectTransfert<Player>>(fileJson);
if (data.Informations.Action == Shared.DTO.Action.Host)
{
Host(data, remoteEndPoint, serverSocket, false);
}
@ -48,7 +49,7 @@ public class PongServer
if (data.Informations.Action == Shared.DTO.Action.Join)
{
var choisenRoom = rooms.FirstOrDefault(room => room.Key == data.Informations.IdRoom);
if(choisenRoom.Value != default && choisenRoom.Value.Availaible)
if(choisenRoom.Value != default)
{
Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
}
@ -61,7 +62,8 @@ public class PongServer
Console.WriteLine("Connection " + choisenRoom.Key);
if (choisenRoom.Value != default )
{
Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
Join(data, remoteEndPoint, serverSocket, choisenRoom.Value);
}
else
{
@ -69,6 +71,7 @@ public class PongServer
}
}
Console.WriteLine("");
}
@ -76,11 +79,20 @@ public class PongServer
private void Host(ObjectTransfert<Player> data, IPEndPoint remoteEndPoint, UdpClient serverSocket, bool availaible)
{
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;
}
Room room = new Room(data.Data.playerId, availaible);
// Assign a unique port to the client
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort);
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, chosenPort);
UdpClient clientSocket = new UdpClient(clientEndPoint);
room.playerHost = new KeyValuePair<Player,UdpClient>(data.Data,clientSocket);
@ -91,37 +103,47 @@ public class PongServer
Console.WriteLine("New connection Host From " + remoteEndPoint.ToString());
room.Port = nextPort;
nextPort++;
room.Port = chosenPort;
if(chosenPort==nextPort)
{
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(room.Port.ToString());
byte[] connectionData = Encoding.ASCII.GetBytes(JsonSerializer.Serialize(dataToSend));
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
rooms[data.Data.playerId] = room;
room.PropertyChanged += room.OnReadyChanged;
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(room.Port.ToString());
byte[] connectionData = Encoding.ASCII.GetBytes(JsonSerializer.Serialize(dataToSend));
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
room.PropertyChanged += room.OnReadyChanged;
room.NbPlayer++;
Console.WriteLine("FIN JOIN...............");
}
}

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using Shared.DTO;
using System.ComponentModel;
using System.Text.Json;
using static System.Formats.Asn1.AsnWriter;
namespace Server
{
@ -20,9 +21,14 @@ namespace Server
Id = id;
Availaible = availaible;
}
Tuple<int, int> ScoreImp = new(0, 0);
ObjectTransfert<Tuple<GameEntities, Tuple<int, int>>> data ;
public bool Availaible { get; set; }
public bool Free { get; set; }=false;
public event PropertyChangedEventHandler? PropertyChanged;
public string Id { get; set; }
@ -30,6 +36,7 @@ namespace Server
public KeyValuePair <Player, UdpClient> playerHost;
public KeyValuePair <Player, UdpClient> playerJoin;
public int Port { get; set; }
public bool gameRunning=true ;
public int NbPlayer
@ -57,69 +64,131 @@ namespace Server
public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, SemaphoreSlim semaphore)
public void ReceiveMessages(UdpClient clientSocket1, UdpClient clientSocket2, IPEndPoint endpoint2, Semaphore semaphore,bool isHost)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] receivedData = clientSocket1.Receive(ref remoteEndPoint);
semaphore.Wait();
clientSocket2.Send(receivedData, receivedData.Length, endpoint2);
semaphore.Release();
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);
}
public void OnReadyChanged(object sender, PropertyChangedEventArgs e)
private void CountSeconds()
{
int seconds = 0;
while (seconds<=122)
{
seconds++;
Thread.Sleep(1000);
}
gameRunning = false;
}
Room room = sender as Room;
int maxPlayer = room.nbPlayer;
//IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, Port);
//UdpClient serverSocket = new UdpClient(serverEndPoint);
async public void OnReadyChanged(object sender, PropertyChangedEventArgs e)
{
await Task.Run(() =>
{
Room room = sender as Room;
int maxPlayer = room.nbPlayer;
if (maxPlayer == 2)
{
IPEndPoint remoteEndPointHost = new IPEndPoint(IPAddress.Any, room.Port);
IPEndPoint remoteEndPointJoin = new IPEndPoint(IPAddress.Any, room.Port);
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);
byte[] receivedDataHost = playerHost.Value.Receive(ref remoteEndPointHost);
byte[] receivedDataJoin = playerJoin.Value.Receive(ref remoteEndPointJoin);
SemaphoreSlim semaphore = new SemaphoreSlim(0);
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));
Thread receiveThread1 = new Thread(() => ReceiveMessages(playerHost.Value, playerJoin.Value, remoteEndPointJoin, semaphore,true));
Thread receiveThread2 = new Thread(() => {
// Attente pour que le joueur 1 ait envoyé ses données avant de démarrer la réception des données du joueur 2
semaphore.Wait();
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore);
});
receiveThread1.Start();
receiveThread2.Start();
semaphore.Release();
Thread receiveThread2 = new Thread(() =>
{
ReceiveMessages(playerJoin.Value, playerHost.Value, remoteEndPointHost, semaphore,false);
});
receiveThread1.Start();
receiveThread2.Start();
receiveThread1.Join();
receiveThread2.Join();
}
receiveThread1.Join();
receiveThread2.Join();
}
});
}
}
}

@ -15,6 +15,7 @@ namespace Shared.DTO
SendPlayer,
RecivePlayer,
SendEntities
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;
}
}
}

@ -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