public async Task CreateNewSpecification()
        {
            short  theEmpID     = 991; //Ben Johnson
            string theExtRevId  = "A";
            int    samplePlanId = 1;
            string descPrefix   = " - This is a test. Rev: ";

            var thePreAddSpecList = await SpecService.GetAllHydratedSpecs();

            var calcNewMaxSpecId = thePreAddSpecList.Max(i => i.Id) + 1;

            var theBaselineSpecModel = CreateBaselineSpecModel(theExtRevId, descPrefix, theEmpID, samplePlanId, 0, 0);
            var theCreatedSpecId     = await SpecService.CreateNewSpec(theBaselineSpecModel);

            var theCreatedSpecModel = await SpecService.GetHydratedCurrentRevForSpec(theCreatedSpecId);

            ///set test values
            theBaselineSpecModel.Id = calcNewMaxSpecId;
            theBaselineSpecModel.SpecRevModels.ElementAt(0).DateCreated = DateTime.Now.Date;
            theBaselineSpecModel.SpecRevModels.ElementAt(0).TimeCreated = DateTime.Now.TimeOfDay;
            theBaselineSpecModel.SpecRevModels.ElementAt(0).SpecId      = calcNewMaxSpecId;
            theBaselineSpecModel.SpecRevModels.ElementAt(0).InternalRev = 10;
            theBaselineSpecModel.SpecRevModels.ElementAt(0).Description = DateTime.Now.Date.ToString("yyyy/MM/dd") + descPrefix + theExtRevId;

            //total spec count increased by 1

            Validate.ValidateModelCompleteness(theBaselineSpecModel, theCreatedSpecModel, new List <Object>()
            {
                "SpecRevModels"
            });
            Validate.ValidateModelCompleteness(theBaselineSpecModel.SpecRevModels.ElementAt(0), theCreatedSpecModel.SpecRevModels.ElementAt(0),
                                               new List <Object>()
            {
                "TimeCreated", "SubLevels"
            });                                                     // excluded TimeModified because there is a variation in (milli)seconds we can't account for
            //Warning! Testing against DateModified might be problematic if tested within seconds of midnight
        }
        public async Task RevUpASpecification()
        {
            //create a new rev with 2 sublevels with 3 choices each
            //then rev up with 3 sublevels and 4 choices each

            short  theEmpIdRev1      = 991; //Ben Johnson
            short  theEmpIdRev2      = 941; //Ed Wakefeild
            string theExtRev1Id      = "X";
            string theExtRev2Id      = "Y";
            int    samplePlanIdRev1  = 1;
            int    samplePlanIdRev2  = 7;
            int    numSublevelsRev1  = 2;
            int    numSubChoicesRev1 = 3;
            int    numSublevelsRev2  = 3;
            int    numSubChoicesRev2 = 4;
            string descPrefixRev1    = " - This is the inital rev. Rev: ";
            string descPrefixRev2    = " - This is the new rev. Rev: ";

            var theBaselineSpecModel = CreateBaselineSpecModel(theExtRev1Id, descPrefixRev1, theEmpIdRev1, samplePlanIdRev1, numSublevelsRev1, numSubChoicesRev1);
            int theCreatedSpecId     = await SpecService.CreateNewSpec(theBaselineSpecModel);

            var theExpectedRev2SpecModel    = CreateBaselineSpecModel(theExtRev2Id, descPrefixRev2, theEmpIdRev2, samplePlanIdRev2, numSublevelsRev2, numSubChoicesRev2);
            var theExpectedRev2SpecRevModel = theExpectedRev2SpecModel.SpecRevModels.ElementAt(0);

            theExpectedRev2SpecRevModel.SpecId = theCreatedSpecId;

            int theSpecId = await SpecService.RevUpSpec(theExpectedRev2SpecRevModel);

            //set up test values
            theExpectedRev2SpecRevModel.InternalRev = 11; //rev was incremented
            theExpectedRev2SpecRevModel.DateCreated = DateTime.Now.Date;
            theBaselineSpecModel.Id = theCreatedSpecId;

            var theNewRev2SpecModel = await SpecService.GetHydratedCurrentRevForSpec(theSpecId); //get new model for comparison

            Validate.ValidateModelCompleteness(theBaselineSpecModel, theNewRev2SpecModel, new List <Object>()
            {
                "SpecRevModels"
            });

            var theNewSpecRev2Model = theNewRev2SpecModel.SpecRevModels.ElementAt(1);

            Validate.ValidateModelCompleteness(theExpectedRev2SpecRevModel, theNewSpecRev2Model, new List <Object>()
            {
                "TimeCreated", "SubLevels", "SamplePlan"
            });

            /////////////////////////////////////////////////////////////
            //Verify rev2 is accurate
            var theNewRev2SpecSubLevelModels      = theNewSpecRev2Model.SubLevels;
            var theExpectedRev2SpecSubLevelModels = theExpectedRev2SpecRevModel.SubLevels;

            for (int i = 0; i < numSublevelsRev2; i++)
            {
                Validate.ValidateModelCompleteness(theExpectedRev2SpecSubLevelModels.ElementAt(i), theNewRev2SpecSubLevelModels.ElementAt(i),
                                                   new List <Object>()
                {
                    "Choices"
                });

                var theNewRev2SpecChoiceList      = theNewRev2SpecSubLevelModels.ElementAt(i).Choices;
                var theExpectedRev2SpecChoiceList = theExpectedRev2SpecSubLevelModels.ElementAt(i).Choices;

                for (int j = 0; j < numSubChoicesRev2; j++)
                {
                    Validate.ValidateModelCompleteness(theExpectedRev2SpecChoiceList.ElementAt(j), theNewRev2SpecChoiceList.ElementAt(j));
                }
            }
        }