public AppsResult GetLatestResults(TestRunInstanceType type, int uniqueId)
        {
            var result = new AppsResult();

            try
            {
                var triList = _db.GetCollection <TestRunInstance>("TestRunInstances"); //plan, test or step
                var trList  = _db.GetCollection <TestRun>("TestRuns");                 //each step

                var tri = triList.Query()
                          .Where(tri => tri.Type == type && tri.UniqueID == uniqueId)
                          .OrderByDescending(tri => tri.DateCreated);

                if (tri.Count() > 0)
                {
                    var triSingle = tri.First();

                    var runResult = new TestResult();
                    runResult.Instance = triSingle;
                    runResult.Runs     = trList.Query().Where(tr => tr.TestRunInstanceID == triSingle.ID).ToList();

                    result.Data    = runResult;
                    result.Success = true;
                }
            }
            catch (System.Exception ex)
            {
                new AppFlows.Test.TestRun.Exception(ex, ref result);
            }

            return(result);
        }
        public AppsResult RunFunctional(int appId, TestRunInstanceType type, int uniqueId)
        {
            var result = new AppsResult();

            try
            {
                var triList  = _db.GetCollection <TestRunInstance>("TestRunInstances"); //plan, test or step
                var trList   = _db.GetCollection <TestRun>("TestRuns");                 //each step
                var testList = _db.GetCollection <Test>("Tests");                       //each step


                var tri = new TestRunInstance();

                tri.Type     = type;
                tri.UniqueID = uniqueId;

                triList.Upsert(tri);

                var testController = new TestController(_env, _data, _driver, _ctx);

                switch (type)
                {
                case TestRunInstanceType.TestPlan:

                    var testPlans = (List <TestPlan>)testController.GetTestPlans(appId).Data;
                    var testPlan  = testPlans.Where(tp => tp.ID == uniqueId);
                    var tests     = (List <Test>)testController.GetTests(testPlan.Single().ID).Data;

                    foreach (var testPlanTest in tests)
                    {
                        var steps = (List <TestStep>)testController.GetSteps(testPlanTest.ID).Data;
                        foreach (var step in steps)
                        {
                            testController.RunStepScript(tri.ID, uniqueId, testPlanTest.ID, step.ID, step.Script);
                        }
                    }
                    break;

                case TestRunInstanceType.Test:

                    var test = (List <Test>)testController.GetTest(uniqueId).Data;

                    var testSteps = (List <TestStep>)testController.GetSteps(test.Single().ID).Data;
                    foreach (var step in testSteps)
                    {
                        testController.RunStepScript(tri.ID, test.Single().TestPlanID, test.Single().ID, step.ID, step.Script);
                    }

                    break;

                case TestRunInstanceType.TestStep:

                    var testSteps2 = (List <TestStep>)testController.GetStep(uniqueId).Data;
                    if (testSteps2.Count == 1)
                    {
                        var testStep     = testSteps2.Single();
                        var stepTestList = testList.Query().Where(t => t.ID == testStep.TestID).ToList();
                        if (stepTestList.Count() == 1)
                        {
                            var stepTest = stepTestList.Single();
                            testController.RunStepScript(tri.ID, stepTest.TestPlanID, testStep.TestID, testStep.ID, testStep.Script);
                        }
                        else
                        {
                            new AppFlows.Test.TestRun.Fail("None or more than on test step found.", ref result);
                        }
                    }
                    else
                    {
                        new AppFlows.Test.TestRun.Fail("None or more than one step found.", ref result);
                    }

                    break;
                }
                //result.Data = objs.Query().Where(ss => ss.ID == testRunId).ToList();
                result.Success = true;
            }
            catch (System.Exception ex)
            {
                new AppFlows.Test.TestRun.Exception(ex, ref result);
            }

            return(result);
        }