/// <summary> /// This method attaches additional properties to the workflow and saves it to Database /// </summary> /// <param name="WorkFlow"></param> /// <returns></returns> public static StatusReplyDC CreateAndUploadWorkFlow(StoreLibraryAndActivitiesRequestDC workflow) { workflow.Incaller = Environment.UserName; workflow.IncallerVersion = incallerversion; workflow.InInsertedByUserAlias = Environment.UserName; workflow.InUpdatedByUserAlias = Environment.UserName; var result = new StatusReplyDC(); //Save WF result = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(workflow)[0].StatusReply; return result; }
/// <summary> /// Examines a dependency tree to determine if the state of the dependencies is compatible /// with the state of the StoreActivity records being persisted/checked. /// /// -- "Retired" in any dependency means that the entire tree is invalid. /// -- "Private" in any dependency when going public means the tree is invalid. /// /// </summary> /// <param name="request">The tree to examine.</param> /// <returns>A tuple containing true if everything passed, or false and a message if the tests failed.</returns> public static Tuple<bool, string> CheckDependencyRules(StoreLibraryAndActivitiesRequestDC request) { Action<List<StoreActivityLibraryDependenciesGroupsRequestDC>> findDependencies = null; var allDependencies = new Dictionary<Tuple<string, string>, StoreActivityLibraryDependenciesGroupsRequestDC>(); bool hasInvalidDependencyState; bool hasRetiredState; string message = String.Empty; findDependencies = list => { if (null != list) list.ForEach(item => { var key = new Tuple<string, string>(item.Name, item.Version); if (!allDependencies.ContainsKey(key)) allDependencies.Add(key, item); findDependencies(item.List); }); }; findDependencies(request.StoreActivityLibraryDependenciesGroupsRequestDC.List); GetMissingDependencyStates(allDependencies.Values); if (request.StoreActivitiesList.Any()) { var rootVersions = request .StoreActivitiesList .Select(item => GetWorkflowRecordState(item.StatusCodeName)); var mostRestrictiveRootState = rootVersions.Min(); hasInvalidDependencyState = allDependencies.Values.Any(entry => GetWorkflowRecordState(entry.Status) < mostRestrictiveRootState); if (hasInvalidDependencyState) message += string.Format(InvalidDependencyStateMessage, mostRestrictiveRootState); hasRetiredState = allDependencies.Values.Any(entry => GetWorkflowRecordState(entry.Status) == WorkflowRecordState.Retired); if (hasRetiredState) message += HasRetiredStateMessage; return new Tuple<bool, string>(!(hasInvalidDependencyState || hasRetiredState), message.Trim()); } return new Tuple<bool, string>(true, string.Empty); }
public void CreateNewProjectWithExistingName() { //Create WF with private AL, private SA var workflow = new StoreLibraryAndActivitiesRequestDC(); workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(privatestate, privatestatusid); var StoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); var storeAct = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); StoreActList.Add(storeAct); workflow.StoreActivitiesList = StoreActList; var result = VersionControlHelper.CreateAndUploadWorkFlow(workflow); Assert.AreEqual(0, result.Errorcode); //get WF, check version for both SA and AL var reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //Check status and version VersionControlHelper.CheckOutput(reply, privatestate, "0.0.0.1", privatestatusid); //Create again with similar name as previous one //Create WF with private AL, private SA var newworkflow = new StoreLibraryAndActivitiesRequestDC(); newworkflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDCWithName(privatestate, privatestatusid, workflow.ActivityLibrary.Name); List<StoreActivitiesDC> NewStoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); StoreActivitiesDC NewstoreAct = VersionControlHelper.GetStoreActivitiesDC(newworkflow.ActivityLibrary, 1); StoreActList.Add(NewstoreAct); newworkflow.StoreActivitiesList = NewStoreActList; newworkflow.Incaller = Environment.UserName; newworkflow.IncallerVersion = incallerversion; newworkflow.InInsertedByUserAlias = Environment.UserName; newworkflow.InUpdatedByUserAlias = Environment.UserName; StatusReplyDC Newresult = new StatusReplyDC(); //Save WF string version = CWF.BAL.Versioning.VersionHelper.GetNextVersion(NewstoreAct).ToString(); newworkflow.ActivityLibrary.VersionNumber = version; Newresult = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(newworkflow)[0].StatusReply; //Expect error Assert.AreEqual(0, Newresult.Errorcode); }
/// <summary> /// Verify UploadActivityLibrariesAndDependentActivities FROM etblActivityLibraries Table /// </summary> private void VerifyUploadActivityLibraryAndDependentActivities(string incaller, int errorCode) { storeLibraryAndActivitiesRequest = new StoreLibraryAndActivitiesRequestDC(); // reply = null; storeLibraryAndActivitiesRequest.IncallerVersion = IN_CALLER_VERSION; storeLibraryAndActivitiesRequest.Incaller = incaller; storeLibraryAndActivitiesRequest.InInsertedByUserAlias = USER; storeLibraryAndActivitiesRequest.InUpdatedByUserAlias = USER; // Create ActivityLibrary object and add to request object ActivityLibraryDC activityLibraryDC = new ActivityLibraryDC(); // create storeActivitiesDC list and individual objects and add to request List<StoreActivitiesDC> storeActivitiesDCList = new List<StoreActivitiesDC>(); StoreActivitiesDC storeActivitiesDC = new StoreActivitiesDC(); CreateActivityLibraryAndStoreActivities(out activityLibraryDC, out storeActivitiesDCList); storeLibraryAndActivitiesRequest.ActivityLibrary = activityLibraryDC; storeLibraryAndActivitiesRequest.StoreActivityLibraryDependenciesGroupsRequestDC = CreateStoreActivityLibraryDependenciesGroupsRequestDC(); storeLibraryAndActivitiesRequest.StoreActivitiesList = storeActivitiesDCList; storeActivitiesDCList.ForEach(record => record.Version = VersionHelper.GetNextVersion(record).ToString()); try { replyList = new List<StoreActivitiesDC>(devBranchProxy.UploadActivityLibraryAndDependentActivities(storeLibraryAndActivitiesRequest)); } catch (FaultException e) { Assert.Fail("Failed to upload from etblActivityLibraries: {0}", e.Message); } catch (Exception ex) { Assert.Fail("Failed to upload from etblActivityLibraries: {0}", ex.Message); } Assert.IsNotNull(replyList, "Reply is null"); Assert.AreEqual(errorCode, replyList[0].StatusReply.Errorcode, "UploadActivityLibraryAndDependentActivities not successful."); }
public void SavePublicProjectAndThenMakeItPrivate() { //Create WF with private SA, and AL string expectedVersion = "0.1.0.0"; var workflow = new StoreLibraryAndActivitiesRequestDC(); workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(publicstate, publicstatusid); workflow.ActivityLibrary.VersionNumber = expectedVersion; var StoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); var storeAct = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); StoreActList.Add(storeAct); workflow.StoreActivitiesList = StoreActList; var result = VersionControlHelper.CreateAndUploadWorkFlow(workflow); Assert.AreEqual(0, result.Errorcode); //get WF, check version for both SA and AL var reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //Check status and version VersionControlHelper.CheckOutput(reply, publicstate, "0.1.0.0", publicstatusid); //Now change status to private workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(privatestate, privatestatusid); workflow.StoreActivitiesList[0] = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); //Save string version = CWF.BAL.Versioning.VersionHelper.GetNextVersion(storeAct).ToString(); workflow.ActivityLibrary.VersionNumber = version; workflow.StoreActivitiesList[0].Version = version; result = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(workflow)[0].StatusReply; Assert.AreEqual(0, result.Errorcode); //Get reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //assert on status and version 0.1.0.1 VersionControlHelper.CheckOutput(reply, privatestate, "0.2.0.0", privatestatusid); }
public void SaveProjectAsPublic() { //Create WF with public status, public AL, public SA string expectedVersion = "0.1.0.0"; var workflow = new StoreLibraryAndActivitiesRequestDC(); workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(publicstate, publicstatusid); workflow.ActivityLibrary.VersionNumber = expectedVersion; var StoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); var storeAct = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); StoreActList.Add(storeAct); workflow.StoreActivitiesList = StoreActList; var result = VersionControlHelper.CreateAndUploadWorkFlow(workflow); Assert.AreEqual(0, result.Errorcode); //get AL and SA info var reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //assert on all public status and version of WF is 0.1.0.0 VersionControlHelper.CheckOutput(reply, publicstate, expectedVersion, publicstatusid); //Now change status to public workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(publicstate, publicstatusid); workflow.StoreActivitiesList[0] = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); //Save string version = CWF.BAL.Versioning.VersionHelper.GetNextVersion(storeAct).ToString(); workflow.ActivityLibrary.VersionNumber = version; workflow.StoreActivitiesList[0].Version = version; result = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(workflow)[0].StatusReply; Assert.AreEqual(0, result.Errorcode); //Get reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //assert on status and version 0.1.0.0..zeroing out revision number when going public VersionControlHelper.CheckOutput(reply, publicstate, "0.2.0.0", publicstatusid); }
public void SaveProjectAsPrivate() { //Create WF with private AL, private SA var workflow = new StoreLibraryAndActivitiesRequestDC(); workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(privatestate, privatestatusid); var StoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); var storeAct = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); StoreActList.Add(storeAct); workflow.StoreActivitiesList = StoreActList; var result = VersionControlHelper.CreateAndUploadWorkFlow(workflow); Assert.AreEqual(0, result.Errorcode); //get AL and SA info var reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //assert on all private status and version of WF is 0.0.0.1, version of both AL and stored activity should be same. VersionControlHelper.CheckOutput(reply, privatestate, "0.0.0.1", privatestatusid); //Now change status to private workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(privatestate, privatestatusid); workflow.StoreActivitiesList[0] = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); //Save string version = CWF.BAL.Versioning.VersionHelper.GetNextVersion(storeAct).ToString(); workflow.ActivityLibrary.VersionNumber = version; workflow.StoreActivitiesList[0].Version = version; result = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(workflow)[0].StatusReply; Assert.AreEqual(0, result.Errorcode); //Get reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //assert on status and version 0.1.0.1 VersionControlHelper.CheckOutput(reply, privatestate, "0.0.0.2", privatestatusid); }
public void PublishProject() { //Create WF with private AL, private SA var workflow = new StoreLibraryAndActivitiesRequestDC(); workflow.ActivityLibrary = VersionControlHelper.GetActivityLibraryDC(privatestate, privatestatusid); var StoreActList = new System.Collections.Generic.List<StoreActivitiesDC>(); var storeAct = VersionControlHelper.GetStoreActivitiesDC(workflow.ActivityLibrary, 1); StoreActList.Add(storeAct); workflow.StoreActivitiesList = StoreActList; var result = VersionControlHelper.CreateAndUploadWorkFlow(workflow); Assert.AreEqual(0, result.Errorcode); //get WF, check version for both SA and AL var reply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //Check status and version VersionControlHelper.CheckOutput(reply, privatestate, "0.0.0.1", privatestatusid); //Publish Project //assert the status is now public in DB with status revised as 0.1.0.0 var Newreply = VersionControlHelper.GetProjectInfo(workflow.ActivityLibrary, workflow.StoreActivitiesList); //Check status and version VersionControlHelper.CheckOutput(Newreply, publicstate, "0.1.0.1", publicstatusid); }
public static void MyClassInitialize(TestContext testContext) { string nameModifier = "Test_" + Guid.NewGuid().ToString(); CWF.DataContracts.StoreLibraryAndActivitiesRequestDC request = new CWF.DataContracts.StoreLibraryAndActivitiesRequestDC(); List<CWF.DataContracts.StoreActivitiesDC> reply = null; request.IncallerVersion = INCALLERVERSION; request.Incaller = INCALLER; request.InInsertedByUserAlias = INCALLER; request.InUpdatedByUserAlias = INCALLER; request.EnforceVersionRules = true; // Create ActivityLibrary object and add to request object CWF.DataContracts.ActivityLibraryDC activityLibraryDC = new CWF.DataContracts.ActivityLibraryDC(); // create storeActivitiesDC list and individual objects and add to request List<CWF.DataContracts.StoreActivitiesDC> storeActivitiesDCList = new List<CWF.DataContracts.StoreActivitiesDC>(); CWF.DataContracts.StoreActivitiesDC storeActivitiesDC = new CWF.DataContracts.StoreActivitiesDC(); DALUnitTest.CreateActivityLibraryAndStoreActivities(out activityLibraryDC, out storeActivitiesDCList); request.ActivityLibrary = activityLibraryDC; request.StoreActivitiesList = storeActivitiesDCList; request.StoreActivitiesList.ForEach(record => { record.Name += nameModifier; record.ActivityLibraryName += nameModifier; record.ShortName += nameModifier; }); activityLibraryDC.Name += nameModifier; request.StoreActivityLibraryDependenciesGroupsRequestDC = new StoreActivityLibraryDependenciesGroupsRequestDC() { Name = activityLibraryDC.Name, Version = activityLibraryDC.VersionNumber, List = new List<StoreActivityLibraryDependenciesGroupsRequestDC> { new StoreActivityLibraryDependenciesGroupsRequestDC { IncallerVersion = INCALLERVERSION, Incaller = INCALLER, Name = "PublishingInfo", Version = "1.0.0.1" }, } }; reply = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(request); Assert.IsNotNull(reply); activityId = reply[0].Id; Assert.IsTrue(activityId > 0); //Test Create or Update Guid taskGuid = Guid.NewGuid(); TaskActivityDC reply1 = null; TaskActivityDC request1 = new TaskActivityDC() { ActivityId = activityId, Guid = taskGuid, Incaller = INCALLER, IncallerVersion = INCALLERVERSION, AssignedTo = OWNER }; try { reply1 = TaskActivityRepositoryService.TaskActivitiesCreateOrUpdate(request1); } catch (Exception ex) { string faultMessage = ex.Message; Assert.Fail(faultMessage + "-catch exception in reply = TaskActivityRepository.CreateOrUpdate(request)"); } Assert.IsNotNull(reply1); Assert.IsTrue(reply1.Id > 0); Assert.AreEqual(SprocValues.REPLY_ERRORCODE_VALUE_OK, reply1.StatusReply.Errorcode); }
public void TESTBalUploadActivityLibraryAndDependentActivitiesRepeat() { var nameModifier = Guid.NewGuid().ToString(); CWF.DataContracts.StoreLibraryAndActivitiesRequestDC request = new CWF.DataContracts.StoreLibraryAndActivitiesRequestDC(); List<CWF.DataContracts.StoreActivitiesDC> reply = null; request.IncallerVersion = INCALLERVERSION; request.Incaller = INCALLER; request.InInsertedByUserAlias = INCALLER; request.InUpdatedByUserAlias = INCALLER; request.EnforceVersionRules = true; // Create ActivityLibrary object and add to request object CWF.DataContracts.ActivityLibraryDC activityLibraryDC = new CWF.DataContracts.ActivityLibraryDC(); // create storeActivitiesDC list and individual objects and add to request List<CWF.DataContracts.StoreActivitiesDC> storeActivitiesDCList = new List<CWF.DataContracts.StoreActivitiesDC>(); CWF.DataContracts.StoreActivitiesDC storeActivitiesDC = new CWF.DataContracts.StoreActivitiesDC(); CreateActivityLibraryAndStoreActivities(out activityLibraryDC, out storeActivitiesDCList); request.ActivityLibrary = activityLibraryDC; request.StoreActivitiesList = storeActivitiesDCList; request.StoreActivitiesList.ForEach(record => { record.Name += nameModifier; record.ActivityLibraryName += nameModifier; record.ShortName += nameModifier; }); activityLibraryDC.Name = "PublishingInfo"; activityLibraryDC.VersionNumber = "1.0.0.1"; request.StoreActivityLibraryDependenciesGroupsRequestDC = new StoreActivityLibraryDependenciesGroupsRequestDC() { Name = activityLibraryDC.Name, Version = activityLibraryDC.VersionNumber, List = new List<StoreActivityLibraryDependenciesGroupsRequestDC> { new StoreActivityLibraryDependenciesGroupsRequestDC { IncallerVersion = INCALLERVERSION, Incaller = INCALLER, Name = "PublishingInfo", Version = "1.0.0.1" }, } }; try { reply = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(request); } catch (Exception ex) { string faultMessage = ex.Message; Assert.Fail(faultMessage + "-catch (Exception ex) on reply = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(request);"); } Assert.IsNotNull(reply); }
public void TESTBalUploadActivityLibraryAndDependentActivitiesAndUpdateVersionAndSaveStoreActivitiesFailed() { //var nameModifier = Guid.NewGuid().ToString(); CWF.DataContracts.StoreLibraryAndActivitiesRequestDC request = new CWF.DataContracts.StoreLibraryAndActivitiesRequestDC(); List<CWF.DataContracts.StoreActivitiesDC> reply = null; request.IncallerVersion = INCALLERVERSION; request.Incaller = INCALLER; request.InInsertedByUserAlias = INCALLER; request.InUpdatedByUserAlias = INCALLER; request.EnforceVersionRules = false; // Create ActivityLibrary object and add to request object CWF.DataContracts.ActivityLibraryDC activityLibraryDC = new CWF.DataContracts.ActivityLibraryDC(); // create storeActivitiesDC list and individual objects and add to request List<CWF.DataContracts.StoreActivitiesDC> storeActivitiesDCList = new List<CWF.DataContracts.StoreActivitiesDC>(); CWF.DataContracts.StoreActivitiesDC storeActivitiesDC = new CWF.DataContracts.StoreActivitiesDC(); CreateActivityLibraryAndStoreActivities(out activityLibraryDC, out storeActivitiesDCList); request.ActivityLibrary = activityLibraryDC; request.StoreActivitiesList = new List<StoreActivitiesDC> { CreateSA(string.Empty, string.Empty, new Guid(), activityLibraryDC.Name, activityLibraryDC.VersionNumber) }; request.StoreActivityLibraryDependenciesGroupsRequestDC = new StoreActivityLibraryDependenciesGroupsRequestDC() { Name = activityLibraryDC.Name, Version = activityLibraryDC.VersionNumber, List = new List<StoreActivityLibraryDependenciesGroupsRequestDC> { new StoreActivityLibraryDependenciesGroupsRequestDC { IncallerVersion = INCALLERVERSION, Incaller = INCALLER, Name = "PublishingInfo", Version = "1.0.0.1" }, } }; try { reply = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(request); } catch (Exception ex) { string faultMessage = ex.Message; Assert.Fail(faultMessage + "-catch (Exception ex) on reply = CWF.BAL.Services.UploadActivityLibraryAndDependentActivities(request);"); } Assert.IsNotNull(reply); Assert.AreEqual(reply[0].StatusReply.Errorcode, 55106); }
public void TestFillInMissingStatuses() { var workflowName = "Test " + Guid.NewGuid().ToString(); var testWorkflow = CreateTestStoreActivity(workflowName, TestVersionString, false); var testDependencyName = "Test Dependency " + Guid.NewGuid().ToString(); //var testDependency = CreateTestStoreActivity(testDependencyName, TestVersionString, true); var request = new StoreLibraryAndActivitiesRequestDC(); request.StoreActivitiesList = new List<StoreActivitiesDC>(); request.StoreActivitiesList.Add(testWorkflow); request.StoreActivityLibraryDependenciesGroupsRequestDC = new StoreActivityLibraryDependenciesGroupsRequestDC(); request.StoreActivityLibraryDependenciesGroupsRequestDC.List = new List<StoreActivityLibraryDependenciesGroupsRequestDC>(); CreateTestDependencies(request.StoreActivityLibraryDependenciesGroupsRequestDC.List); var item = request.StoreActivityLibraryDependenciesGroupsRequestDC.List[1]; item.Status = String.Empty; item.Name = testDependencyName; item.Version = "1.0.0.0"; using (ImplementationOfType impl = new ImplementationOfType(typeof(Database))) { var table = new System.Data.DataTable(); DataReaderMock mockReader; table.Columns.Add("AuthGroupId", typeof(int)); table.Columns.Add("AuthGroupName", typeof(string)); table.Columns.Add("Category", typeof(Guid)); table.Columns.Add("CategoryId", typeof(int)); table.Columns.Add("Description", typeof(string)); table.Columns.Add("Executable", typeof(byte[])); table.Columns.Add("Guid", typeof(Guid)); table.Columns.Add("HasActivities", typeof(bool)); table.Columns.Add("Id", typeof(string)); table.Columns.Add("ImportedBy", typeof(string)); table.Columns.Add("MetaTags", typeof(string)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Status", typeof(int)); table.Columns.Add("StatusName", typeof(string)); table.Columns.Add("VersionNumber", typeof(string)); table.Columns.Add("FriendlyName", typeof(string)); table.Columns.Add("ReleaseNotes", typeof(string)); table.Rows.Add( 0, String.Empty, Guid.Empty, 0, String.Empty, DBNull.Value, Guid.Empty, false, 0, String.Empty, String.Empty, testDependencyName, 0, DefaultStatusCodeName, String.Empty, String.Empty, String.Empty ); mockReader = new DataReaderMock(table); impl.Register<Database>(inst => inst.ExecuteReader(Argument<DbCommand>.Any)).Return(mockReader); VersionHelper.GetMissingDependencyStates(request.StoreActivityLibraryDependenciesGroupsRequestDC.List); Assert.IsFalse(request .StoreActivityLibraryDependenciesGroupsRequestDC .List .Any(resultItem => string.IsNullOrEmpty(item.Status)), "All items should have their status property filled in."); } }
public void TestCheckDependencyRules() { var workflowName = "Test " + Guid.NewGuid().ToString(); var testWorkflow = CreateTestStoreActivity(workflowName, TestVersionString, false); var request = new StoreLibraryAndActivitiesRequestDC(); request.StoreActivitiesList = new List<StoreActivitiesDC>(); request.StoreActivitiesList.Add(testWorkflow); request.StoreActivityLibraryDependenciesGroupsRequestDC = new StoreActivityLibraryDependenciesGroupsRequestDC(); Action createTree = () => { // create a dependency tree 3 levels deep, 10 items wide request.StoreActivityLibraryDependenciesGroupsRequestDC.List = new List<StoreActivityLibraryDependenciesGroupsRequestDC>(); CreateTestDependencies(request.StoreActivityLibraryDependenciesGroupsRequestDC.List); request .StoreActivityLibraryDependenciesGroupsRequestDC .List .ForEach(dependency => { dependency.List = new List<StoreActivityLibraryDependenciesGroupsRequestDC>(); CreateTestDependencies(dependency.List); dependency .List .ForEach(dependency2 => { dependency2.List = new List<StoreActivityLibraryDependenciesGroupsRequestDC>(); CreateTestDependencies(dependency2.List); }); }); }; // everything should be Public for a new tree. The test should pass. createTree(); testWorkflow.StatusCodeName = "Public"; Assert.IsTrue(VersionHelper.CheckDependencyRules(request).Item1, "Expected all Public to pass the test"); // with one item in the tree as private, the rule should fail. testWorkflow.StatusCodeName = "Public"; createTree(); request .StoreActivityLibraryDependenciesGroupsRequestDC .List[5] .List[7].Status = "Private"; // set an arbitrary item to Private Assert.IsFalse(VersionHelper.CheckDependencyRules(request).Item1, "Expected all Public but with one set to Private to fail the test."); // with one item in the tree as private, the rule should fail. testWorkflow.StatusCodeName = "Public"; createTree(); request .StoreActivityLibraryDependenciesGroupsRequestDC .List[2] .List[7].Status = "Retired"; // set an arbitrary item to Retired Assert.IsFalse(VersionHelper.CheckDependencyRules(request).Item1, "Expected all Public but with one set to Retired to fail the test."); }