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