diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndClassData.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndClassData.cs new file mode 100644 index 0000000..5ac1695 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndClassData.cs @@ -0,0 +1,33 @@ +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithTheoryDataAndClassData +{ + [Theory] + [ClassData(typeof(TestData_BorrowBook_TheoryData))] + public async void TestBorrowBook(bool expectedResult, Book bookToBorrow, Person borrower, IDataManager dataManager) + { + bool result = await dataManager.BorrowBook(bookToBorrow, borrower); + Book? book = (await dataManager.GetBooksByIsbn(bookToBorrow?.Isbn, 0, 100)).SingleOrDefault(); + Person? person = (await dataManager.GetPersonsByName(borrower?.LastName, 0, 100)).SingleOrDefault(); + + Assert.Equal(expectedResult, result); + + if(result) + { + Assert.NotNull(book); + Assert.NotNull(person); + Assert.Contains(book, person.Books); + Assert.Equal(person, book.Borrower); + } + else + { + if(person != null && book != null) + { + Assert.DoesNotContain(book, person.Books); + Assert.NotEqual(person, book.Borrower); + } + } + } +} diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData2.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData2.cs new file mode 100644 index 0000000..61c9107 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData2.cs @@ -0,0 +1,34 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithTheoryDataAndMemberData2 +{ + [Theory] + [MemberData(nameof(TestData_WithTheoryDataAndMemberData2.TestData_BorrowBook), MemberType = typeof(TestData_WithTheoryDataAndMemberData2))] + public async void TestBorrowBook(bool expectedResult, Book bookToBorrow, Person borrower, IDataManager dataManager) + { + bool result = await dataManager.BorrowBook(bookToBorrow, borrower); + Book? book = (await dataManager.GetBooksByIsbn(bookToBorrow?.Isbn, 0, 100)).SingleOrDefault(); + Person? person = (await dataManager.GetPersonsByName(borrower?.LastName, 0, 100)).SingleOrDefault(); + + Assert.Equal(expectedResult, result); + + if(result) + { + Assert.NotNull(book); + Assert.NotNull(person); + Assert.Contains(book, person.Books); + Assert.Equal(person, book.Borrower); + } + else + { + if(person != null && book != null) + { + Assert.DoesNotContain(book, person.Books); + Assert.NotEqual(person, book.Borrower); + } + } + } +} diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData4.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData4.cs new file mode 100644 index 0000000..cbff7df --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithTheoryDataAndMemberData4.cs @@ -0,0 +1,41 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithTheoryDataAndMemberData4 +{ + [Theory] + [MemberData(nameof(TestData_WithTheoryDataAndMemberData4.GetTestData_BorrowBook), parameters: true, MemberType = typeof(TestData_WithTheoryDataAndMemberData4))] + public async void TestBorrowBook_Success(bool expectedResult, Book bookToBorrow, Person borrower, IDataManager dataManager) + { + bool result = await dataManager.BorrowBook(bookToBorrow, borrower); + Book? book = (await dataManager.GetBooksByIsbn(bookToBorrow?.Isbn, 0, 100)).SingleOrDefault(); + Person? person = (await dataManager.GetPersonsByName(borrower?.LastName, 0, 100)).SingleOrDefault(); + + Assert.Equal(expectedResult, result); + + Assert.NotNull(book); + Assert.NotNull(person); + Assert.Contains(book, person.Books); + Assert.Equal(person, book.Borrower); + } + + [Theory] + [MemberData(nameof(TestData_WithTheoryDataAndMemberData4.GetTestData_BorrowBook), parameters: false, MemberType = typeof(TestData_WithTheoryDataAndMemberData4))] + public async void TestBorrowBook_Fail(bool expectedResult, Book bookToBorrow, Person borrower, IDataManager dataManager) + { + bool result = await dataManager.BorrowBook(bookToBorrow, borrower); + Book? book = (await dataManager.GetBooksByIsbn(bookToBorrow?.Isbn, 0, 100)).SingleOrDefault(); + Person? person = (await dataManager.GetPersonsByName(borrower?.LastName, 0, 100)).SingleOrDefault(); + + Assert.Equal(expectedResult, result); + + if(person != null && book != null) + { + Assert.DoesNotContain(book, person.Books); + Assert.NotEqual(person, book.Borrower); + } + } +} + diff --git a/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs b/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs index e3ee6ad..037d82d 100644 --- a/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs +++ b/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs @@ -1,12 +1,8 @@ -using System; using System.Collections; using Model; -using Stub; namespace TestDataManager; - - public class TestData_BorrowBook : IEnumerable { public IEnumerator GetEnumerator() @@ -15,7 +11,7 @@ public class TestData_BorrowBook : IEnumerable yield return new object[] { false, null, null, new BorrowBookStub() }; //no book - yield return new object[] { false, null, new Person("John", "Coltrane"), new StubDataManager() }; + yield return new object[] { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }; //no borrower yield return new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }; diff --git a/Sources/basics/Tests/TestDataManager/TestData_BorrowBook_TheoryData.cs b/Sources/basics/Tests/TestDataManager/TestData_BorrowBook_TheoryData.cs new file mode 100644 index 0000000..3c21dc4 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/TestData_BorrowBook_TheoryData.cs @@ -0,0 +1,40 @@ +using System; +using Model; + +namespace TestDataManager; + +public class TestData_BorrowBook_TheoryData : TheoryData +{ + public TestData_BorrowBook_TheoryData() + { + //no book and no borrower + Add(false, null, null, new BorrowBookStub()); + + //no book + Add(false, null, new Person("John", "Coltrane"), new BorrowBookStub()); + + //no borrower + Add(false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub()); + + //new book and new borrower + Add(false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub()); + + //new book and already known borrower + Add(false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person(1, "Chick", "Corea"), new BorrowBookStub()); + + //already known but free book and new borrower + Add(false, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person("John", "Coltrane"), new BorrowBookStub()); + + //already known but already borrowed book and new borrower + Add(false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person("John", "Coltrane"), new BorrowBookStub()); + + //already known but free book and already known borrower + Add(true, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person(1, "Chick", "Corea"), new BorrowBookStub()); + + //already known but already borrowed book by another borrower and already known borrower + Add(false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(2, "Stanley", "Clarke"), new BorrowBookStub()); + + //already known but already borrowed book by this borrower and already known borrower + Add(true, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(1, "Chick", "Corea"), new BorrowBookStub()); + } +} diff --git a/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData2.cs b/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData2.cs new file mode 100644 index 0000000..1cef343 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData2.cs @@ -0,0 +1,42 @@ +using System; +using Model; +using Xunit.Sdk; + +namespace TestDataManager; + +public class TestData_WithTheoryDataAndMemberData2 +{ + public static TheoryData TestData_BorrowBook => + new TheoryData + { + //T1. no book and no borrower + { false, null, null, new BorrowBookStub() }, + + //T2. no book + { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + + //T6. already known but free book and new borrower + { false, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T7. already known but already borrowed book and new borrower + { false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T8. already known but free book and already known borrower + { true, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + + //T9. already known but already borrowed book by another borrower and already known borrower + { false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(2, "Stanley", "Clarke"), new BorrowBookStub() }, + + //T10. already known but already borrowed book by this borrower and already known borrower + { true, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + }; +} diff --git a/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData4.cs b/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData4.cs new file mode 100644 index 0000000..b058c97 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/TestData_WithTheoryDataAndMemberData4.cs @@ -0,0 +1,45 @@ +using System; +using Model; + +namespace TestDataManager; + +public class TestData_WithTheoryDataAndMemberData4 +{ + public static IEnumerable GetTestData_BorrowBook(bool expectedResult) + { + var testData = new TheoryData + { + //T1. no book and no borrower + { false, null, null, new BorrowBookStub() }, + + //T2. no book + { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + + //T6. already known but free book and new borrower + { false, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T7. already known but already borrowed book and new borrower + { false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T8. already known but free book and already known borrower + { true, new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + + //T9. already known but already borrowed book by another borrower and already known borrower + { false, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(2, "Stanley", "Clarke"), new BorrowBookStub() }, + + //T10. already known but already borrowed book by this borrower and already known borrower + { true, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + }; + + return testData.Where(data => (bool)data[0] == expectedResult); + } +}