Click here to Skip to main content
15,881,754 members
Articles / Programming Languages / C#

The Power of a POC

Rate me:
Please Sign up or sign in to vote.
4.42/5 (6 votes)
26 Apr 2011CPOL13 min read 49.9K   358   19  
The importance of creating a POC as the first step to your next adventure
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
			};
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Webbert Solutions
United States United States
Dave is an independent consultant working in a variety of industries utilizing Microsoft .NET technologies.

Comments and Discussions