00001 using System;
00002 using NUnit.Framework;
00003 using Foodolini.BusinessLogic;
00004 using Foodolini.Database;
00005 using System.Collections.Generic;
00006
00007 namespace Foodolini.BusinessLogic.Test
00008 {
00012 [TestFixture]
00013 public class FoodItemTest : LogicTest
00014 {
00018 [Test]
00019 public void CreateFoodItemTest (){
00020 FoodItem food = new FoodItem(4,new Ingredient("milk") ,new DateTime(11155),false) ;
00021 food.Save ();
00022 Assert.AreNotEqual (0,food.Id,"Fooditem have been given a ID");
00023 }
00024
00029 [Test]
00030 public void LoadCreatedFoodItemTest (){
00031
00032 FoodItem food = new FoodItem(4,new Ingredient("milk"),new DateTime(11155),false);
00033 food.Save ();
00034 Assert.AreNotEqual (0,food.Id,"Fooditem have been given a ID");
00035
00036 foreach (var f in FoodItem.ListFoodItems()) {
00037 if (f.Ingredient.CommercialName == "milk"){
00038 Assert.AreEqual (new DateTime(11155) ,f.ExpirationDate,"fooditem loaded");
00039 Assert.AreEqual (false ,f.IsOpen ,"fooditem isopen loaded");
00040 }
00041 }
00042 List<FoodItem> count = new List<FoodItem>(FoodItem.ListFoodItems());
00043 Assert.AreEqual (1, count.Count ,"foodcount in database match");
00044
00045 }
00055 [Test]
00056 public void ConsumeFoodItemTest (){
00057 Ingredient ing = new Ingredient("milk");
00058 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00059 ing.ShelfLife = new TimeSpan(3,0,0,0);
00060 FoodItem food = new FoodItem(4,ing,new DateTime(11155),false);
00061 food.Save ();
00062 Assert.AreEqual(false ,food.IsOpen ,"isopen new saved");
00063 List<FoodItem> count = new List<FoodItem>(FoodItem.ListFoodItems());
00064 Assert.AreEqual (1, count.Count ,"foodItem in database count");
00065
00066 foreach (var f in FoodItem.ListFoodItems()) {
00067 if (f.Ingredient.CommercialName == "milk"){
00068 Assert.AreEqual(new DateTime(11155), f.ExpirationDate, "fooditem loaded");
00069 Assert.AreEqual(null,f.ConsumedBy, "name match" );
00070 Assert.AreEqual(false, f.IsConsumed, "is consummed");
00071 Assert.AreEqual(false, f.IsOpen ,"isopen");
00072 }
00073 }
00074
00075
00076 foreach (var per in Person.ListUsers() ){
00077 if (per.UserName == "jopsen"){
00078 food.Consume (per);
00079 Assert.AreEqual(true ,food.IsOpen ,"isopen after consumed");
00080 }
00081 }
00082 food.Save ();
00083 Assert.AreEqual(true ,food.IsOpen,"isopen after saved" );
00084
00085 Assert.AreNotEqual (0,food.Id,"Fooditem have been given a ID");
00086
00087 foreach (var per in Person.ListUsers()) {
00088 if (per.UserName == "jopsen"){
00089 foreach (var f in per.GetConsumedFoodItems()){
00090 if (f.Ingredient.CommercialName == "milk"){
00091 Assert.AreEqual(new DateTime(11155), f.ExpirationDate, "fooditem loaded");
00092 Assert.AreEqual("jopsen",f.ConsumedBy.UserName, "name match" );
00093 Assert.AreEqual(true ,f.IsConsumed, "is consummed");
00094 Assert.AreEqual(true,f.IsOpen ,"isopen");
00095 Assert.AreEqual(System.DateTime.Now.Day ,f.ConsumedDate.Day ,"consummeddate match");
00096 }
00097 }
00098 }
00099 }
00100
00101 count = new List<FoodItem>(FoodItem.ListFoodItems());
00102 Assert.AreEqual (0, count.Count ,"foodItem in database count");
00103
00104 }
00105
00106
00112 [Test]
00113 public void ConsumePartialFoodItemTest (){
00114 Ingredient ing = new Ingredient("milk");
00115 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00116 ing.ShelfLife = new TimeSpan(3,0,0,0);
00117 FoodItem food = new FoodItem(4,ing,new DateTime(11155),false);
00118 food.Save ();
00119 Assert.AreEqual(false ,food.IsOpen ,"isopen new saved");
00120 List<FoodItem> count = new List<FoodItem>(FoodItem.ListFoodItems());
00121 Assert.AreEqual (1, count.Count ,"foodItem in database count");
00122
00123
00124
00125 foreach (var per in Person.ListUsers() ){
00126 if (per.UserName == "jopsen"){
00127 food.Consume (per,1);
00128 Assert.AreEqual(true ,food.IsOpen ,"isopen after consumed");
00129 }
00130 }
00131 food.Save ();
00132
00133 foreach (var per in Person.ListUsers()) {
00134 if (per.UserName == "jopsen"){
00135 foreach (var f in per.GetConsumedFoodItems()){
00136 if (f.Ingredient.CommercialName == "milk"){
00137 Assert.AreEqual(new DateTime(11155), f.ExpirationDate, "fooditem loaded");
00138 Assert.AreEqual("jopsen",f.ConsumedBy.UserName, "name match" );
00139 Assert.AreEqual(true ,f.IsConsumed, "is consummed");
00140 Assert.AreEqual(true,f.IsOpen ,"isopen");
00141 Assert.AreEqual(1,f.Quantity,"quantity dont match" );
00142 Assert.AreEqual(System.DateTime.Now.Day ,f.ConsumedDate.Day ,"consummeddate match");
00143 }
00144 }
00145 }
00146 }
00147
00148 count = new List<FoodItem>(FoodItem.ListFoodItems());
00149 Assert.AreEqual (1, count.Count ,"remaining foodItem in database count");
00150 foreach (var f in FoodItem.ListFoodItems()) {
00151 if (f.Ingredient.CommercialName == "milk"){
00152 Assert.AreEqual(new DateTime(11155), f.ExpirationDate, "remaining fooditem not loaded");
00153 Assert.AreEqual(null,f.ConsumedBy, " remaining fooditem name dont match" );
00154 Assert.AreEqual(false, f.IsConsumed, "remaining fooditem is consummed");
00155 Assert.AreEqual(false, f.IsOpen ,"remaining fooditem is open");
00156 Assert.AreEqual(3,f.Quantity,"remaining fooditem quantity dont match" );
00157 }
00158 }
00159 }
00160
00161
00162
00170 [Test]
00171 public void SplitFoodItemTest (){
00172 FoodItem newfood;
00173 Ingredient ing = new Ingredient("milk");
00174 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00175 ing.ShelfLife = new TimeSpan(3,0,0,0);
00176 FoodItem food = new FoodItem(10,ing,new DateTime(11155),false);
00177 food.Save ();
00178
00179 newfood = food.Split(2);
00180
00181 Assert.AreEqual(2, newfood.Quantity, "Quantity of newfood not 2");
00182 Assert.AreEqual(8, food.Quantity, "Quantity of food not 8");
00183 Assert.AreEqual(true, newfood.IsOpen, "newfood not open");
00184 Assert.AreEqual(true, food.IsOpen, "food not open");
00185 Assert.AreEqual(ing.LongDescription, newfood.Ingredient.LongDescription, "Ingredient for newfood is wrong");
00186 Assert.AreEqual(new TimeSpan(1,0,0,0).Days, food.ExpirationDate.Day, "ExpirationDate of food not 1 day");
00187
00188
00189 }
00193 [Test]
00194 public void SplitFoodItemExceptionTest(){
00195 FoodItem newfood;
00196 Ingredient ing = new Ingredient("milk");
00197 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00198 ing.ShelfLife = new TimeSpan(3,0,0,0);
00199 FoodItem food = new FoodItem(10,ing,new DateTime(11155),false);
00200 food.Save ();
00201
00202 try {
00203 newfood = food.Split(10);
00204 } catch (Exception e){
00205 Assert.AreEqual("Quantity in FoodItem equals quantity for split", e.Message, "Split does not throw exception on equals");
00206 }
00207
00208 try {
00209 newfood = food.Split(14);
00210 } catch (Exception e){
00211 Assert.AreEqual("split more than we have", e.Message, "Split does not throw exception on more than we have");
00212 }
00213 foreach (var per in Person.ListUsers()) {
00214 if (per.UserName == "jopsen"){
00215 food.Consume(per); }
00216 }
00217
00218 try {
00219 newfood = food.Split(8);
00220 } catch (Exception e){
00221 Assert.AreEqual("Cannot split consumed FoodItem", e.Message, "Split does not throw exception when splitting consumed FoodItem");
00222 }
00223 }
00228 [Test]
00229 public void FoodItemDeleteTest(){
00230 Ingredient ing = new Ingredient("milk");
00231 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00232 ing.ShelfLife = new TimeSpan(3,0,0,0);
00233 FoodItem food = new FoodItem(10,ing,new DateTime(11155),false);
00234 food.Save ();
00235 FoodItem food2 = new FoodItem(98,ing,new DateTime(11155),false);
00236 food2.Save ();
00237
00238 List<FoodItem> count = new List<FoodItem>(FoodItem.ListFoodItems());
00239 Assert.AreEqual (2, count.Count ,"foodcount in database does not match");
00240
00241 food.Delete();
00242
00243 count = new List<FoodItem>(FoodItem.ListFoodItems());
00244 Assert.AreEqual (1, count.Count ,"foodcount in database does not match after deletion");
00245
00246 foreach (var f in count) {
00247 Assert.AreEqual(98, f.Quantity, "Deleted wrong FoodItem");
00248 }
00249
00250 food.Delete();
00251 count = new List<FoodItem>(FoodItem.ListFoodItems());
00252 Assert.AreEqual (1, count.Count ,"foodcount in database does not match after second deletion");
00253
00254 foreach (var f in count) {
00255 Assert.AreEqual(98, f.Quantity, "Deleted wrong FoodItem after second deletion");
00256 }
00257 }
00258
00263 [Test]
00264 public void OpenCloseFoodItemDeleteTest(){
00265 Ingredient ing = new Ingredient("milk");
00266 ing.ExpirationAfterOpening = new TimeSpan (1,0,0,0);
00267 ing.ShelfLife = new TimeSpan(3,0,0,0);
00268 FoodItem food = new FoodItem(10,ing,new DateTime(11155),false);
00269 food.Save ();
00270
00271 food.OpenFoodItem();
00272
00273 food.CloseFoodItem();
00274 DateTime temp = System.DateTime.Now + new TimeSpan(3,0,0,0);
00275 Assert.AreEqual(temp.Day,food.ExpirationDate.Day, "shelflife dont match");
00276 }
00277 }
00278 }