public void WhenPassingCorrectData_CreateSuccessfully(string name, int volume)
            {
                using (var dbContextFactory = new SqlLiteDbContextFactory())
                {
                    // Run the test against the instance of the context
                    using (var context = dbContextFactory.CreateContext())
                    {
                        var service = new TankService(context);
                        var tank    = InstantiateTank(name, volume);
                        service.Create(tank);
                    }

                    // Get another context using the same connection
                    using (var context = dbContextFactory.CreateContext())
                    {
                        var service = new TankService(context);
                        var tanks   = service.FindAll();
                        Assert.Equal(1, tanks.Count);
                        var tank = tanks.First();
                        Assert.NotNull(tank);
                        // TODO: uncomment below after fix and investigate why the navigation property 'Equipment' is not eager loaded
                        // AssertTank(tank, null, name, volume);
                    }
                }
            }
            public void WhenEquipmentExists_ShouldUpdateSuccessfully(int id, string name)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new EquipmentService(context);

                        var equipment = new Equipment()
                        {
                            Id   = id,
                            Name = name
                        };
                        service.Update(equipment);

                        var updatedEquipment = service.FindById(id);

                        Assert.NotNull(updatedEquipment);
                        Assert.Equal(updatedEquipment.Id, id);
                        Assert.Equal(updatedEquipment.Name, name);
                    }
                }
            }
            public async Task WhenPassingCorrectData_CreateSuccessfully(string name, int volume)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    // Get a context
                    using (var context = factory.CreateContext())
                    {
                        context.Tanks.Add(new Tank()
                        {
                            Volume    = volume,
                            Equipment = new Equipment
                            {
                                Name = name
                            }
                        });

                        await context.SaveChangesAsync();
                    }

                    // Get another context using the same connection
                    using (var context = factory.CreateContext())
                    {
                        AssertPersistedTank(context, name, volume);
                    }
                }
            }
 public void WhenTankNotExists_ShouldThrowException(int id)
 {
     using (var factory = new SqlLiteDbContextFactory())
     {
         using (var context = factory.CreateContext())
         {
             var service = new TankService(context);
             Assert.Throws <Exception>(() => service.Delete(id));
         }
     }
 }
            public void WhenTankDoesNotExists_ReturnNone()
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        var service = new TankService(context);
                        var tanks   = service.FindAll();

                        Assert.Empty(tanks);
                    }
                }
            }
            public void WhenEquipmentDoesNotExists_ReturnNone()
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        var service    = new EquipmentService(context);
                        var equipments = service.FindAll();

                        Assert.Empty(equipments);
                    }
                }
            }
            public void WhenEquipmentDoesNotExist_ReturnNull(int id)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service   = new EquipmentService(context);
                        var equipment = service.FindById(id);
                        Assert.Null(equipment);
                    }
                }
            }
            public void WhenTankDoesNotExist_ReturnNull(int id)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);
                        var tank    = service.FindById(id);
                        Assert.Null(tank);
                    }
                }
            }
                public void WhenPassingIncorrectData_ThrowsException(string name)
                {
                    using (var factory = new SqlLiteDbContextFactory())
                    {
                        using (var context = factory.CreateContext())
                        {
                            var service = new EquipmentService(context);

                            Assert.Throws <DbUpdateException>(() => service.Create(new Equipment()
                            {
                                Name = name
                            }));
                        }
                    }
                }
            public void WhenEquipmentExists_ReturnAll()
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service    = new EquipmentService(context);
                        var equipments = service.FindAll();

                        Assert.Equal(2, equipments.Count);
                    }
                }
            }
            public void WhenTankExists_ReturnAll()
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);
                        var tanks   = service.FindAll();

                        Assert.Equal(2, tanks.Count);
                    }
                }
            }
            public void WhenTankDoesNotExist_ShouldThrowException(int id, string name, int volume)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);
                        var tank    = InstantiateTank(id, name, volume);

                        Assert.Throws <Exception>(() => service.Update(tank));
                    }
                }
            }
            public void WhenTankExists_ReturnTank(int id, string name, int volume)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);
                        var tank    = service.FindById(id);

                        AssertTank(tank, id, name, volume);
                    }
                }
            }
            public void WhenEquipmentExists_ShouldDeleteEquipment(int id)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new EquipmentService(context);
                        service.Delete(id);

                        var deletedEquipment = service.FindById(id);
                        Assert.Null(deletedEquipment);
                    }
                }
            }
            public void WhenTankExists_ShouldDeleteTank(int id)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);
                        service.Delete(id);

                        var tank = service.FindById(id);
                        Assert.Null(tank);
                    }
                }
            }
            public void WhenTankExists_ShouldUpdateSuccessfully(int id, string name, int volume)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new TankService(context);

                        var tank = InstantiateTank(id, name, volume);
                        service.Update(tank);

                        var updatedTank = service.FindById(id);

                        AssertTank(updatedTank, id, name, volume);
                    }
                }
            }
            public void WhenEquipmentDoesNotExist_ShouldThrowException(int id, string name)
            {
                using (var factory = new SqlLiteDbContextFactory())
                {
                    using (var context = factory.CreateContext())
                    {
                        SetupTestData(context);

                        var service = new EquipmentService(context);

                        var equipment = new Equipment()
                        {
                            Id   = id,
                            Name = name
                        };

                        Assert.Throws <Exception>(() => service.Update(equipment));
                    }
                }
            }
                public void WhenPassingCorrectData_CreateSuccessfully(string name)
                {
                    using (var factory = new SqlLiteDbContextFactory())
                    {
                        // Get a context
                        using (var context = factory.CreateContext())
                        {
                            var service = new EquipmentService(context);
                            service.Create(new Equipment
                            {
                                Name = name
                            });
                        }

                        // Get another context using the same connection
                        using (var context = factory.CreateContext())
                        {
                            Assert.Equal(1, context.Equipments.Count());
                            Assert.Equal(name, (context.Equipments.Single()).Name);
                        }
                    }
                }