public async Task GetAllUnpaidRequestAsync_RETURNS_Valid_UnpaidRequest_List()
        {
            // Arrange.
            var options = new DbContextOptionsBuilder <UnpaidsContext>()
                          .UseInMemoryDatabase(databaseName: "Get_unpaidRequests")
                          .Options;

            using (var context = new UnpaidsContext(options))
            {
                context.TbUnpaidRequest.Add(new TbUnpaidRequest {
                    UnpaidRequestId = 1, UnpaidId = 10, StatusId = 1, NotificationId = 1
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest {
                    UnpaidRequestId = 2, UnpaidId = 12, StatusId = 2, NotificationId = 3
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest {
                    UnpaidRequestId = 3, UnpaidId = 10, StatusId = 1, NotificationId = 1
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest {
                    UnpaidRequestId = 4, UnpaidId = 55, StatusId = 3, NotificationId = 2
                });
                context.SaveChanges();
            }

            // Act and Assert.
            using (var context = new UnpaidsContext(options))
            {
                var service = new UnpaidRequestDataManager(context);
                var actual  = await service.GetAllUnpaidRequestAsync(CancellationToken.None);

                Assert.AreEqual(4, actual.Count());
            }
        }
        public async Task AddUnpaidRequestAsync_GIVEN_Valid_UnpaidRequest_RETURNS_Valid_Result()
        {
            // Arrange.
            var options = new DbContextOptionsBuilder <UnpaidsContext>()
                          .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
                          .Options;

            // Act.
            // Run the test against one instance of the context
            using (var context = new UnpaidsContext(options))
            {
                var service = new UnpaidRequestDataManager(context);
                var actual  = await service.AddUnpaidRequestAsync(new List <TbUnpaidRequest>
                {
                    new TbUnpaidRequest
                    {
                        UnpaidId       = 10,
                        StatusId       = 1,
                        NotificationId = 1
                    }
                }, CancellationToken.None);
            }

            // Assert.
            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new UnpaidsContext(options))
            {
                Assert.AreEqual(1, context.TbUnpaidRequest.Count());
                Assert.AreEqual(10, context.TbUnpaidRequest.Single().UnpaidId);
                Assert.AreEqual(1, context.TbUnpaidRequest.Single().StatusId);
                Assert.AreEqual(1, context.TbUnpaidRequest.Single().NotificationId);
            }
        }
        public async Task UpdateUnpaidRequestAsync_GIVEN_Valid_Input_RETURNS_Valid_Result()
        {
            // Arrange.
            var options = new DbContextOptionsBuilder <UnpaidsContext>()
                          .UseInMemoryDatabase(databaseName: "Update_unpaidRequests_against_unpaidId")
                          .Options;

            using (var context = new UnpaidsContext(options))
            {
                context.TbUnpaidRequest.Add(new TbUnpaidRequest
                {
                    UnpaidRequestId = 1, UnpaidId = 10, StatusId = 1, NotificationId = 1
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest
                {
                    UnpaidRequestId = 2, UnpaidId = 12, StatusId = 2, NotificationId = 3
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest
                {
                    UnpaidRequestId = 3, UnpaidId = 10, StatusId = 1, NotificationId = 1
                });
                context.TbUnpaidRequest.Add(new TbUnpaidRequest
                {
                    UnpaidRequestId = 4, UnpaidId = 55, StatusId = 3, NotificationId = 2
                });
                context.SaveChanges();
            }

            // Act.
            using (var context = new UnpaidsContext(options))
            {
                var service = new UnpaidRequestDataManager(context);
                await service.UpdateUnpaidRequestAsync(3, Notification.Call, Status.Failed, "Testing.", DateTime.Now, "GUID_1", CancellationToken.None);
            }

            // Assert.
            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new UnpaidsContext(options))
            {
                var actual = context.TbUnpaidRequest.FirstOrDefault(item => item.UnpaidRequestId == 3);

                if (actual != null)
                {
                    Assert.AreEqual(3, actual.UnpaidRequestId);
                    Assert.AreEqual(3, actual.StatusId);
                    Assert.AreEqual(4, actual.NotificationId);
                    Assert.AreEqual("Testing.", actual.StatusAdditionalInfo);
                    Assert.AreEqual("GUID_1", actual.CorrelationId);
                }
            }
        }
        public async Task GetSingleUnpaidRequestAsync_GIVEN_Invalid_Input_RETURNS_Null()
        {
            // Arrange.
            var options = new DbContextOptionsBuilder <UnpaidsContext>()
                          .UseInMemoryDatabase(databaseName: "Find_unpaidRequest2")
                          .Options;

            using (var context = new UnpaidsContext(options))
            {
                context.TbUnpaidRequest.Add(new TbUnpaidRequest {
                    UnpaidRequestId = 1, UnpaidId = 10, StatusId = 1, NotificationId = 1
                });
                context.SaveChanges();
            }

            // Act and Assert.
            using (var context = new UnpaidsContext(options))
            {
                var service = new UnpaidRequestDataManager(context);
                var actual  = await service.GetSingleUnpaidRequestAsync(0, CancellationToken.None);

                Assert.AreEqual(null, actual);
            }
        }