Skip to content

Commit ee5b8f3

Browse files
committed
add DAL module tests
1 parent 9cdac8e commit ee5b8f3

File tree

4 files changed

+127
-0
lines changed

4 files changed

+127
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using FluentAssertions;
2+
using Microsoft.EntityFrameworkCore;
3+
using NetScape.Abstractions.Model.Game;
4+
using NetScape.Abstractions.Model.Login;
5+
using NSubstitute;
6+
using System;
7+
using System.Threading.Tasks;
8+
using Xunit;
9+
10+
namespace NetScape.Modules.DAL.Test
11+
{
12+
public class EntityFrameworkPlayerSerializerTests
13+
{
14+
private readonly EntityFrameworkPlayerSerializer _entityFrameworkPlayerSerializer;
15+
private readonly IDbContextFactory<DatabaseContext> _fakeDbContextFactory;
16+
17+
public EntityFrameworkPlayerSerializerTests()
18+
{
19+
var seedDbId = Guid.NewGuid().ToString();
20+
_fakeDbContextFactory = Substitute.For<IDbContextFactory<DatabaseContext>>();
21+
_fakeDbContextFactory.CreateDbContext().ReturnsForAnyArgs(x =>
22+
new DatabaseContext(
23+
new DbContextOptionsBuilder<DatabaseContext>().UseInMemoryDatabase(seedDbId).Options
24+
)
25+
);
26+
_entityFrameworkPlayerSerializer = new EntityFrameworkPlayerSerializer(_fakeDbContextFactory);
27+
}
28+
29+
[Fact]
30+
public async Task CanAddPlayer()
31+
{
32+
await AddSeedPlayer("Test", "Test");
33+
using (var dbContext = _fakeDbContextFactory.CreateDbContext())
34+
{
35+
var player = await dbContext.Players.FirstOrDefaultAsync(t => t.Username.Equals("Test"));
36+
player.Should().NotBeNull();
37+
}
38+
}
39+
40+
[Fact]
41+
public async Task CanGet()
42+
{
43+
await AddSeedPlayer("Test", "Test");
44+
var player = await _entityFrameworkPlayerSerializer.GetAsync("Test");
45+
player.Should().NotBeNull();
46+
}
47+
48+
[Fact]
49+
public async Task CanUpdatePlayer()
50+
{
51+
var player = await AddSeedPlayer("Test", "Test");
52+
using (var dbContext = _fakeDbContextFactory.CreateDbContext())
53+
{
54+
player.Username = "Jill";
55+
await _entityFrameworkPlayerSerializer.AddOrUpdateAsync(player);
56+
57+
var dbPlayer = await dbContext.Players.FirstOrDefaultAsync(t => t.Username.Equals("Jill"));
58+
dbPlayer.Should().NotBeNull();
59+
}
60+
}
61+
62+
[Theory]
63+
[InlineData("Test", "Test")]
64+
[InlineData("Noob", "Letaaa")]
65+
[InlineData("Nooba", "Letaaa")]
66+
public async Task CanGetOrCreate(string username, string password)
67+
{
68+
var player = await _entityFrameworkPlayerSerializer.GetOrCreateAsync(new PlayerCredentials
69+
{
70+
Username = username,
71+
Password = password
72+
});
73+
74+
player.Should().NotBeNull();
75+
player.Username.Should().Be(username);
76+
}
77+
78+
79+
private async Task<Player> AddSeedPlayer(string user, string pass)
80+
{
81+
var player = new Player
82+
{
83+
Username = user,
84+
Password = pass,
85+
Appearance = new Appearance { Style = new int[1], Colors = new int[1], Gender = Gender.Female }
86+
};
87+
await _entityFrameworkPlayerSerializer.AddOrUpdateAsync(player);
88+
return player;
89+
}
90+
}
91+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp5.0</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="FluentAssertions" Version="5.10.3" />
11+
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.6" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
13+
<PackageReference Include="NSubstitute" Version="4.2.2" />
14+
<PackageReference Include="xunit" Version="2.4.1" />
15+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
16+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
17+
<PrivateAssets>all</PrivateAssets>
18+
</PackageReference>
19+
<PackageReference Include="coverlet.collector" Version="1.3.0">
20+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
21+
<PrivateAssets>all</PrivateAssets>
22+
</PackageReference>
23+
</ItemGroup>
24+
25+
<ItemGroup>
26+
<ProjectReference Include="..\NetScape.Modules.DAL\NetScape.Modules.DAL.csproj" />
27+
</ItemGroup>
28+
29+
</Project>

NetScape.Modules.DAL/NetScape.Modules.DAL.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10+
<PackageReference Include="FluentAssertions" Version="5.10.3" />
1011
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.1" />
1112
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
1213
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.1">

NetScape.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetScape.Modules.ThreeOneSe
3636
EndProject
3737
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetScape.Modules.ThreeOneSeven.LoginProtocol", "NetScape.Modules.ThreeOneSeven.LoginProtocol\NetScape.Modules.ThreeOneSeven.LoginProtocol.csproj", "{73806B1D-9116-4D4D-8BF3-81BF56162F63}"
3838
EndProject
39+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetScape.Modules.DAL.Test", "NetScape.Modules.DAL.Test\NetScape.Modules.DAL.Test.csproj", "{C663F250-D88B-4043-BD77-0EC27AD386AE}"
40+
EndProject
3941
Global
4042
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4143
Debug|Any CPU = Debug|Any CPU
@@ -102,6 +104,10 @@ Global
102104
{73806B1D-9116-4D4D-8BF3-81BF56162F63}.Debug|Any CPU.Build.0 = Debug|Any CPU
103105
{73806B1D-9116-4D4D-8BF3-81BF56162F63}.Release|Any CPU.ActiveCfg = Release|Any CPU
104106
{73806B1D-9116-4D4D-8BF3-81BF56162F63}.Release|Any CPU.Build.0 = Release|Any CPU
107+
{C663F250-D88B-4043-BD77-0EC27AD386AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
108+
{C663F250-D88B-4043-BD77-0EC27AD386AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
109+
{C663F250-D88B-4043-BD77-0EC27AD386AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
110+
{C663F250-D88B-4043-BD77-0EC27AD386AE}.Release|Any CPU.Build.0 = Release|Any CPU
105111
EndGlobalSection
106112
GlobalSection(SolutionProperties) = preSolution
107113
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)