DRMFSS.Test.CommodityRepositoryTest.CommodityRepositoryTest C# (CSharp) Method

CommodityRepositoryTest() public method

public CommodityRepositoryTest ( ) : System
return System
        public CommodityRepositoryTest()
        {
            //List<Commodity> testChildren = new List<Commodity>
            //    {
            //        new Commodity { CommodityID = 5, Name = "Yellow Wheat",LongName = "",CommodityTypeID = 1, ParentID = 1 },
            //        new Commodity { CommodityID = 7, Name = "Green Wheat",LongName = "",CommodityTypeID = 1, ParentID = 1 },
            //   };

            // create some mock products to play with
            List<Commodity> testCommodities = new List<Commodity>
                {

                    new Commodity { CommodityID = 1, Name = "Wheat",LongName = "",CommodityTypeID = 1, ParentID = null },
                    new Commodity { CommodityID = 5, Name = "Yellow Wheat",LongName = "",CommodityTypeID = 1, ParentID = 1 },
                    new Commodity { CommodityID = 7, Name = "Green Wheat",LongName = "",CommodityTypeID = 1, ParentID = 1 },

                    new Commodity { CommodityID = 3, Name = "CSB",LongName = "",CommodityTypeID = 1, ParentID = null },
                    new Commodity { CommodityID = 8, Name = "Beans",LongName = "",CommodityTypeID = 1, ParentID = 3 },
                };

            // Mock the Commodity Repository using Moq
            Mock<ICommodityRepository> mockCommodityRepository = new Mock<ICommodityRepository>();

            // Return all the Commodities
            mockCommodityRepository.Setup(mr => mr.GetAll()).Returns(testCommodities);

            // return a Commodity by CommodityId
            mockCommodityRepository.Setup(mr => mr.FindById(
               It.IsAny<int>())).Returns((int i) => testCommodities.Where(x => x.CommodityID == i).Single());

            //return all parent commodities
            mockCommodityRepository.Setup(mr => mr.GetAllParents())
                .Returns(testCommodities.Where(x => x.ParentID == null).ToList());

            //return all children commodities
            mockCommodityRepository.Setup(mr => mr.GetAllSubCommodities())
                .Returns(testCommodities.Where(x => x.ParentID != null).ToList());

            //return a commodity by it's name
            mockCommodityRepository.Setup(mr => mr.GetCommodityByName(
                 It.IsAny<string>())).Returns((string i) => testCommodities.Where(x => x.Name == i).Single());

            //retun all commodities by thier parent
            mockCommodityRepository.Setup(mr=>mr.GetAllSubCommoditiesByParantId(
                It.IsAny<int>())).Returns((int i) => testCommodities.Where(x => x.ParentID == i).ToList());

            // return a Commodity by CommodityId
            mockCommodityRepository.Setup(mr => mr.DeleteByID(
               It.IsAny<int>())).Returns(
               (int i)=>
                   {
                       var original = testCommodities.Single
                           (q => q.CommodityID == i);

                       var childsCount = testCommodities.Count(c => c.ParentID == i);

                       if (original == null || childsCount != 0)
                       {
                           return false;
                       }
                       else
                       {
                           testCommodities.Remove(original);
                           return true;
                       }

                   });

            //test deletion of commodity by id
            mockCommodityRepository.Setup(mr => mr.Delete(
                       It.IsAny<Commodity>())).Returns(
                       (Commodity target) =>
                       {
                           var original = testCommodities.Single
                               (q => q.CommodityID == target.CommodityID);

                           var childsCount = testCommodities.Count(c => c.ParentID == target.CommodityID);

                           if (original == null || childsCount != 0)
                           {
                               return false;
                           }
                           else
                           {
                               testCommodities.Remove(original);
                               return true;
                           }

                       });

            //returns bool if we can save one additional(adding )scheme
            mockCommodityRepository.Setup(mr => mr.SaveChanges(It.IsAny<Commodity>())).Returns(
                (Commodity target) =>
                {

                    var original = testCommodities.Single
                            (q => q.CommodityID == target.CommodityID);

                        if (original == null)
                        {
                            return false;
                        }
                        original.Name = target.Name;
                        original.LongName = target.LongName;
                        original.CommodityTypeID = target.CommodityTypeID;
                        original.ParentID = target.ParentID;
                    return true;
                });

            //TODO remove the lines below duplicate of the
            mockCommodityRepository.Setup(mr => mr.Add(It.IsAny<Commodity>())).Returns(
                (Commodity target) =>
                {
                    if (target.CommodityID.Equals(default(int)))
                    {
                        target.CommodityID = testCommodities.Count() + 1;
                        testCommodities.Add(target);
                    }
                    else
                    {
                        var original = testCommodities.Single
                            (q => q.CommodityID == target.CommodityID);

                        if (original == null)
                        {
                            return false;
                        }
                        original.Name = target.Name;
                        original.LongName = target.LongName;
                        original.CommodityTypeID = target.CommodityTypeID;
                        original.ParentID = target.ParentID;
                    }

                    return true;
                });

            this.MockCommodityRepository = mockCommodityRepository.Object;
        }