Merge remote-tracking branch 'origin/WORK-KEV' into tests_merging

WORK-KMO2
Antoine PEREDERII 1 year ago
commit 26734676a9

@ -1,3 +1,16 @@
# EF_WebAPI
This repository make a meeting of EF and WebAPI parts.
This repository make a meeting of EF and WebAPI parts.
FROM /src dir
do
```bash
dotnet ef migrations add --project StubbedContextLib/StubbedContextLib.csproj --startup-project HeartTrackAPI/HeartTrackAPI.csproj --context StubbedContextLib.TrainingStubbedContext --configuration Debug Initial --output-dir Migrations
```
then
```bash
dotnet ef database update --project StubbedContextLib/StubbedContextLib.csproj --startup-project HeartTrackAPI/HeartTrackAPI.csproj --context StubbedContextLib.TrainingStubbedContext --configuration Debug
```

@ -3,52 +3,49 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbContextLib", "DbContextLib\DbContextLib.csproj", "{330A5DA0-0B4E-48D4-9AF3-6DCB39EE9622}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbContextLib", "DbContextLib\DbContextLib.csproj", "{330A5DA0-0B4E-48D4-9AF3-6DCB39EE9622}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entities", "Entities\Entities.csproj", "{A07F86B3-555B-4B35-8BB1-25E844825A38}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Entities", "Entities\Entities.csproj", "{A07F86B3-555B-4B35-8BB1-25E844825A38}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StubbedContextLib", "StubbedContextLib\StubbedContextLib.csproj", "{2F44DE6E-EFFC-42FE-AFF6-79CDC762E6D8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StubbedContextLib", "StubbedContextLib\StubbedContextLib.csproj", "{2F44DE6E-EFFC-42FE-AFF6-79CDC762E6D8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestEntities", "Tests\ConsoleTestEntities\ConsoleTestEntities.csproj", "{477D2129-A6C9-4FF8-8BE9-5E9E8E5282F8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTestEntities", "Tests\ConsoleTestEntities\ConsoleTestEntities.csproj", "{477D2129-A6C9-4FF8-8BE9-5E9E8E5282F8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestRelationships", "Tests\ConsoleTestRelationships\ConsoleTestRelationships.csproj", "{2D166FAD-4934-474B-96A8-6C0635156EC2}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTestRelationships", "Tests\ConsoleTestRelationships\ConsoleTestRelationships.csproj", "{2D166FAD-4934-474B-96A8-6C0635156EC2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dto", "Dto\Dto.csproj", "{562019BC-0F61-41B0-9BAE-259B92C6BFBA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dto", "Dto\Dto.csproj", "{562019BC-0F61-41B0-9BAE-259B92C6BFBA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeartTrackAPI", "HeartTrackAPI\HeartTrackAPI.csproj", "{C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeartTrackAPI", "HeartTrackAPI\HeartTrackAPI.csproj", "{C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestsAPI", "TestsAPI", "{30FC2BE9-7397-445A-84AD-043CE70F4281}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientTests", "Tests\TestsAPI\ClientTests\ClientTests.csproj", "{9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientTests", "Tests\TestsAPI\ClientTests\ClientTests.csproj", "{9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{30AB7FAA-6072-40B6-A15E-9188B59144F9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{30AB7FAA-6072-40B6-A15E-9188B59144F9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestApi", "Tests\TestsAPI\UnitTestApi\UnitTestApi.csproj", "{E515C8B6-6282-4D8B-8523-7B3A13E4AF58}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTestApi", "Tests\TestsAPI\UnitTestApi\UnitTestApi.csproj", "{E515C8B6-6282-4D8B-8523-7B3A13E4AF58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestsEntities", "Tests\UnitTestsEntities\UnitTestsEntities.csproj", "{31FA8E5E-D642-4C43-A2B2-02B9832B2CEC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTestsEntities", "Tests\UnitTestsEntities\UnitTestsEntities.csproj", "{31FA8E5E-D642-4C43-A2B2-02B9832B2CEC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model2Entities", "Model2Entities\Model2Entities.csproj", "{FA329DEF-4756-4A8B-84E9-5A625FF94CBF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model2Entities", "Model2Entities\Model2Entities.csproj", "{FA329DEF-4756-4A8B-84E9-5A625FF94CBF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StubAPI", "StubAPI\StubAPI.csproj", "{C9BD0310-DC18-4356-B8A7-2B6959AF7813}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StubAPI", "StubAPI\StubAPI.csproj", "{C9BD0310-DC18-4356-B8A7-2B6959AF7813}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestEFMapper", "Tests\ConsoleTestEFMapper\ConsoleTestEFMapper.csproj", "{73EA27F2-9F0C-443F-A5EE-2960C983A422}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTestEFMapper", "Tests\ConsoleTestEFMapper\ConsoleTestEFMapper.csproj", "{73EA27F2-9F0C-443F-A5EE-2960C983A422}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFMappers", "EFMappers\EFMappers.csproj", "{9397795D-F482-44C4-8443-A20AC26671AA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EFMappers", "EFMappers\EFMappers.csproj", "{9397795D-F482-44C4-8443-A20AC26671AA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "APIMappers", "APIMappers\APIMappers.csproj", "{41D18203-1688-43BD-A3AC-FD0C2BD81909}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIMappers", "APIMappers\APIMappers.csproj", "{41D18203-1688-43BD-A3AC-FD0C2BD81909}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{330A5DA0-0B4E-48D4-9AF3-6DCB39EE9622}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{330A5DA0-0B4E-48D4-9AF3-6DCB39EE9622}.Debug|Any CPU.Build.0 = Debug|Any CPU
@ -90,14 +87,6 @@ Global
{30AB7FAA-6072-40B6-A15E-9188B59144F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30AB7FAA-6072-40B6-A15E-9188B59144F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30AB7FAA-6072-40B6-A15E-9188B59144F9}.Release|Any CPU.Build.0 = Release|Any CPU
{CB142F6B-0FF1-45B3-AB46-6F8DCD096C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB142F6B-0FF1-45B3-AB46-6F8DCD096C20}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB142F6B-0FF1-45B3-AB46-6F8DCD096C20}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB142F6B-0FF1-45B3-AB46-6F8DCD096C20}.Release|Any CPU.Build.0 = Release|Any CPU
{B9679DCA-F4C8-45BE-A849-44E2BA814083}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B9679DCA-F4C8-45BE-A849-44E2BA814083}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9679DCA-F4C8-45BE-A849-44E2BA814083}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9679DCA-F4C8-45BE-A849-44E2BA814083}.Release|Any CPU.Build.0 = Release|Any CPU
{E515C8B6-6282-4D8B-8523-7B3A13E4AF58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E515C8B6-6282-4D8B-8523-7B3A13E4AF58}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E515C8B6-6282-4D8B-8523-7B3A13E4AF58}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -114,18 +103,10 @@ Global
{C9BD0310-DC18-4356-B8A7-2B6959AF7813}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9BD0310-DC18-4356-B8A7-2B6959AF7813}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9BD0310-DC18-4356-B8A7-2B6959AF7813}.Release|Any CPU.Build.0 = Release|Any CPU
{06DBE9E4-6AA5-4D09-8544-D3ED91E2D980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06DBE9E4-6AA5-4D09-8544-D3ED91E2D980}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06DBE9E4-6AA5-4D09-8544-D3ED91E2D980}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06DBE9E4-6AA5-4D09-8544-D3ED91E2D980}.Release|Any CPU.Build.0 = Release|Any CPU
{73EA27F2-9F0C-443F-A5EE-2960C983A422}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73EA27F2-9F0C-443F-A5EE-2960C983A422}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73EA27F2-9F0C-443F-A5EE-2960C983A422}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73EA27F2-9F0C-443F-A5EE-2960C983A422}.Release|Any CPU.Build.0 = Release|Any CPU
{C9C9F2A5-9132-4067-B240-B299D2FCF4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9C9F2A5-9132-4067-B240-B299D2FCF4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9C9F2A5-9132-4067-B240-B299D2FCF4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9C9F2A5-9132-4067-B240-B299D2FCF4E9}.Release|Any CPU.Build.0 = Release|Any CPU
{9397795D-F482-44C4-8443-A20AC26671AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9397795D-F482-44C4-8443-A20AC26671AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9397795D-F482-44C4-8443-A20AC26671AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -135,6 +116,9 @@ Global
{41D18203-1688-43BD-A3AC-FD0C2BD81909}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41D18203-1688-43BD-A3AC-FD0C2BD81909}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{477D2129-A6C9-4FF8-8BE9-5E9E8E5282F8} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{2D166FAD-4934-474B-96A8-6C0635156EC2} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
@ -144,4 +128,7 @@ Global
{31FA8E5E-D642-4C43-A2B2-02B9832B2CEC} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{73EA27F2-9F0C-443F-A5EE-2960C983A422} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0F3487F4-66CA-4034-AC66-1BC899C9B523}
EndGlobalSection
EndGlobal

@ -14,10 +14,6 @@
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.1.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
</ItemGroup>

@ -13,11 +13,4 @@
<ProjectReference Include="..\StubbedContextLib\StubbedContextLib.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>

@ -7,10 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>

@ -6,13 +6,6 @@
<ProjectReference Include="..\..\StubbedContextLib\StubbedContextLib.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>

@ -5,13 +5,6 @@
<ProjectReference Include="..\..\StubbedContextLib\StubbedContextLib.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>

@ -0,0 +1,223 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
using Microsoft.Data.Sqlite;
public class ActivityEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Activity_Success()
{
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedActivity = context.ActivitiesSet.First(a => a.Type == "Running");
Assert.NotNull(savedActivity);
Assert.Equal("Running", savedActivity.Type );
}
}
[Fact]
public void Update_Activity_Success()
{
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedActivity = context.ActivitiesSet.FirstOrDefault(a => a.Type == "Running" && a.Maximum == 200);
savedActivity.Type = "Walking";
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedActivity = context.ActivitiesSet.First(a => a.Type == "Walking" && a.Maximum == 200);
Assert.NotNull(updatedActivity);
Assert.Equal("Walking", updatedActivity.Type );
Assert.Equal(7, updatedActivity.EffortFelt );
}
}
[Fact]
public void Delete_Activity_Success()
{
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedActivity = context.ActivitiesSet.FirstOrDefault(a => a.Type == "Running" && a.EffortFelt == 7);
context.ActivitiesSet.Remove(savedActivity);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedActivity = context.ActivitiesSet.FirstOrDefault(a => a.Type == "Running" && a.EffortFelt == 7);
Assert.Null(deletedActivity);
}
}
[Fact]
public void Add_Activity_With_All_Properties_Success()
{
// Arrange
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
// Act
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.SaveChanges();
}
// Assert
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedActivity = context.ActivitiesSet.First(a => a.Type == "Running" && a.Date == new DateOnly(2024, 3, 15));
Assert.NotNull(savedActivity);
Assert.Equal("Running", savedActivity.Type);
Assert.Equal(new DateOnly(2024, 3, 15), savedActivity.Date);
Assert.Equal(new TimeOnly(9, 0), savedActivity.StartTime);
Assert.Equal(new TimeOnly(10, 0), savedActivity.EndTime);
Assert.Equal(7, savedActivity.EffortFelt);
Assert.Equal(0.5f, savedActivity.Variability);
Assert.Equal(0.2f, savedActivity.Variance);
Assert.Equal(0.3f, savedActivity.StandardDeviation);
Assert.Equal(0.4f, savedActivity.Average);
Assert.Equal(200, savedActivity.Maximum);
Assert.Equal(100, savedActivity.Minimum);
Assert.Equal(25.5f, savedActivity.AverageTemperature);
Assert.True(savedActivity.HasAutoPause);
Assert.Equal(1, savedActivity.DataSourceId);
Assert.Equal(1, savedActivity.AthleteId);
}
}
// Test for error cases, e.g., null values
[Fact]
public void Add_Activity_With_Null_Values_Fails()
{
var activity = new ActivityEntity
{
Type = null,
Date = default,
StartTime = default,
EndTime = default,
EffortFelt = 0,
Variability = 0,
Variance = 0,
StandardDeviation = 0,
Average = 0,
Maximum = 0,
Minimum = 0,
AverageTemperature = 0,
HasAutoPause = false,
DataSourceId = 0,
AthleteId = 0
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
Assert.Throws<DbUpdateException>(() => context.SaveChanges());
}
}
}

@ -0,0 +1,187 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class AthleteEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Athlete_Success()
{
var athlete = new AthleteEntity
{
Username = "john_doe",
LastName = "Doe",
FirstName = "John",
Email = "john.doe@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.5f,
Password = "password",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedAthlete = context.AthletesSet.First(a => a.Username == "john_doe");
Assert.NotNull(savedAthlete);
Assert.Equal("john_doe", savedAthlete.Username);
}
}
[Fact]
public void Update_Athlete_Success()
{
var athlete = new AthleteEntity
{
Username = "jane_smith",
LastName = "Smith",
FirstName = "Jane",
Email = "jane.smith@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "password123",
DateOfBirth = new DateOnly(1995, 5, 10),
IsCoach = false
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedAthlete = context.AthletesSet.First(a => a.Username == "jane_smith");
savedAthlete.Username = "jane_doe";
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedAthlete = context.AthletesSet.First(a => a.Username == "jane_doe");
Assert.NotNull(updatedAthlete);
Assert.Equal("jane_doe", updatedAthlete.Username);
Assert.Equal("Smith", updatedAthlete.LastName);
}
}
[Fact]
public void Delete_Athlete_Success()
{
var athlete = new AthleteEntity
{
Username = "test_user",
LastName = "Test",
FirstName = "User",
Email = "test.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "testpassword",
DateOfBirth = new DateOnly(1985, 10, 20),
IsCoach = false
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedAthlete = context.AthletesSet.First(a => a.Username == "test_user");
context.AthletesSet.Remove(savedAthlete);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedAthlete = context.AthletesSet.FirstOrDefault(a => a.Username == "test_user");
Assert.Null(deletedAthlete);
}
}
[Fact]
public void Add_Athlete_With_All_Properties_Success()
{
var athlete = new AthleteEntity
{
Username = "john_doe",
LastName = "Doe",
FirstName = "John",
Email = "john.doe@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.5f,
Password = "password",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedAthlete = context.AthletesSet.First(a => a.Username == "john_doe");
Assert.NotNull(savedAthlete);
Assert.Equal("john_doe", savedAthlete.Username);
Assert.Equal("Doe", savedAthlete.LastName);
Assert.Equal("John", savedAthlete.FirstName);
Assert.Equal("john.doe@example.com", savedAthlete.Email);
Assert.Equal("M", savedAthlete.Sexe);
Assert.Equal(180.0, savedAthlete.Length);
Assert.Equal(75.5f, savedAthlete.Weight);
Assert.Equal("password", savedAthlete.Password);
Assert.Equal(new DateOnly(1990, 1, 1), savedAthlete.DateOfBirth);
Assert.False(savedAthlete.IsCoach);
}
}
[Fact]
public void Add_Athlete_With_Null_Values_Fails()
{
var athlete = new AthleteEntity
{
Username = null,
LastName = null,
FirstName = null,
Email = null,
Sexe = null,
Length = 0,
Weight = 0,
Password = null,
DateOfBirth = default,
IsCoach = false
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
Assert.Throws<DbUpdateException>(() => context.SaveChanges());
}
}
}

@ -0,0 +1,144 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class DataSourceEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_DataSource_Success()
{
var dataSource = new DataSourceEntity
{
Type = "GPS",
Model = "Garmin Forerunner 945",
Precision = 0.1f
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.DataSourcesSet.Add(dataSource);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedDataSource = context.DataSourcesSet.First(d => d.Type == "GPS");
Assert.NotNull(savedDataSource);
Assert.Equal("Garmin Forerunner 945", savedDataSource.Model);
}
}
[Fact]
public void Update_DataSource_Success()
{
var dataSource = new DataSourceEntity
{
Type = "Heart Rate Monitor",
Model = "Polar H10",
Precision = 0.2f
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.DataSourcesSet.Add(dataSource);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedDataSource = context.DataSourcesSet.First(d => d.Type == "Heart Rate Monitor");
savedDataSource.Model = "Polar H9";
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedDataSource = context.DataSourcesSet.First(d => d.Model == "Polar H9");
Assert.NotNull(updatedDataSource);
Assert.Equal("Heart Rate Monitor", updatedDataSource.Type);
Assert.Equal(0.2f, updatedDataSource.Precision);
}
}
[Fact]
public void Delete_DataSource_Success()
{
var dataSource = new DataSourceEntity
{
Type = "Smartwatch",
Model = "Apple Watch Series 6",
Precision = 0.05f
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.DataSourcesSet.Add(dataSource);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedDataSource = context.DataSourcesSet.First(d => d.Type == "Smartwatch" && d.Model == "Apple Watch Series 6");
context.DataSourcesSet.Remove(savedDataSource);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedDataSource = context.DataSourcesSet.FirstOrDefault(d => d.Type == "Smartwatch" && d.Model == "Apple Watch Series 6");
Assert.Null(deletedDataSource);
}
}
[Fact]
public void Add_DataSource_With_All_Properties_Success()
{
var dataSource = new DataSourceEntity
{
Type = "GPS",
Model = "Garmin Forerunner 945",
Precision = 0.1f
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.DataSourcesSet.Add(dataSource);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedDataSource = context.DataSourcesSet.First(d => d.Type == "GPS");
Assert.NotNull(savedDataSource);
Assert.Equal("GPS", savedDataSource.Type);
Assert.Equal("Garmin Forerunner 945", savedDataSource.Model);
Assert.Equal(0.1f, savedDataSource.Precision);
}
}
[Fact]
public void Add_DataSource_With_Null_Values_Fails()
{
var dataSource = new DataSourceEntity
{
Type = null,
Model = null,
Precision = 0
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.DataSourcesSet.Add(dataSource);
Assert.Throws<DbUpdateException>(() => context.SaveChanges());
}
}
}

@ -0,0 +1,27 @@
using DbContextLib;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
namespace UnitTestsEntities;
public class DatabaseFixture : IDisposable
{
private readonly SqliteConnection _connection;
public readonly DbContextOptions<HeartTrackContext> _options;
public DatabaseFixture()
{
_connection = new SqliteConnection("DataSource=:memory:");
_connection.Open();
_options = new DbContextOptionsBuilder<HeartTrackContext>()
.UseSqlite(_connection)
.Options;
}
public void Dispose()
{
_connection.Close();
_connection.Dispose();
}
}

@ -0,0 +1,206 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class FriendshipEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Friendship_Success()
{
var follower = new AthleteEntity
{
Username = "follower_user1",
LastName = "Follower",
FirstName = "User",
Email = "follower.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "followerpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var following = new AthleteEntity
{
Username = "following_user1",
LastName = "Following",
FirstName = "User",
Email = "following.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "followingpassword",
DateOfBirth = new DateOnly(1995, 5, 10),
IsCoach = false,
Followers = (ICollection<FriendshipEntity>)follower
};
var friendship = new FriendshipEntity
{
Follower = follower,
Following = following,
StartDate = DateTime.Now
};
//Cast impossible entre Entities.AthleteEntity & System.Collections.Generic.ICollection ; Idem pour Update et Delete mais pas modif vu que ca ne fonctionne pas
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(follower);
context.AthletesSet.Add(following);
var follow = context.AthletesSet.FirstOrDefault(a => a.Username == "following_user1");
follow.Followings = (ICollection<FriendshipEntity>)following;
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedAth1 = context.AthletesSet.FirstOrDefault(a => a.Username == "following_user1");
var savedAth2 = context.AthletesSet.FirstOrDefault(a => a.Username == "follower_user1");
Assert.Equal(savedAth2, friendship.Follower);
Assert.Equal(savedAth1, friendship.Following);
}
}
[Fact]
public void Update_Friendship_Success()
{
var follower = new AthleteEntity
{
Username = "follower_user",
LastName = "Follower",
FirstName = "User",
Email = "follower.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "followerpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var following = new AthleteEntity
{
Username = "following_user",
LastName = "Following",
FirstName = "User",
Email = "following.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "followingpassword",
DateOfBirth = new DateOnly(1995, 5, 10),
IsCoach = false
};
var thirdAthlete = new AthleteEntity
{
Username = "third_user",
LastName = "Third",
FirstName = "User",
Email = "third.user@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.0f,
Password = "thirdpassword",
DateOfBirth = new DateOnly(1988, 3, 15),
IsCoach = false
};
var friendship = new FriendshipEntity
{
Follower = follower,
Following = following,
StartDate = DateTime.Now
};/*
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(follower);
context.AthletesSet.Add(following);
context.AthletesSet.Add(thirdAthlete);
context.Friendships.Add(friendship);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedFriendship = context.Friendships.FirstOrDefault();
savedFriendship.Follower = thirdAthlete; // Update the follower
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedFriendship = context.Friendships.FirstOrDefault();
Assert.NotNull(updatedFriendship);
Assert.Equal(thirdAthlete.IdAthlete, updatedFriendship.FollowerId);
}*/
}
[Fact]
public void Delete_Friendship_Success()
{
// Act
var follower = new AthleteEntity
{
Username = "follower_user",
LastName = "Follower",
FirstName = "User",
Email = "follower.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "followerpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var following = new AthleteEntity
{
Username = "following_user",
LastName = "Following",
FirstName = "User",
Email = "following.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "followingpassword",
DateOfBirth = new DateOnly(1995, 5, 10),
IsCoach = false
};
/*
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(follower);
context.AthletesSet.Add(following);
context.SaveChanges();
var user1 = context.AthletesSet.FirstOrDefault(a => a.IdAthlete == follower.IdAthlete);
var user2 = context.AthletesSet.FirstOrDefault(a => a.IdAthlete == following.IdAthlete);
user1.Followers = user2.IdAthlete;
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedFriendship = context.Friendships.FirstOrDefault();
context.Friendships.Remove(savedFriendship);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedFriendship = context.Friendships.FirstOrDefault();
Assert.Null(deletedFriendship);
}*/
}
}

@ -0,0 +1,230 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class HeartRateEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_HeartRate_Success()
{
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
var heartRateEntry = new HeartRateEntity
{
Altitude = 100.0,
Time = new TimeOnly(9, 30),
Temperature = 20.0f,
Bpm = 150,
Longitude = 45.12345f,
Latitude = 35.6789f,
Activity = activity
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.HeartRatesSet.Add(heartRateEntry);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedHeartRate = context.HeartRatesSet.FirstOrDefault(h => h.Altitude == 100.0 && h.Temperature == 20.0f);
Assert.NotNull(savedHeartRate);
Assert.Equal(150, savedHeartRate.Bpm);
}
}
[Fact]
public void Update_HeartRate_Success()
{
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
var heartRateEntry = new HeartRateEntity
{
Altitude = 100.0,
Time = new TimeOnly(9, 30),
Temperature = 20.0f,
Bpm = 150,
Longitude = 45.12345f,
Latitude = 35.6789f,
Activity = activity
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.HeartRatesSet.Add(heartRateEntry);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedHeartRate = context.HeartRatesSet.First();
savedHeartRate.Bpm = 160;
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedHeartRate = context.HeartRatesSet.First();
Assert.NotNull(updatedHeartRate);
Assert.Equal(160, updatedHeartRate.Bpm);
}
}
[Fact]
public void Delete_HeartRate_Success()
{
var activity = new ActivityEntity
{
Type = "Run",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
var heartRateEntry = new HeartRateEntity
{
Altitude = 105.0,
Time = new TimeOnly(9, 30),
Temperature = 20.0f,
Bpm = 150,
Longitude = 45.12345f,
Latitude = 35.6789f,
Activity = activity
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.HeartRatesSet.Add(heartRateEntry);
context.SaveChanges();
}
// Ne veut pas passer, si quelqu'un sait pourquoi ... Erreur : System.ArgumentNullException : Value cannot be null. (Parameter 'entity')
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedHeartRate = context.HeartRatesSet.FirstOrDefault(h => h.Altitude == 105.0);
var savedActivity = context.ActivitiesSet.FirstOrDefault(a => a.Type == "Run" && a.EffortFelt == 7 && a.Average == 0.4f);
context.HeartRatesSet.Remove(savedHeartRate);
context.ActivitiesSet.Remove(savedActivity);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedHeartRate = context.HeartRatesSet.FirstOrDefault(h => h.Altitude == 105.0);
Assert.Null(deletedHeartRate);
}
}
[Fact]
public void Add_HeartRate_With_All_Properties_Success()
{
// Arrange
var activity = new ActivityEntity
{
Type = "Running",
Date = new DateOnly(2024, 3, 15),
StartTime = new TimeOnly(9, 0),
EndTime = new TimeOnly(10, 0),
EffortFelt = 7,
Variability = 0.5f,
Variance = 0.2f,
StandardDeviation = 0.3f,
Average = 0.4f,
Maximum = 200,
Minimum = 100,
AverageTemperature = 25.5f,
HasAutoPause = true,
DataSourceId = 1,
AthleteId = 1
};
var heartRateEntry = new HeartRateEntity
{
Altitude = 100.0,
Time = new TimeOnly(9, 30),
Temperature = 20.0f,
Bpm = 150,
Longitude = 45.12345f,
Latitude = 35.6789f,
Activity = activity
};
// Act
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.ActivitiesSet.Add(activity);
context.HeartRatesSet.Add(heartRateEntry);
context.SaveChanges();
}
// Assert
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedHeartRate = context.HeartRatesSet.FirstOrDefault(h => h.Altitude == 100.0 && h.Temperature == 20.0f);
Assert.NotNull(savedHeartRate);
Assert.Equal(100.0, savedHeartRate.Altitude);
Assert.Equal(new TimeOnly(9, 30), savedHeartRate.Time);
Assert.Equal(20.0f, savedHeartRate.Temperature);
Assert.Equal(150, savedHeartRate.Bpm);
Assert.Equal(45.12345f, savedHeartRate.Longitude);
Assert.Equal(35.6789f, savedHeartRate.Latitude);
}
}
}

@ -0,0 +1,214 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class NotificationEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Notification_Success()
{
var sender = new AthleteEntity
{
Username = "sender_user",
LastName = "Sender",
FirstName = "User",
Email = "sender.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "senderpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var notification = new NotificationEntity
{
Message = "Test notification",
Date = DateTime.Now,
Statut = false,
Urgence = "High",
Sender = sender
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(sender);
context.NotificationsSet.Add(notification);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedNotification = context.NotificationsSet.FirstOrDefault(n => n.Message == "Test notification" && n.Statut == false && n.Urgence == "High");
Assert.NotNull(savedNotification);
Assert.Equal("Test notification", savedNotification.Message);
}
}
[Fact]
public void Update_Notification_Success()
{
var sender = new AthleteEntity
{
Username = "sender_user",
LastName = "Sender",
FirstName = "User",
Email = "sender.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "senderpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var notification = new NotificationEntity
{
Message = "Test notification",
Date = DateTime.Now,
Statut = false,
Urgence = "High",
Sender = sender
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(sender);
context.NotificationsSet.Add(notification);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedNotification = context.NotificationsSet.First();
savedNotification.Message = "Updated message";
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedNotification = context.NotificationsSet.First();
Assert.NotNull(updatedNotification);
Assert.Equal("Updated message", updatedNotification.Message);
}
}
[Fact]
public void Delete_Notification_Success()
{
var sender = new AthleteEntity
{
Username = "sender_user",
LastName = "Sender",
FirstName = "User",
Email = "sender.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "senderpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var notification = new NotificationEntity
{
Message = "Test notification Suppression",
Date = DateTime.Now,
Statut = false,
Urgence = "High",
Sender = sender
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(sender);
context.NotificationsSet.Add(notification);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedNotification = context.NotificationsSet.FirstOrDefault(n => n.Message == "Test notification Suppression");
context.NotificationsSet.Remove(savedNotification);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedNotification = context.NotificationsSet.FirstOrDefault(n => n.Message == "Test notification Suppression");
Assert.Null(deletedNotification);
}
}
[Fact]
public void Add_Notification_With_All_Properties_Success()
{
var sender = new AthleteEntity
{
Username = "sender_user",
LastName = "Sender",
FirstName = "User",
Email = "sender.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "senderpassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var notification = new NotificationEntity
{
Message = "Test notification",
Date = DateTime.Now,
Statut = false,
Urgence = "High",
Sender = sender
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(sender);
context.NotificationsSet.Add(notification);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedNotification = context.NotificationsSet.FirstOrDefault(n => n.Message == "Test notification" && n.Statut == false && n.Urgence == "High");
Assert.NotNull(savedNotification);
Assert.Equal("Test notification", savedNotification.Message);
Assert.Equal(DateTime.Today, savedNotification.Date.Date);
Assert.False(savedNotification.Statut);
Assert.Equal("High", savedNotification.Urgence);
}
}
[Fact]
public void Add_Notification_With_Null_Values_Fails()
{
var notification = new NotificationEntity
{
Message = null,
Date = default,
Statut = false,
Urgence = null,
Sender = null
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.NotificationsSet.Add(notification);
Assert.Throws<DbUpdateException>(() => context.SaveChanges());
}
}
}

@ -0,0 +1,202 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class StatisticEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Statistic_Success()
{
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var statistic = new StatisticEntity
{
Weight = 75.0f,
AverageHeartRate = 150.0,
MaximumHeartRate = 180.0,
AverageCaloriesBurned = 500.0,
Date = new DateOnly(2024, 3, 15),
Athlete = athlete
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.StatisticsSet.Add(statistic);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedStatistic = context.StatisticsSet.FirstOrDefault(s => s.AverageHeartRate == 150.0 && s.MaximumHeartRate == 180.0);
Assert.NotNull(savedStatistic);
Assert.Equal(75.0f, savedStatistic.Weight);
}
}
[Fact]
public void Update_Statistic_Success()
{
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var statistic = new StatisticEntity
{
Weight = 75.0f,
AverageHeartRate = 150.0,
MaximumHeartRate = 180.0,
AverageCaloriesBurned = 500.0,
Date = new DateOnly(2024, 3, 15),
Athlete = athlete
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.StatisticsSet.Add(statistic);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedStatistic = context.StatisticsSet.First();
savedStatistic.Weight = 80.0f;
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedStatistic = context.StatisticsSet.First();
Assert.NotNull(updatedStatistic);
Assert.Equal(80.0f, updatedStatistic.Weight);
}
}
[Fact]
public void Delete_Statistic_Success()
{
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var statistic = new StatisticEntity
{
Weight = 85.0f,
AverageHeartRate = 150.0,
MaximumHeartRate = 180.0,
AverageCaloriesBurned = 500.0,
Date = new DateOnly(2024, 3, 15),
Athlete = athlete
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.StatisticsSet.Add(statistic);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedStatistic = context.StatisticsSet.FirstOrDefault(s => s.Weight == 85.0 );
context.StatisticsSet.Remove(savedStatistic);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedStatistic = context.StatisticsSet.FirstOrDefault(s => s.Weight == 85.0 );
Assert.Null(deletedStatistic);
}
}
[Fact]
public void Add_Statistic_With_All_Properties_Success()
{
// Arrange
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "M",
Length = 170.0,
Weight = 70.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 1, 1),
IsCoach = false
};
var statistic = new StatisticEntity
{
Weight = 75.0f,
AverageHeartRate = 150.0,
MaximumHeartRate = 180.0,
AverageCaloriesBurned = 500.0,
Date = new DateOnly(2024, 3, 15),
Athlete = athlete
};
// Act
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(athlete);
context.StatisticsSet.Add(statistic);
context.SaveChanges();
}
// Assert
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedStatistic = context.StatisticsSet.FirstOrDefault(s => s.AverageHeartRate == 150.0 && s.MaximumHeartRate == 180.0);
Assert.NotNull(savedStatistic);
Assert.Equal(75.0f, savedStatistic.Weight);
Assert.Equal(150.0, savedStatistic.AverageHeartRate);
Assert.Equal(180.0, savedStatistic.MaximumHeartRate);
Assert.Equal(500.0, savedStatistic.AverageCaloriesBurned);
Assert.Equal(new DateOnly(2024, 3, 15), savedStatistic.Date);
}
}
}

@ -0,0 +1,285 @@
namespace UnitTestsEntities;
using Xunit;
using System.Linq;
using Entities;
using Microsoft.EntityFrameworkCore;
using StubbedContextLib;
public class TrainingEntityTests (DatabaseFixture fixture) : IClassFixture<DatabaseFixture>
{
[Fact]
public void Add_Training_Success()
{
var coach = new AthleteEntity
{
Username = "coach_user",
LastName = "Coach",
FirstName = "User",
Email = "coach.user@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.0f,
Password = "coachpassword",
DateOfBirth = new DateOnly(1985, 5, 15),
IsCoach = true
};
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 3, 20),
IsCoach = false
};
var training = new TrainingEntity
{
Date = new DateOnly(2024, 3, 15),
Description = "Training Description",
Latitude = 40.12345f,
Longitude = -74.56789f,
FeedBack = "Training feedback",
Coach = coach,
Athletes = { athlete }
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(coach);
context.AthletesSet.Add(athlete);
context.TrainingsSet.Add(training);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedTraining = context.TrainingsSet.FirstOrDefault(t => t.Description == "Training Description" && t.FeedBack == "Training feedback");
Assert.NotNull(savedTraining);
Assert.Equal("Training Description", savedTraining.Description);
}
}
[Fact]
public void Update_Training_Success()
{
var coach = new AthleteEntity
{
Username = "coach_user",
LastName = "Coach",
FirstName = "User",
Email = "coach.user@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.0f,
Password = "coachpassword",
DateOfBirth = new DateOnly(1985, 5, 15),
IsCoach = true
};
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 3, 20),
IsCoach = false
};
var training = new TrainingEntity
{
Date = new DateOnly(2024, 3, 15),
Description = "Training description",
Latitude = 40.12345f,
Longitude = -74.56789f,
FeedBack = "Training feedback",
Coach = coach,
Athletes = { athlete }
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(coach);
context.AthletesSet.Add(athlete);
context.TrainingsSet.Add(training);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedTraining = context.TrainingsSet.First();
savedTraining.Description = "Updated training description";
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var updatedTraining = context.TrainingsSet.First();
Assert.NotNull(updatedTraining);
Assert.Equal("Updated training description", updatedTraining.Description);
}
}
[Fact]
public void Delete_Training_Success()
{
var coach = new AthleteEntity
{
Username = "coach_user",
LastName = "Coach",
FirstName = "User",
Email = "coach.user@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.0f,
Password = "coachpassword",
DateOfBirth = new DateOnly(1985, 5, 15),
IsCoach = true
};
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 3, 20),
IsCoach = false
};
var training = new TrainingEntity
{
Date = new DateOnly(2024, 3, 15),
Description = "Training description suppression",
Latitude = 40.12345f,
Longitude = -74.56789f,
FeedBack = "Training feedback suppression",
Coach = coach,
Athletes = { athlete }
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(coach);
context.AthletesSet.Add(athlete);
context.TrainingsSet.Add(training);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedTraining = context.TrainingsSet.FirstOrDefault(t => t.Description == "Training description suppression" && t.FeedBack == "Training feedback suppression");
context.TrainingsSet.Remove(savedTraining);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var deletedTraining = context.TrainingsSet.FirstOrDefault(t => t.Description == "Training description suppression" && t.FeedBack == "Training feedback suppression");
Assert.Null(deletedTraining);
}
}
[Fact]
public void Add_Training_With_All_Properties_Success()
{
var coach = new AthleteEntity
{
Username = "coach_user",
LastName = "Coach",
FirstName = "User",
Email = "coach.user@example.com",
Sexe = "M",
Length = 180.0,
Weight = 75.0f,
Password = "coachpassword",
DateOfBirth = new DateOnly(1985, 5, 15),
IsCoach = true
};
var athlete = new AthleteEntity
{
Username = "athlete_user",
LastName = "Athlete",
FirstName = "User",
Email = "athlete.user@example.com",
Sexe = "F",
Length = 165.0,
Weight = 60.0f,
Password = "athletepassword",
DateOfBirth = new DateOnly(1990, 3, 20),
IsCoach = false
};
var training = new TrainingEntity
{
Date = new DateOnly(2024, 3, 15),
Description = "Training DescriptionAll",
Latitude = 40.12345f,
Longitude = -74.56789f,
FeedBack = "Training feedbackAll",
Coach = coach,
Athletes = { athlete }
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.AthletesSet.Add(coach);
context.AthletesSet.Add(athlete);
context.TrainingsSet.Add(training);
context.SaveChanges();
}
using (var context = new TrainingStubbedContext(fixture._options))
{
var savedTraining = context.TrainingsSet.FirstOrDefault(t => t.Description == "Training DescriptionAll" && t.FeedBack == "Training feedbackAll");
Assert.NotNull(savedTraining);
Assert.Equal(new DateOnly(2024, 3, 15), savedTraining.Date);
Assert.Equal("Training DescriptionAll", savedTraining.Description);
Assert.Equal(40.12345f, savedTraining.Latitude);
Assert.Equal(-74.56789f, savedTraining.Longitude);
Assert.Equal("Training feedbackAll", savedTraining.FeedBack);
}
}
[Fact]
public void Add_Training_With_Null_Values_Fails()
{
var training = new TrainingEntity
{
Date = default,
Description = null,
Latitude = 45,
Longitude = 45,
FeedBack = null,
Coach = null,
Athletes = null
};
using (var context = new TrainingStubbedContext(fixture._options))
{
context.Database.EnsureCreated();
context.TrainingsSet.Add(training);
Assert.Throws<DbUpdateException>(() => context.SaveChanges());
}
}
}

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

@ -1,15 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
@ -22,4 +27,11 @@
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\EFMappers\EFMappers.csproj" />
<ProjectReference Include="..\..\Entities\Entities.csproj" />
<ProjectReference Include="..\..\Shared\Shared.csproj" />
<ProjectReference Include="..\..\StubbedContextLib\StubbedContextLib.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,11 @@
namespace UnitTestsEntities2
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}

@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
Loading…
Cancel
Save