using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using AdventureWorksService;
using AdventureWorksModel;
using SearchHelpers.Compare;
using EntityModel = AdventureWorksEntityModel;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace EntityServiceTests.RepositoryTests
{
[TestClass()]
public class PurchaseOrderHeaderTests
{
private AdventureWorks _service;
[TestInitialize]
public void SetUp()
{
_service = new AdventureWorks();
}
[TestMethod]
public void FindAll()
{
PurchaseOrderHeader model = new PurchaseOrderHeader();
_service.RunTestFind(model, 4012);
}
[TestMethod]
public void FindByID()
{
string dataPropertyName = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderID);
PurchaseOrderHeader model = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new EqualTo(dataPropertyName, 4)
}
}
};
_service.RunTestFind(model, 1);
}
[TestMethod]
public void FindByLikeWithSubName()
{
string dataPropertyName = LambdaHelper.GetName<EntityModel.PurchaseOrderHeader>(a => a.ShipMethod.Name);
PurchaseOrderHeader model = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new Like(dataPropertyName, "%OVER%" )
}
}
};
_service.RunTestFind(model, 1245);
}
[TestMethod]
public void FindByMultipleCriteria()
{
string dataPropertyName = LambdaHelper.GetName<EntityModel.PurchaseOrderHeader>(a => a.ShipDate);
PurchaseOrderHeader model = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new Between ( dataPropertyName, DateTime.Parse("05-17-2001"), DateTime.Parse("01-01-2002"))
}
}
};
_service.RunTestFind(model, 8);
}
[TestMethod]
public void FindByIdIncludeChildren()
{
string dataPropertyName = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderID);
string detail = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderDetail);
string product = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderDetail.Single().Product);
PurchaseOrderHeader model = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new EqualTo(dataPropertyName, 4)
},
IncludeEntities = new List<string>
{
detail,
product
}
}
};
PurchaseOrderHeader orderHeader = _service.RunTestFind(model, 1).Cast<PurchaseOrderHeader>().FirstOrDefault();
Assert.IsNotNull(orderHeader.PurchaseOrderDetail);
Assert.IsTrue(orderHeader.PurchaseOrderDetail.Count > 0);
List<Product> products = orderHeader.PurchaseOrderDetail.Select(p => p.Product).ToList();
Assert.IsNotNull(products);
Assert.IsTrue(products.Count > 0);
}
[TestMethod]
public void CreateNew()
{
using (new TransactionScope())
{
PurchaseOrderHeader model = CreateModelForTest();
_service.RunTestAdd(model, 1);
}
}
[TestMethod]
public void Update()
{
using (new TransactionScope())
{
PurchaseOrderHeader model = CreateModelForTest();
_service.RunTestAdd(model, 1);
DateTime shipDate = new DateTime(2010, 5, 17);
model.Status = 4;
model.ShipDate = shipDate;
_service.Update(model);
string dataPropertyName = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderID);
PurchaseOrderHeader query = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new EqualTo(dataPropertyName, model.PurchaseOrderID)
}
}
};
PurchaseOrderHeader foundModel = _service.RunTestFind(query, 1).First() as PurchaseOrderHeader;
Assert.IsNotNull(foundModel);
Assert.AreEqual(foundModel.Status, model.Status);
Assert.AreEqual(foundModel.ShipDate, model.ShipDate);
}
}
[TestMethod]
public void Delete()
{
PurchaseOrderHeader model = CreateModelForTest();
_service.RunTestAdd(model, 1);
DateTime shipDate = new DateTime(2010, 5, 17);
model.Status = 4;
model.ShipDate = shipDate;
_service.Delete(model);
string dataPropertyName = LambdaHelper.GetName<PurchaseOrderHeader>(a => a.PurchaseOrderID);
PurchaseOrderHeader query = new PurchaseOrderHeader
{
SearchOptions = new SearchHelpers.SearchOptions
{
SearchParameters = new List<CompareBase>
{
new EqualTo(dataPropertyName, model.PurchaseOrderID)
}
}
};
PurchaseOrderHeader foundModel = _service.RunTestFind(query, 0).FirstOrDefault() as PurchaseOrderHeader;
Assert.IsNull(foundModel);
}
//
// Helper Methods
//
private static PurchaseOrderHeader CreateModelForTest()
{
DateTime date = new DateTime(2010, 5, 12);
return new PurchaseOrderHeader
{
RevisionNumber = 0,
Status = 3,
EmployeeID = 244,
VendorID = 83,
ShipMethodReference = ShipMethod.GetReference(4),
OrderDate = date,
SubTotal = 201.04M,
TaxAmt = 16.0832M,
Freight = 5.026M,
TotalDue = 222.1492M,
ModifiedDate = date
};
}
}
}