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;
}