@ -2,17 +2,11 @@
using Data.EF.Players ;
using Microsoft.Data.Sqlite ;
using Microsoft.EntityFrameworkCore ;
using Microsoft.Extensions.Options ;
using Model.Players ;
using System ;
using System.Collections.Generic ;
using System.Collections.ObjectModel ;
using System.Diagnostics ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using Xunit ;
using Xunit.Sdk ;
namespace Tests.Data_UTs.Players
{
@ -33,32 +27,8 @@ namespace Tests.Data_UTs.Players
. Options ;
}
[Theory]
[InlineData("Alice")]
[InlineData("Bob")]
[InlineData("Clyde")]
[InlineData("Dahlia")]
public void TestDbStubContainsAll ( string name )
{
// Arrange
PlayerDbManager mgr ;
// Act
using ( DiceAppDbContextWithStub db = new ( options ) )
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
// Assert
Assert . True ( mgr . IsPresentByName ( name ) ) ;
}
}
[Fact]
public void TestConstructorWhenGivenContextThenConstructs ( )
public async Task TestConstructorWhenGivenContextThenConstructs ( )
{
// Arrange
@ -72,7 +42,7 @@ namespace Tests.Data_UTs.Players
// Assert
Assert . Equal ( new Collection < PlayerEntity > ( ) , mgr . GetAll ( ) ) ;
Assert . Equal ( new Collection < PlayerEntity > ( ) , await mgr . GetAll ( ) ) ;
}
}
@ -93,7 +63,7 @@ namespace Tests.Data_UTs.Players
}
[Fact]
public void TestAddWhenValidThenValid ( )
public async Task TestAddWhenValidThenValid ( )
{
// Arrange
@ -107,8 +77,8 @@ namespace Tests.Data_UTs.Players
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new PlayerEntity ( ) { Name = expectedName } ) ;
mgr . Add ( new PlayerEntity ( ) { Name = "whatever" } ) ;
await mgr . Add ( new PlayerEntity ( ) { Name = expectedName } ) ;
await mgr . Add ( new PlayerEntity ( ) { Name = "whatever" } ) ;
// mgr takes care of the SaveChange() calls internally
// we might use Units of Work later, to optimize our calls to DB
}
@ -119,14 +89,14 @@ namespace Tests.Data_UTs.Players
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . Equal ( expectedName , mgr . GetOneByName ( expectedName ) . Name ) ;
Assert . Equal ( expectedCount , mgr . GetAll ( ) . Count ( ) ) ;
Assert . Equal ( expectedName , ( await mgr . GetOneByName ( expectedName ) ) . Name ) ;
Assert . Equal ( expectedCount , ( await mgr . GetAll ( ) ) . Count ( ) ) ;
}
}
[Fact]
public void TestAddWhenPreExistentThenException ( )
public async Task TestAddWhenPreExistentThenException ( )
{
// Arrange
@ -140,12 +110,12 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
void action ( ) = > mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
await mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
async Task actionAsync ( ) = > await mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
// Assert
Assert . Throws < ArgumentException > ( action ) ;
await Assert . Throws Async < ArgumentException > ( action Async ) ;
}
}
@ -164,11 +134,11 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
void action ( ) = > mgr . Add ( null ) ;
async Task actionAsync ( ) = > await mgr . Add ( null ) ;
// Assert
Assert . Throws < ArgumentNullException > ( action ) ;
Assert . Throws Async < ArgumentNullException > ( action Async ) ;
}
}
@ -190,11 +160,11 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
void action ( ) = > mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
async Task actionAsync ( ) = > await mgr . Add ( new PlayerEntity ( ) { Name = name } ) ;
// Assert
Assert . Throws < ArgumentException > ( action ) ;
Assert . Throws Async < ArgumentException > ( action Async ) ;
}
}
@ -202,7 +172,7 @@ namespace Tests.Data_UTs.Players
[InlineData(" ")]
[InlineData(null)]
[InlineData("")]
public void TestGetOneByNameWhenInvalidThenException ( string name )
public async Task TestGetOneByNameWhenInvalidThenException ( string name )
{
// Arrange
@ -215,14 +185,14 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { Name = "Ernesto" } ) ;
mgr . Add ( new ( ) { Name = "Basil" } ) ;
await mgr . Add ( new ( ) { Name = "Ernesto" } ) ;
await mgr . Add ( new ( ) { Name = "Basil" } ) ;
void action ( ) = > mgr . GetOneByName ( name ) ;
async Task actionAsync ( ) = > await mgr . GetOneByName ( name ) ;
// Assert
Assert . Throws < ArgumentException > ( action ) ;
await Assert . Throws Async < ArgumentException > ( action Async ) ;
}
}
@ -230,7 +200,7 @@ namespace Tests.Data_UTs.Players
[InlineData("Caroline")]
[InlineData("Caroline ")]
[InlineData(" Caroline")]
public void TestGetOneByNameWhenValidAndExistsThenGetsIt ( string name )
public async Task TestGetOneByNameWhenValidAndExistsThenGetsIt ( string name )
{
// Arrange
@ -246,8 +216,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( expected ) ;
mgr . Add ( new ( ) { Name = "Philip" } ) ;
await mgr . Add ( expected ) ;
await mgr . Add ( new ( ) { Name = "Philip" } ) ;
}
// Assert
@ -256,13 +226,13 @@ namespace Tests.Data_UTs.Players
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
actual = mgr . GetOneByName ( name ) ;
actual = await mgr . GetOneByName ( name ) ;
Assert . Equal ( expected , actual ) ;
}
}
[Fact]
public void TestGetOneByNameWhenValidAndNotExistsThenException ( )
public async Task TestGetOneByNameWhenValidAndNotExistsThenException ( )
{
// Arrange
@ -276,19 +246,19 @@ namespace Tests.Data_UTs.Players
mgr = new ( db ) ;
//mgr.Add(expected);
mgr . Add ( new ( ) { Name = "Brett" } ) ;
mgr . Add ( new ( ) { Name = "Noah" } ) ;
await mgr . Add ( new ( ) { Name = "Brett" } ) ;
await mgr . Add ( new ( ) { Name = "Noah" } ) ;
void action ( ) = > mgr . GetOneByName ( "*r^a*éàru é^à" ) ;
async Task actionAsync ( ) = > await mgr . GetOneByName ( "*r^a*éàru é^à" ) ;
// Assert
Assert . Throws < InvalidOperationException > ( action ) ;
await Assert . Throws Async < InvalidOperationException > ( action Async ) ;
}
}
[Fact]
public void TestIsPresentByNameWhenValidAndExistsThenTrue ( )
public async Task TestIsPresentByNameWhenValidAndExistsThenTrue ( )
{
// Arrange
@ -302,8 +272,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { Name = "Philip" } ) ;
mgr . Add ( new ( ) { Name = name } ) ;
await mgr . Add ( new ( ) { Name = "Philip" } ) ;
await mgr . Add ( new ( ) { Name = name } ) ;
}
// Assert
@ -313,7 +283,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . True ( mgr . IsPresentByName ( name ) ) ;
Assert . True ( await mgr . IsPresentByName ( name ) ) ;
}
}
@ -321,8 +291,8 @@ namespace Tests.Data_UTs.Players
[InlineData("")]
[InlineData(" ")]
[InlineData(null)]
[InlineData(" Barbara ")]
public void TestIsPresentByNameWhenInvalidOrNonExistentThenFalse ( string name )
[InlineData(" nowaythatthisnameisalreadyinourdatabase ")]
public async Task TestIsPresentByNameWhenInvalidOrNonExistentThenFalse ( string name )
{
// Arrange
@ -335,8 +305,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { Name = "Herman" } ) ;
mgr . Add ( new ( ) { Name = "Paulo" } ) ;
await mgr . Add ( new ( ) { Name = "Herman" } ) ;
await mgr . Add ( new ( ) { Name = "Paulo" } ) ;
}
// Assert
@ -346,7 +316,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . False ( mgr . IsPresentByName ( name ) ) ;
Assert . False ( await mgr . IsPresentByName ( name ) ) ;
}
}
@ -373,52 +343,43 @@ namespace Tests.Data_UTs.Players
}
[Fact]
public void TestRemoveWhenPreExistentThenRemoves ( )
public async Task TestRemoveWhenPreExistentThenRemoves ( )
{
// Arrange
PlayerDbManager mgr ;
PlayerEntity toRemove = new ( ) { Name = "Filibert " } ;
PlayerEntity toRemove = new ( ) { ID = Guid . NewGuid ( ) , Name = "Please! " } ;
using ( DiceAppDbContext db = new ( options ) )
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { Name = "Xavier" } ) ;
mgr . Add ( toRemove ) ;
}
// Act
using ( DiceAppDbContext db = new ( options ) )
using ( DiceAppDbContextWithStub db = new ( options ) )
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
await mgr . Add ( toRemove ) ; // calls SaveChangesAsync()
mgr . Remove ( toRemove ) ;
}
// Assert
using ( DiceAppDbContext db = new ( options ) )
using ( DiceAppDbContext WithStub db = new ( options ) )
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . DoesNotContain ( toRemove , mgr. GetAll ( ) ) ;
Assert . DoesNotContain ( toRemove , db. Players ) ;
}
}
[Fact]
public void TestRemoveWhenNonExistentThenStillNonExistent ( )
public async Task TestRemoveWhenNonExistentThenStillNonExistent ( )
{
// Arrange
PlayerDbManager mgr ;
PlayerEntity toRemove = new ( ) { Name = "Filibert" } ;
PlayerEntity toRemove = new ( ) { ID = Guid . NewGuid ( ) , Name = "Filibert" } ;
// Act
@ -427,7 +388,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { Name = "Bert" } ) ;
await mgr . Add ( new ( ) { ID = Guid . NewGuid ( ) , Name = "Bert" } ) ;
mgr . Remove ( toRemove ) ;
}
@ -438,14 +399,14 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . DoesNotContain ( toRemove , mgr . GetAll ( ) ) ;
Assert . DoesNotContain ( toRemove , await mgr . GetAll ( ) ) ;
}
}
[Theory]
[InlineData("filiBert")]
[InlineData("Bertrand")]
public void TestUpdateWhenValidThenUpdates ( string name )
public async Task TestUpdateWhenValidThenUpdates ( string name )
{
// Arrange
@ -462,8 +423,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( before ) ;
mgr . Update ( before , after ) ;
await mgr . Add ( before ) ;
await mgr . Update ( before , after ) ;
}
// Assert
@ -473,8 +434,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . DoesNotContain ( before , mgr . GetAll ( ) ) ;
Assert . Contains ( after , mgr . GetAll ( ) ) ;
Assert . DoesNotContain ( before , await mgr . GetAll ( ) ) ;
Assert . Contains ( after , await mgr . GetAll ( ) ) ;
}
}
@ -482,7 +443,7 @@ namespace Tests.Data_UTs.Players
[InlineData("Valerie")]
[InlineData("Valerie ")]
[InlineData(" Valerie")]
public void TestUpdateWhenSameThenKeepsAndWorks ( string name )
public async Task TestUpdateWhenSameThenKeepsAndWorks ( string name )
{
// Arrange
@ -500,8 +461,8 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( before ) ;
mgr . Update ( before , after ) ;
await mgr . Add ( before ) ;
await mgr . Update ( before , after ) ;
}
// Assert
@ -511,14 +472,14 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . Contains ( before , mgr . GetAll ( ) ) ;
Assert . Contains ( after , mgr . GetAll ( ) ) ;
Assert . Contains ( before , await mgr . GetAll ( ) ) ;
Assert . Contains ( after , await mgr . GetAll ( ) ) ;
}
}
[Fact]
public void TestUpdateWhenNewIDThenException ( )
public async Task TestUpdateWhenNewIDThenException ( )
{
// Arrange
@ -534,12 +495,12 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( before ) ;
void action ( ) = > mgr . Update ( before , after ) ;
await mgr . Add ( before ) ;
async Task actionAsync ( ) = > await mgr . Update ( before , after ) ;
// Assert
Assert . Throws < ArgumentException > ( action ) ;
await Assert . Throws Async < ArgumentException > ( action Async ) ;
}
}
@ -547,7 +508,7 @@ namespace Tests.Data_UTs.Players
[InlineData("")]
[InlineData(" ")]
[InlineData(null)]
public void TestUpdateWhenInvalidThenException ( string name )
public async Task TestUpdateWhenInvalidThenException ( string name )
{
// Arrange
@ -564,17 +525,17 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( before ) ;
void action ( ) = > mgr . Update ( before , after ) ;
await mgr . Add ( before ) ;
async Task actionAsync ( ) = > await mgr . Update ( before , after ) ;
// Assert
Assert . Throws < ArgumentException > ( action ) ;
await Assert . Throws Async < ArgumentException > ( action Async ) ;
}
}
[Fact]
public void TestUpdateWhenNullThenException ( )
public async Task TestUpdateWhenNullThenException ( )
{
// Arrange
@ -589,17 +550,17 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( before ) ;
void action ( ) = > mgr . Update ( before , null ) ;
await mgr . Add ( before ) ;
async Task actionAsync ( ) = > await mgr . Update ( before , null ) ;
// Assert
Assert . Throws < ArgumentNullException > ( action ) ;
await Assert . Throws Async < ArgumentNullException > ( action Async ) ;
}
}
[Fact]
public void TestGetOneByIDWhenExistsThenGetsIt ( )
public async Task TestGetOneByIDWhenExistsThenGetsIt ( )
{
// Arrange
@ -616,7 +577,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( expected ) ;
await mgr . Add ( expected ) ;
}
// Assert
@ -625,13 +586,13 @@ namespace Tests.Data_UTs.Players
{
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
actual = mgr . GetOneByID ( id ) ;
actual = await mgr . GetOneByID ( id ) ;
Assert . Equal ( expected , actual ) ;
}
}
[Fact]
public void TestGetOneByIDWhenNotExistsThenException ( )
public async Task TestGetOneByIDWhenNotExistsThenExceptionAsync ( )
{
// Arrange
@ -649,18 +610,18 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( expected ) ;
await mgr . Add ( expected ) ;
void action ( ) = > mgr . GetOneByID ( otherId ) ;
async Task actionAsync ( ) = > await mgr . GetOneByID ( otherId ) ;
// Assert
Assert . Throws < InvalidOperationException > ( action ) ;
await Assert . Throws Async < InvalidOperationException > ( action Async ) ;
}
}
[Fact]
public void TestIsPresentbyIdWhenExistsThenTrue ( )
public async Task TestIsPresentbyIdWhenExistsThenTrue ( )
{
// Arrange
@ -674,7 +635,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { ID = id , Name = "Bobby" } ) ;
await mgr . Add ( new ( ) { ID = id , Name = "Bobby" } ) ;
}
// Assert
@ -684,12 +645,12 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . True ( mgr . IsPresentByID ( id ) ) ;
Assert . True ( await mgr . IsPresentByID ( id ) ) ;
}
}
[Fact]
public void TestIsPresentbyIdWhen ExistsThenFalse( )
public async Task TestIsPresentbyIdWhenNot ExistsThenFalse( )
{
// Arrange
@ -698,6 +659,9 @@ namespace Tests.Data_UTs.Players
Guid otherId = Guid . NewGuid ( ) ;
PlayerEntity presentEntity ;
PlayerEntity absentEntity ;
// Act
using ( DiceAppDbContext db = new ( options ) )
@ -705,7 +669,10 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
mgr . Add ( new ( ) { ID = id , Name = "Victor" } ) ;
presentEntity = new ( ) { ID = id , Name = "Victor" } ;
await mgr . Add ( presentEntity ) ;
absentEntity = new ( ) { ID = otherId , Name = "Victor" } ;
}
// Assert
@ -715,7 +682,7 @@ namespace Tests.Data_UTs.Players
db . Database . EnsureCreated ( ) ;
mgr = new ( db ) ;
Assert . False( mgr . IsPresentByID ( otherId ) ) ;
Assert . DoesNotContain( absentEntity , db . Players ) ;
}
}
}