From 0b00fe20b9440d5296ef04aff467073f733bbe75 Mon Sep 17 00:00:00 2001 From: marcchevaldonne Date: Wed, 6 Nov 2024 16:00:55 +0100 Subject: [PATCH] MemberData --- .../Tests/TestDataManager/BorrowBookStub.cs | 27 +++++++ ...st.cs => DataManagerTest_WithClassData.cs} | 2 +- .../DataManagerTest_WithMemberData1.cs | 68 ++++++++++++++++ .../DataManagerTest_WithMemberData2.cs | 36 +++++++++ .../DataManagerTest_WithMemberData3.cs | 78 +++++++++++++++++++ .../DataManagerTest_WithMemberData4.cs | 41 ++++++++++ .../TestDataManager/TestData_BorrowBook.cs | 21 ----- .../TestData_WithMemberData2.cs | 41 ++++++++++ .../TestData_WithMemberData4.cs | 45 +++++++++++ 9 files changed, 337 insertions(+), 22 deletions(-) create mode 100644 Sources/basics/Tests/TestDataManager/BorrowBookStub.cs rename Sources/basics/Tests/TestDataManager/{DataManagerTest.cs => DataManagerTest_WithClassData.cs} (92%) create mode 100644 Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData1.cs create mode 100644 Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData2.cs create mode 100644 Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData3.cs create mode 100644 Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData4.cs create mode 100644 Sources/basics/Tests/TestDataManager/TestData_WithMemberData2.cs create mode 100644 Sources/basics/Tests/TestDataManager/TestData_WithMemberData4.cs diff --git a/Sources/basics/Tests/TestDataManager/BorrowBookStub.cs b/Sources/basics/Tests/TestDataManager/BorrowBookStub.cs new file mode 100644 index 0000000..041dad2 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/BorrowBookStub.cs @@ -0,0 +1,27 @@ +using Model; +using Stub; + +namespace TestDataManager; + +public class BorrowBookStub : EmptyStubDataManager +{ + public BorrowBookStub() : base() + { + books.AddRange([ + new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), + new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916") + ]); + + bookId = 3; + + persons.AddRange([ + new Person(1, "Chick", "Corea"), + new Person(2, "Stanley", "Clarke") + ]); + + personId = 3; + + books[0].Borrower = persons[0]; + persons[0].BorrowBook(books[0]); + } +} \ No newline at end of file diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithClassData.cs similarity index 92% rename from Sources/basics/Tests/TestDataManager/DataManagerTest.cs rename to Sources/basics/Tests/TestDataManager/DataManagerTest_WithClassData.cs index 58b8d06..b92b290 100644 --- a/Sources/basics/Tests/TestDataManager/DataManagerTest.cs +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithClassData.cs @@ -2,7 +2,7 @@ using Model; namespace TestDataManager; -public class DataManagerTest +public class DataManagerTest_WithClassData { [Theory] [ClassData(typeof(TestData_BorrowBook))] diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData1.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData1.cs new file mode 100644 index 0000000..2132fa6 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData1.cs @@ -0,0 +1,68 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithMemberData1 +{ + [Theory] + [MemberData(nameof(TestData_BorrowBook))] + 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); + } + } + } + + public static IEnumerable TestData_BorrowBook => + new List + { + //T1. no book and no borrower + new object[] { false, null, null, new BorrowBookStub() }, + + //T2. no book + new object[] { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { true, new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), new Person(1, "Chick", "Corea"), new BorrowBookStub() }, + }; +} \ No newline at end of file diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData2.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData2.cs new file mode 100644 index 0000000..efb6c52 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData2.cs @@ -0,0 +1,36 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithMemberData2 +{ + [Theory] + [MemberData(nameof(TestData_WithMemberData2.TestData_BorrowBook), MemberType = typeof(TestData_WithMemberData2))] + 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_WithMemberData3.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData3.cs new file mode 100644 index 0000000..b5a06ef --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData3.cs @@ -0,0 +1,78 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithMemberData3 +{ + [Theory] + [MemberData(nameof(GetTestData_BorrowBook), parameters: true)] + 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(GetTestData_BorrowBook), parameters: false)] + 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); + } + } + + public static IEnumerable GetTestData_BorrowBook(bool expectedResult) + { + var testData = new List + { + //T1. no book and no borrower + new object[] { false, null, null, new BorrowBookStub() }, + + //T2. no book + new object[] { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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); + } +} diff --git a/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData4.cs b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData4.cs new file mode 100644 index 0000000..dda777c --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/DataManagerTest_WithMemberData4.cs @@ -0,0 +1,41 @@ +using System; +using Model; + +namespace TestDataManager; + +public class DataManagerTest_WithMemberData4 +{ + [Theory] + [MemberData(nameof(TestData_WithMemberData4.GetTestData_BorrowBook), parameters: true, MemberType = typeof(TestData_WithMemberData4))] + 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_WithMemberData4.GetTestData_BorrowBook), parameters: false, MemberType = typeof(TestData_WithMemberData4))] + 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 5a5a46f..e3ee6ad 100644 --- a/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs +++ b/Sources/basics/Tests/TestDataManager/TestData_BorrowBook.cs @@ -5,28 +5,7 @@ using Stub; namespace TestDataManager; -public class BorrowBookStub : EmptyStubDataManager -{ - public BorrowBookStub() : base() - { - books.AddRange([ - new Book(1, "Les Trois Mousquetaires", "Alexandre Dumas", "979-8415441792"), - new Book(2, "Les Misérables", "Victor Hugo", "979-8850172916") - ]); - - bookId = 3; - - persons.AddRange([ - new Person(1, "Chick", "Corea"), - new Person(2, "Stanley", "Clarke") - ]); - personId = 3; - - books[0].Borrower = persons[0]; - persons[0].BorrowBook(books[0]); - } -} public class TestData_BorrowBook : IEnumerable { diff --git a/Sources/basics/Tests/TestDataManager/TestData_WithMemberData2.cs b/Sources/basics/Tests/TestDataManager/TestData_WithMemberData2.cs new file mode 100644 index 0000000..3a0030b --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/TestData_WithMemberData2.cs @@ -0,0 +1,41 @@ +using System; +using Model; + +namespace TestDataManager; + +public class TestData_WithMemberData2 +{ + public static IEnumerable TestData_BorrowBook => + new List + { + //T1. no book and no borrower + new object[] { false, null, null, new BorrowBookStub() }, + + //T2. no book + new object[] { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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_WithMemberData4.cs b/Sources/basics/Tests/TestDataManager/TestData_WithMemberData4.cs new file mode 100644 index 0000000..4ec3da9 --- /dev/null +++ b/Sources/basics/Tests/TestDataManager/TestData_WithMemberData4.cs @@ -0,0 +1,45 @@ +using System; +using Model; + +namespace TestDataManager; + +public class TestData_WithMemberData4 +{ + public static IEnumerable GetTestData_BorrowBook(bool expectedResult) + { + var testData = new List + { + //T1. no book and no borrower + new object[] { false, null, null, new BorrowBookStub() }, + + //T2. no book + new object[] { false, null, new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T3. no borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), null, new BorrowBookStub() }, + + //T4. new book and new borrower + new object[] { false, new Book( "Les Pardaillan", "Michel Zévaco", "978-2221098417"), new Person("John", "Coltrane"), new BorrowBookStub() }, + + //T5. new book and already known borrower + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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 + new object[] { 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); + } +}