-
-
Save ptabatt/5d4c87d4b2ff388d219523b0c809e720 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [TestFixture] | |
| public class TodoListTestFixture | |
| { | |
| /// <summary> | |
| /// Note to Reviewers: | |
| /// Under normal circumstances, I would create a separate database for the tests, run everything, | |
| /// and then delete the test database. | |
| /// </summary> | |
| [OneTimeSetUp] | |
| public void OneTimeSetup() | |
| { | |
| using (var db = new TodoDbContext()) | |
| { | |
| db.Database.EnsureCreated(); | |
| } | |
| } | |
| [SetUp] | |
| public void Setup() | |
| { | |
| var repo = new TodoListRepository(); | |
| repo.DeleteAll(); | |
| Assert.That(repo.Count(), Is.EqualTo(0)); | |
| } | |
| /// <summary> | |
| /// If you're unfamiliar with NUnit - the TestCase attribute in NUnit requires constant expressions | |
| /// for its parameters, which means you can't directly non-constant values. In this case, | |
| /// you can use the TestCaseSource attribute along with a method that returns an array of test cases. | |
| /// </summary> | |
| private static IEnumerable<TestCaseData> AddTestCases() | |
| { | |
| yield return new TestCaseData(new TodoItem[] { }, 0).SetName("EmptyArray"); | |
| yield return new TestCaseData(new TodoItem[] | |
| { | |
| new TodoItem | |
| { | |
| Task = "jiggy", | |
| IsCompleted = false, | |
| CreatedAt = DateTime.Now | |
| }, | |
| new TodoItem | |
| { | |
| Task = "wiggy", | |
| IsCompleted = false, | |
| CreatedAt = DateTime.Now | |
| }, | |
| }, 2).SetName("TwoItems"); | |
| yield return new TestCaseData(new TodoItem[] | |
| { | |
| new TodoItem | |
| { | |
| Task = "jiggy", | |
| IsCompleted = false, | |
| CreatedAt = DateTime.Now | |
| }, | |
| new TodoItem | |
| { | |
| Task = "wiggy", | |
| IsCompleted = false, | |
| CreatedAt = DateTime.Now | |
| }, | |
| new TodoItem | |
| { | |
| Task = "jiggywiggy", | |
| IsCompleted = false, | |
| CreatedAt = DateTime.Now | |
| }, | |
| }, 3).SetName("ThreeItems"); | |
| } | |
| [TestCaseSource(nameof(AddTestCases))] | |
| public void Add_Test(TodoItem[] todoItems, int expectedCount) | |
| { | |
| // Arrange | |
| var repo = new TodoListRepository(); | |
| // Act | |
| foreach (var item in todoItems) | |
| { | |
| repo.Add(item); | |
| } | |
| // Assert | |
| Assert.That(repo.Count(), Is.EqualTo(expectedCount)); | |
| } | |
| [Test] | |
| public void GetAll_Test() | |
| { | |
| // Arrange | |
| var repository = new TodoListRepository(); | |
| var todoItems = new TodoItem[] | |
| { | |
| new TodoItem { Task = "Write Add Test", IsCompleted = true }, | |
| new TodoItem { Task = "Write Get All Test", IsCompleted = true }, | |
| new TodoItem { Task = "Write Get Nth Item Test", IsCompleted = false }, | |
| new TodoItem { Task = "Write Update Item Test", IsCompleted = false } | |
| }; | |
| foreach (var item in todoItems) | |
| { | |
| repository.Add(item); | |
| } | |
| // Act | |
| var result = repository.GetAll(); | |
| // Assert | |
| Assert.IsNotNull(result); | |
| Assert.That(result.Count(), Is.EqualTo(todoItems.Length)); | |
| // Check if all added items are present in the result | |
| foreach (var item in todoItems) | |
| { | |
| Assert.IsTrue(result.Any(i => string.Equals(i.Task, item.Task) && i.IsCompleted == item.IsCompleted)); | |
| } | |
| } | |
| [Test] | |
| public void GetNthItem_Test() | |
| { | |
| // Arrange | |
| var repository = new TodoListRepository(); | |
| // Create sample todo items | |
| var todoItems = new TodoItem[] | |
| { | |
| new TodoItem { Task = "Write Add Test", IsCompleted = true }, | |
| new TodoItem { Task = "Write Get All Test", IsCompleted = true }, | |
| new TodoItem { Task = "Write Get Nth Item Test", IsCompleted = true }, | |
| new TodoItem { Task = "Write Update Item Test", IsCompleted = false } | |
| }; | |
| // Add items to the repository | |
| foreach (var item in todoItems) | |
| { | |
| repository.Add(item); | |
| } | |
| Assert.That(repository.GetNthItem(3).Task, Is.EqualTo("Write Get Nth Item Test")); | |
| Assert.That(repository.GetNthItem(3).IsCompleted, Is.True); | |
| } | |
| [Test] | |
| public void Update_Test() | |
| { | |
| // Arrange | |
| var repository = new TodoListRepository(); | |
| var todoItem = new TodoItem { Task = "Check that you can check-off a task", IsCompleted = false }; | |
| repository.Add(todoItem); | |
| // Act | |
| // Modify the task and update the repository | |
| todoItem.IsCompleted = true; | |
| repository.Update(todoItem); | |
| // Retrieve the updated task from the repository | |
| var updatedTask = repository.GetById(todoItem.Id); | |
| // Assert | |
| Assert.IsNotNull(updatedTask); | |
| Assert.That(updatedTask.IsCompleted, Is.EqualTo(true)); | |
| // Ensure the task name itself is not modified | |
| Assert.That(updatedTask.Task, Is.EqualTo("Check that you can check-off a task")); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment