Création de l'application de tests console du UserController qui est interactive et propose des tests automatiques

pull/23/head
Johnny RATTON 1 year ago
parent d47098ab37
commit d18e2d4e52

@ -8,19 +8,19 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
<ItemGroup>

@ -3,19 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34408.163
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API", "API\API.csproj", "{65F4AE69-E1CA-4B87-BDF0-946A37351BD1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "API", "API\API.csproj", "{65F4AE69-E1CA-4B87-BDF0-946A37351BD1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entities", "EntityFramework\Entities.csproj", "{6D079CDA-C000-4833-98A0-D07D153EA264}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Entities", "EntityFramework\Entities.csproj", "{6D079CDA-C000-4833-98A0-D07D153EA264}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{ADCC427D-A3CD-431C-A90B-F9369C4584E8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{ADCC427D-A3CD-431C-A90B-F9369C4584E8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAPI", "TestAPI\TestAPI.csproj", "{17025B90-8B2A-49E9-97D3-1A84A208DF50}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestAPI", "TestAPI\TestAPI.csproj", "{17025B90-8B2A-49E9-97D3-1A84A208DF50}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestEF", "TestEF\TestEF.csproj", "{54FAD8AF-7601-4C54-8406-D81476A8D7D7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEF", "TestEF\TestEF.csproj", "{54FAD8AF-7601-4C54-8406-D81476A8D7D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbContextLib", "DbContextLib\DbContextLib.csproj", "{BDCB3BFD-B744-4BC0-BCFC-78E08600203A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbContextLib", "DbContextLib\DbContextLib.csproj", "{BDCB3BFD-B744-4BC0-BCFC-78E08600203A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services", "Services\Services.csproj", "{9BD3DCBA-AFD8-47FA-B07C-613B53E63968}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Services", "Services\Services.csproj", "{9BD3DCBA-AFD8-47FA-B07C-613B53E63968}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestConsoleAPI", "TestConsoleAPI\TestConsoleAPI.csproj", "{46376AEF-4093-4AE9-AD2F-F51B541F9C6A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -51,6 +53,10 @@ Global
{9BD3DCBA-AFD8-47FA-B07C-613B53E63968}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BD3DCBA-AFD8-47FA-B07C-613B53E63968}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BD3DCBA-AFD8-47FA-B07C-613B53E63968}.Release|Any CPU.Build.0 = Release|Any CPU
{46376AEF-4093-4AE9-AD2F-F51B541F9C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46376AEF-4093-4AE9-AD2F-F51B541F9C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46376AEF-4093-4AE9-AD2F-F51B541F9C6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46376AEF-4093-4AE9-AD2F-F51B541F9C6A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -7,14 +7,15 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

@ -7,12 +7,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

@ -23,5 +23,18 @@ namespace Model.DTO
Email = email;
IsAdmin = isAdmin;
}
public UserDTO(string username, string password, string email, bool isAdmin)
{
Username = username;
Password = password;
Email = email;
IsAdmin = isAdmin;
}
public override string ToString()
{
return $"{Id}\t{Username}\t{Email}\t{IsAdmin}";
}
}
}

@ -7,12 +7,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

@ -7,12 +7,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

@ -10,19 +10,20 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PackageReference Include="xunit" Version="2.7.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

@ -0,0 +1,319 @@
// See https://aka.ms/new-console-template for more information
using API.Controllers;
using DbContextLib;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Model.DTO;
using Services;
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<UserDbContext>()
.UseSqlite(connection)
.Options;
using ILoggerFactory factory = new LoggerFactory();
ILogger<UserController> logger = factory.CreateLogger<UserController>();
using (var context = new UserDbContext(options))
{
var controller = new UserController(new UserDataService(context), logger);
void PrintUsers()
{
Console.WriteLine();
var users = controller.GetUsers(1, 10) as OkObjectResult;
foreach(var item in users.Value as IEnumerable<UserDTO>)
{
Console.WriteLine(item);
}
}
void SearchUserByUsername()
{
Console.WriteLine("\nVeuillez saisir le pseudonyme de l'utilisateur recherché : ");
var username = Console.ReadLine();
var user = controller.GetUserByUsername(username) as OkObjectResult;
if(user == null)
{
Console.WriteLine("Erreur, la requête n'a rien donné.");
return;
}
Console.WriteLine(user.Value as UserDTO);
}
void SearchUserById()
{
Console.WriteLine("\nVeuillez saisir l'identifiant de l'utilisateur recherché : ");
var id = Console.ReadLine();
var user = controller.GetUserById(int.Parse(id)) as OkObjectResult;
if (user == null)
{
Console.WriteLine("Erreur, la requête n'a rien donné.");
return;
}
Console.WriteLine(user.Value as UserDTO);
}
void AddUser()
{
Console.WriteLine("Veuillez saisir le pseudonyme :");
var username = Console.ReadLine();
Console.WriteLine("Veuillez saisir une adresse email :");
var email = Console.ReadLine();
Console.WriteLine("Veuillez saisir un mot de passe :");
var mdp = Console.ReadLine();
var res = controller.CreateUser(new UserDTO(username, mdp, email, false));
if(res.GetType() == typeof(CreatedResult)) {
Console.WriteLine("\nUtilisateur créé avec succès");
} else
{
Console.WriteLine("\nErreur lors de la création de l'utilisateur !");
}
}
void UpdateUser()
{
Console.WriteLine("Quel est l'identifiant de l'utilisateur à mettre à jour ?");
var id = int.Parse(Console.ReadLine());
var res = (controller.GetUserById(id));
if (res.GetType() == typeof(OkObjectResult)) {
var user = (res as OkObjectResult).Value as UserDTO;
if (user == null) {
Console.WriteLine("Erreur, un problème est survenu");
return;
}
else
{
Console.WriteLine("Utilisateur trouvé !\n");
Console.WriteLine("Veuillez saisir le pseudonyme :");
var username = Console.ReadLine();
Console.WriteLine("Veuillez saisir l'email :");
var email = Console.ReadLine();
var retour = controller.UpdateUser(id, new UserDTO(id, username, user.Password, email, user.IsAdmin));
if(retour.GetType() == typeof(OkObjectResult))
{
Console.WriteLine("Mise à jour effectué avec succès !");
} else
{
Console.WriteLine("Une erreur est survenue lors de la mise à jour.");
}
}
}
else {
Console.WriteLine("Une erreur est survenue lors de la mise à jour !");
}
}
void DeleteUser()
{
Console.WriteLine("Quel est l'identifiant de lutilisateur à supprimer ?");
var id = int.Parse(Console.ReadLine());
var res = controller.DeleteUser(id);
if(res.GetType() == typeof(OkObjectResult))
{
Console.WriteLine("La suppression a été effectuée avec succès !");
}
else
{
Console.WriteLine("Erreur lors de la suppression !");
}
}
void Menu()
{
Console.WriteLine("|------------------------------------------------|");
Console.WriteLine("| Menu |");
Console.WriteLine("|------------------------------------------------|");
Console.WriteLine("| t - Effectuer des tests automatiques |");
Console.WriteLine("| 1 - Afficher les utilisateurs |");
Console.WriteLine("| 2 - Rechercher un utilisateur avec son pseudo |");
Console.WriteLine("| 3 - Rechercher un utilisateur avec son ID |");
Console.WriteLine("| 4 - Ajouter un utilisateur |");
Console.WriteLine("| 5 - Mettre à jour un utilisateur |");
Console.WriteLine("| 6 - Supprimer un utilisateur |");
Console.WriteLine("| q - Quitter |");
Console.WriteLine("|------------------------------------------------|");
}
Menu();
Console.WriteLine("\nSaisie :");
var saisie = Console.ReadLine();
while (saisie != "q") {
switch (saisie)
{
case "1":
PrintUsers();
break;
case "2":
SearchUserByUsername();
break;
case "3":
SearchUserById();
break;
case "4":
AddUser();
break;
case "5":
UpdateUser();
break;
case "6":
DeleteUser();
break;
case "t":
AutoTests();
break;
default:
break;
}
Console.WriteLine("\nAppuyez sur n'importe quelle touche pour continuer...");
Console.ReadKey();
Console.Clear();
Menu();
Console.WriteLine("\nSaisie :");
saisie = Console.ReadLine();
}
void AutoTests()
{
// Affichage des utilisateurs
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Affichages des utilisateurs stubbés dans le contexte :\n");
var res = controller.GetUsers(1, 10) as OkObjectResult;
if(res == null)
{
Console.WriteLine("\nErreur lors de l'acquisition de la liste des utilisateurs");
}
else
{
var users = res.Value as IEnumerable<UserDTO>;
if(users == null) {
Console.WriteLine("\nErreur, les ustilisateurs n'ont pas été trouvés !");
}
else
{
PrintUsers();
}
}
// Recherche d'utilisateur par ID
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Affichage de l'utilisateur ayant pour identifiant 1 :\n");
var res1 = controller.GetUserById(1) as OkObjectResult;
if (res1 == null)
{
Console.WriteLine("\nErreur lors de l'acquisition de l'utilisateur !");
}
else
{
var user = res1.Value as UserDTO;
if (user == null)
{
Console.WriteLine("\nErreur, l'utilisateur n'existe pas !");
}
else
{
Console.WriteLine(user);
}
}
// Recherche d'utilisateur par pseudonyme
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Affichage de l'utilisateur ayant pour username johnny :\n");
var res2 = controller.GetUserByUsername("johnny") as OkObjectResult;
if (res2 == null)
{
Console.WriteLine("\nErreur lors de l'acquisition de l'utilisateur !");
}
else
{
var user1 = res2.Value as UserDTO;
if (user1 == null)
{
Console.WriteLine("\nErreur, l'utilisateur n'existe pas !");
}
else
{
Console.WriteLine(user1);
}
}
// Ajout d'un utilisateur
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Création de l'utilisateur :\n");
var user2 = new UserDTO("JohnDoe", "motdepasse", "johndoe@gmail.com", false);
Console.WriteLine(user2);
var res3 = controller.CreateUser(user2) as CreatedResult;
if (res3 == null)
{
Console.WriteLine("\nErreur lors de la création de l'utilisateur !");
}
else
{
Console.WriteLine("\nUtilisateur créé avec succès !");
}
// Affichage des utilisateurs
Console.WriteLine("\n##########################################################\n");
PrintUsers();
// Mise à jour d'un utilisateur
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Mise à jour de l'adresse email de l'utilisateur :\n");
user2 = ((controller.GetUserByUsername("JohnDoe") as OkObjectResult).Value as UserDTO);
if (user2 == null)
{
Console.WriteLine("\nErreur lors de la récupération de l'utilisateur !");
}
else
{
Console.WriteLine(user2);
Console.WriteLine("\nNouvelle adresse : John.DOE@etu.uca.fr");
var user3 = new UserDTO(user2.Id, user2.Username, user2.Password, "John.DOE@etu.uca.fr", user2.IsAdmin);
var res4 = controller.UpdateUser(user2.Id, user3) as OkObjectResult;
if (res4 == null)
{
Console.WriteLine("\nErreur lors de la mise à jour de l'utilisateur !");
}
else
{
Console.WriteLine("\nUtilisateur mis à jour avec succès !");
}
}
// Affichage des utilisateurs
Console.WriteLine("\n##########################################################\n");
PrintUsers();
// Suppression d'un utilisateur
Console.WriteLine("\n##########################################################\n");
Console.WriteLine("Suppression de l'utilisateur JohnDoe:\n");
user2 = ((controller.GetUserByUsername("JohnDoe") as OkObjectResult).Value as UserDTO);
if (user2 == null)
{
Console.WriteLine("\nErreur lors de la récupération de l'utilisateur !");
}
else
{
Console.WriteLine(user2);
var res5 = controller.DeleteUser(user2.Id) as OkObjectResult;
if (res5 == null)
{
Console.WriteLine("\nErreur lors de la suppression de l'utilisateur !");
}
else
{
Console.WriteLine("\nUtilisateur supprimé avec succès !");
}
}
// Affichage des utilisateurs
Console.WriteLine("\n##########################################################\n");
PrintUsers();
}
}

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\API\API.csproj" />
<ProjectReference Include="..\DbContextLib\DbContextLib.csproj" />
<ProjectReference Include="..\Model\Model.csproj" />
<ProjectReference Include="..\Services\Services.csproj" />
</ItemGroup>
</Project>

@ -10,19 +10,20 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.2" />
<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.Tools" Version="8.0.1">
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PackageReference Include="xunit" Version="2.7.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

Loading…
Cancel
Save