예제 #1
0
        public DependenciesInfo BuildDependenciesInfo(DependenciesSection configSection, int osBuild)
        {
            bool supported = TryGetOsBuildNumber(configSection, ref osBuild);

            if (!supported)
            {
                throw new NotSupportedOperatingSystemException(osBuild);
            }

            var info = new DependenciesInfo
            {
                CompatibleOsBuild = osBuild,
                EvaluationContext = new EvaluationContext(),
                Dependencies      = new List <Dependency>()
            };


            // Add common checks & dependencies
            this.AddDependencyChecks(info, configSection.CommonChecks);
            this.AddDependencies(info, configSection.MinimumRequirements.Dependencies);

            // Add OS checks & dependencies
            DependencyGroup osDependencyGroup = configSection.DependencyGroups.GetDependencyGroupByOsBuild(osBuild);

            if (osDependencyGroup != null)
            {
                this.AddDependencyChecks(info, osDependencyGroup.Checks);
                this.AddDependencies(info, osDependencyGroup.Dependencies);
            }

            // Add evaluators
            this.AddCheckEvaluators((EvaluationContext)info.EvaluationContext, configSection.CheckEvaluators);

            return(info);
        }
예제 #2
0
        ArrayList BuildDependencies(string infile)
        {
            FileStream fs = null;

            try
            {
                ArrayList dependencies = new ArrayList();
                RecursivelyAddDependencies(infile, dependencies);
                DependencyGroup depgroup = new DependencyGroup();
                depgroup.dependencies = dependencies;
                // save the data
                XmlSerializer ser         = new XmlSerializer(typeof(DependencyGroup));
                string        depFileName = DependencyFileName(infile);
                fs = new FileStream(depFileName, FileMode.Create);
                ser.Serialize(fs, depgroup);
                return(dependencies);
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }
예제 #3
0
        private void groups(XElement document, Solution solution)
        {
            var groups = document.Element("Groups");

            if (groups == null)
            {
                return;
            }

            var dependencyGroups = new List <DependencyGroup>();

            foreach (var groupElement in groups.Elements("Group"))
            {
                var group        = new DependencyGroup();
                var dependencies = new List <GroupedDependency>();

                foreach (var depElement in groupElement.Descendants())
                {
                    var dep = new GroupedDependency();
                    fillProperties(depElement, dep);

                    dependencies.Add(dep);
                }

                group.GroupedDependencies = dependencies;
                dependencyGroups.Add(group);
            }

            solution.Groups = dependencyGroups;
        }
예제 #4
0
        public void persists_and_retrieves_the_solution()
        {
            var solution = new Solution
            {
                Name             = "Test",
                BuildCommand     = "rake",
                FastBuildCommand = "rake compile",
                Feeds            = new[] { Feed.NuGetV2, Feed.NuGetV1 },
                Nugets           = new[] { new Dependency("FubuCore", "1.0.1.0") }
            };

            var group = new DependencyGroup();

            group.Dependencies.Add(new GroupedDependency("FubuCore"));
            solution.Groups.Add(group);

            var constrainedDependency = new Dependency("Bottles", "1.0.0.0")
            {
                VersionConstraint = VersionConstraint.DefaultFloat
            };

            solution.AddDependency(constrainedDependency);

            solution.Nuspecs.Add(new NuspecMap {
                File = "Temp", Project = "Test"
            });

            CheckXmlPersistence.For(solution);
        }
예제 #5
0
        private void groups(XElement document, Solution solution)
        {
            var groups = document.Element("Groups");
            if (groups == null) return;

            var dependencyGroups = new List<DependencyGroup>();
            foreach (var groupElement in groups.Elements("Group"))
            {
                var group = new DependencyGroup();
                var dependencies = new List<GroupedDependency>();

                foreach (var depElement in groupElement.Descendants())
                {
                    var dep = new GroupedDependency();
                    fillProperties(depElement, dep);

                    dependencies.Add(dep);
                }

                group.GroupedDependencies = dependencies;
                dependencyGroups.Add(group);
            }

            solution.Groups = dependencyGroups;
        }
예제 #6
0
        public void requests_for_a_single_dependency_in_multiple_groups()
        {
            var g1 = new DependencyGroup();

            g1.Add(new GroupedDependency("FubuCore"));
            g1.Add(new GroupedDependency("FubuLocalization"));
            theSolution.AddGroup(g1);

            var g2 = new DependencyGroup();

            g2.Add(new GroupedDependency("FubuLocalization"));
            g2.Add(new GroupedDependency("Bottles"));
            theSolution.AddGroup(g2);

            theInput.NugetFlag = "FubuCore";

            var requests = theInput.Requests(theSolution).ToArray();

            requests[0].Dependency.ShouldEqual(new Dependency("FubuCore"));
            requests[0].Batched.ShouldBeFalse();

            requests[1].Dependency.ShouldEqual(new Dependency("FubuLocalization"));
            requests[1].Batched.ShouldBeFalse();

            requests[2].Dependency.ShouldEqual(new Dependency("Bottles"));
            requests[2].Batched.ShouldBeFalse();
        }
예제 #7
0
        private List <DependencyGroup> CreateDependencyGroups(IEnumerable <ProjectContext> projectContexts)
        {
            var libraryNameDependencyGroupMap = new Dictionary <string, DependencyGroup>();

            foreach (var projectContext in projectContexts)
            {
                var libraries = projectContext.LibraryManager.GetLibraries();

                foreach (var library in libraries)
                {
                    var dependencyInfo = DependencyInfo.Create(projectContext, library);

                    if (libraryNameDependencyGroupMap.ContainsKey(dependencyInfo.Name))
                    {
                        var dependencyGroup = libraryNameDependencyGroupMap[dependencyInfo.Name];

                        dependencyGroup.AddEntry(dependencyInfo);
                    }
                    else
                    {
                        var dependencyGroup = DependencyGroup.CreateWithEntry(dependencyInfo);

                        libraryNameDependencyGroupMap[dependencyInfo.Name] = dependencyGroup;
                    }
                }
            }

            return(libraryNameDependencyGroupMap.Values.ToList());
        }
        public void has_dependency_negative()
        {
            var group = new DependencyGroup();

            group.Add(new GroupedDependency("FubuCore"));

            group.Has("Bottles").ShouldBeFalse();
        }
예제 #9
0
        /// <summary>
        /// Generates a nuget package spec package from a given mod configuration file.
        /// </summary>
        private static Package FromModConfig(IModConfig modConfig)
        {
            var dependencies    = modConfig.ModDependencies.Select(x => new Structures.Dependency(x, "0.0.0")).ToArray();
            var dependencyGroup = new DependencyGroup(dependencies);
            var metadata        = new Metadata(modConfig.ModName, modConfig.ModId, modConfig.ModVersion, modConfig.ModAuthor, modConfig.ModDescription, dependencyGroup);

            return(new Package(metadata));
        }
예제 #10
0
        public void has_dependency_positive()
        {
            var group = new DependencyGroup();

            group.Dependencies.Add(new GroupedDependency("FubuCore"));

            group.Has("FubuCore").ShouldBeTrue();
        }
예제 #11
0
        public void has_dependency_case_insensitive()
        {
            var group = new DependencyGroup();

            group.Add(new GroupedDependency("FubuCore"));

            group.Has("fubuCore").ShouldBeTrue();
        }
예제 #12
0
        public List <DependencyGroup> Sort(HashSet <State> states)
        {
            HashSet <Node> leafs;

            Collapse(states, out leafs);

            var ret = new List <DependencyGroup>();

            var q = new Queue();

            // Add all leaf nodes (nothing depends on them) to the initial set
            foreach (var n in leafs)
            {
                q.Enqueue(n);
            }

            while (!q.Empty)
            {
                var n = q.Dequeue();

                // Append the node to the last group if it has the same
                // embedding
                if (ret.Count != 0 && ret[ret.Count - 1].Embedding == n.Embedding && ret[ret.Count - 1].EventStateGroup == n.EventStateGroup)
                {
                    ret[ret.Count - 1].Add(n.State);
                }
                else
                {
                    // Otherwise create a new group for it and append the group
                    // to the resulting set
                    DependencyGroup g = new DependencyGroup(n.Embedding, n.EventStateGroup);
                    g.Add(n.State);

                    ret.Add(g);
                }

                // Iterate over all the nodes (dep) that depend on (n)
                foreach (var dep in n.DependencyFor)
                {
                    // Remove the node from its dependencies (it has been
                    // processed)
                    dep.Dependencies.Remove(n);

                    // If this list is now 0, then (dep) does not have any
                    // dependencies left and can be added to our queue to be
                    // inserted in the result
                    if (dep.Dependencies.Count == 0 && dep.State != null)
                    {
                        q.Enqueue(dep);
                    }
                }
            }

            // TODO: check for cyclic dependencies
            return(ret);
        }
예제 #13
0
        public IActionResult DeleteConfirmed(int id)
        {
            DependencyGroup dependencyGroup = _context.DependencyGroup.Single(m => m.DependencyGroupID == id);

            _context.DependencyGroup.Remove(dependencyGroup);
            _context.SaveChanges();

            HttpContext.Session.SetString("Message", "Dependency Group: " + dependencyGroup.Name + " successfully deleted");
            return(RedirectToAction("Index"));
        }
예제 #14
0
            public void GroupDependencies(params string[] dependencies)
            {
                Modify(solution =>
                {
                    var group = new DependencyGroup();
                    dependencies.Each(x => group.Dependencies.Add(new GroupedDependency(x)));

                    solution.Groups.Add(group);
                });
            }
예제 #15
0
        public IActionResult Edit(DependencyGroup dependencyGroup)
        {
            if (ModelState.IsValid)
            {
                _context.Update(dependencyGroup);
                _context.SaveChanges();

                HttpContext.Session.SetString("Message", "Dependency Group: " + dependencyGroup.Name + " successfully edited");
                return(RedirectToAction("Index"));
            }
            return(View(dependencyGroup));
        }
        /// <summary>
        /// Create object to display the dependency grouping from the parsed code data
        /// </summary>
        /// <returns></returns>
        public DependencyGroup BuildDependencyGroup(ParsedData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            var result = new DependencyGroup
            {
                name         = "",
                datemodified = DateTime.UtcNow.ToString("s") + "Z",
                children     = new List <Children>()
            };

            var blackList = new List <string> {
                "jersey", "jackson", "versioncheck", "web", "metrics", "audit", "configuration", "grok", "gettingstarted", "utilities", "timeranges",
                "rules", "bootstrap", "buffers", "bindings", "savedsearches", "shared", "log4j"
            };

            foreach (var t in data.packageNames)
            {
                result.children.Add(new Children
                {
                    name         = t.Trim(),
                    size         = null,
                    datemodified = RandomDateTime(),
                    children     = new List <Children>()
                });
            }

            foreach (var child in result.children)
            {
                var matching = data.connectorsArray.Where(x => x[0].ToLower() == child.name.ToLower());

                foreach (var match in matching)
                {
                    if (blackList.Contains(match[1].ToLower()))
                    {
                        continue;
                    }

                    child.children.Add(new Children
                    {
                        children     = null,
                        datemodified = RandomDateTime(),
                        name         = match[1],
                        size         = 1
                    });
                }
            }

            return(result);
        }
예제 #17
0
            public void GroupDependencies(params string[] dependencies)
            {
                Modify(solution =>
                {
                    var group = new DependencyGroup {
                        Name = dependencies.First()
                    };
                    dependencies.Each(x => group.Add(new GroupedDependency(x)));

                    solution.AddGroup(group);
                });
            }
예제 #18
0
        // GET: DependencyGroups/Edit/5
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            DependencyGroup dependencyGroup = _context.DependencyGroup.Single(m => m.DependencyGroupID == id);

            if (dependencyGroup == null)
            {
                return(HttpNotFound());
            }
            return(View(dependencyGroup));
        }
예제 #19
0
        public void persists_and_retrieves_the_solution()
        {
            var solution = new Solution
            {
                Name   = "Test",
                Feeds  = new[] { Feed.NuGetV2, Feed.NuGetV1 },
                Nugets = new[] { new Dependency("FubuCore", "1.0.1.0") }
            };

            var group = new DependencyGroup {
                Name = "Test"
            };

            group.Add(new GroupedDependency("FubuCore"));
            solution.AddGroup(group);

            solution.AddDependency(new Dependency("Bottles", "1.0.0.0")
            {
                VersionConstraint = VersionConstraint.DefaultFloat
            });

            solution.AddNuspec(new NuspecMap {
                PackageId = "Temp", PublishedBy = "Test"
            });

            solution.Ignore("Rhino.ServiceBus.dll", "Esent.Interop.dll");

            var registry         = new RippleBlockRegistry();
            var solutionSettings = registry.SettingsFor(typeof(Solution));

            CheckObjectBlockPersistence
            .ForSolution(solution)
            .VerifyProperties(property =>
            {
                if (!property.CanWrite)
                {
                    return(false);
                }

                if (solutionSettings.ShouldIgnore(solution, new SingleProperty(property)))
                {
                    return(false);
                }

                return(true);
            });
        }
예제 #20
0
        public void requests_for_a_single_dependency_in_a_group()
        {
            var group = new DependencyGroup();

            group.Add(new GroupedDependency("FubuCore"));
            group.Add(new GroupedDependency("FubuLocalization"));

            theSolution.AddGroup(group);
            theInput.NugetFlag = "FubuCore";

            var requests = theInput.Requests(theSolution).ToArray();

            requests[0].Dependency.ShouldEqual(new Dependency("FubuCore"));
            requests[0].Batched.ShouldBeFalse();

            requests[1].Dependency.ShouldEqual(new Dependency("FubuLocalization"));
            requests[1].Batched.ShouldBeFalse();
        }
        public IActionResult Create(IFormCollection form)
        {
            var DependencyGroupID = Convert.ToInt32(form["id"]);

            List <string> usersListOfTestRuns = form["TestRunID"].ToList();

            string CreationMessage = "Dependencies created for" + System.Environment.NewLine;

            foreach (var TestRunID in usersListOfTestRuns)
            {
                Dependency      dependency      = new Dependency();
                DependencyGroup dependencyGroup = _context.DependencyGroup.SingleOrDefault
                                                      (t => t.DependencyGroupID == DependencyGroupID);

                dependency.DependencyGroupID = DependencyGroupID;
                dependency.TestRunID         = Convert.ToInt32(TestRunID);

                CreationMessage = CreationMessage + "Dependency Group: " + dependencyGroup.Name + " & TestRunID: "
                                  + TestRunID;

                _context.Dependency.Add(dependency);
            }

            _context.SaveChanges();

            if (ModelState.IsValid)
            {
                HttpContext.Session.SetString("Message", CreationMessage);

                return(RedirectToAction("Details", new RouteValueDictionary(new
                {
                    controller = "DependencyGroups",
                    action = "Details",
                    ID = DependencyGroupID
                })));
            }

            return(RedirectToAction("Details", new RouteValueDictionary(new
            {
                controller = "DependencyGroups",
                action = "Details",
                ID = DependencyGroupID
            })));
        }
예제 #22
0
        private string GetDependencyGroupConflictMessage(DependencyGroup dependencyGroup)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append($"Conflict for {dependencyGroup.DependencyName} in projects:{Environment.NewLine}");

            foreach (var version in dependencyGroup.VersionDependencyInfoMap.Keys)
            {
                var dependencyInfoList = dependencyGroup.VersionDependencyInfoMap[version];

                foreach (var dependencyInfo in dependencyInfoList)
                {
                    sb.Append($"Version: {dependencyInfo.Version} Path: {dependencyInfo.ProjectPath} {Environment.NewLine}");
                }
            }
            sb.Append(Environment.NewLine);

            return(sb.ToString());
        }
예제 #23
0
        protected void LoadDependencyGroup(DependencyGroup core)
        {
            switch (core)
            {
            case DependencyGroup.Core:
                this.LoadCoreDependencies();
                break;

            case DependencyGroup.Deal:
                this.LoadDealDependencies();
                break;

            case DependencyGroup.Facility:
                this.LoadFacilityDependencies();
                break;

            default:
                break;
            }
        }
예제 #24
0
        ArrayList LoadDependencies(string infile)
        {
            FileStream fs = null;

            try
            {
                XmlSerializer ser         = new XmlSerializer(typeof(DependencyGroup));
                string        depFileName = DependencyFileName(infile);
                fs = new FileStream(depFileName, FileMode.Open);
                DependencyGroup depgroup     = (DependencyGroup)ser.Deserialize(fs);
                ArrayList       dependencies = depgroup.dependencies;
                // if any files are newer than the dependency file, it
                // is stale
                DateTime depdate = File.GetLastWriteTime(depFileName);
                for (int i = 0; i < dependencies.Count; i++)
                {
                    Dependency dep = dependencies[i] as Dependency;
                    if (!File.Exists(dep.Filename))
                    {
                        return(null);
                    }
                    dep.Modified = File.GetLastWriteTime(dep.Filename);
                    if (dep.Modified > depdate)
                    {
                        return(null);
                    }
                }
                return(dependencies);
            }
            catch (System.IO.FileNotFoundException)
            {
                return(null);
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }
예제 #25
0
        ArrayList BuildDependencies(string infile)
        {
            FileStream fs = null;
            try
            {
                ArrayList dependencies = new ArrayList();
                RecursivelyAddDependencies(infile, dependencies);
                DependencyGroup depgroup = new DependencyGroup();
                depgroup.dependencies = dependencies;
                // save the data
                XmlSerializer ser = new XmlSerializer(typeof(DependencyGroup));
                string depFileName = DependencyFileName(infile);
                fs = new FileStream(depFileName, FileMode.Create);
                ser.Serialize(fs, depgroup);
		        return dependencies;
            }
            finally
            {
                if (fs != null) fs.Close();
            }
        }
예제 #26
0
        private void PatchGroup(ICommonAssembly assembly, ICommonType frameworkElementType, DependencyGroup group)
        {
            RemoveDefaultField(frameworkElementType, group.Property.Name);

            var field = group.Field?.MonoCecil ?? CreateField(assembly, frameworkElementType, group.Property);

            GenerateGetMethodBody(assembly, frameworkElementType, group.Property.MonoCecil, field);
            GenerateSetMethodBody(assembly, frameworkElementType, group.Property.MonoCecil, field);
        }
예제 #27
0
        // GET: Runs/Details/5
        public IActionResult Details(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            ViewData["Message"] = HttpContext.Session.GetString("Message");
            HttpContext.Session.Remove("Message");

            ProjectAndFolderAndGroupAndRunAndTestsAndTestRun viewModel = new ProjectAndFolderAndGroupAndRunAndTestsAndTestRun();

            viewModel.Run = _context.Run.Single(m => m.RunID == id);

            if (viewModel.Run == null)
            {
                return(HttpNotFound());
            }

            viewModel.Run.TestRuns = _context.TestRun.Where(m => m.RunID == id).ToList();

            var dependencyGroup = new DependencyGroup();

            foreach (TestRun testRun in viewModel.Run.TestRuns)
            {
                testRun.Test            = _context.Test.Single(t => t.TestID == testRun.TestID);
                testRun.TestEnvironment = _context.TestEnvironment.SingleOrDefault(t => t.TestEnvironmentID == testRun.TestEnvironmentID);

                var Results = _context.Result.Where(t => t.TestRunID == testRun.TestRunID);
                if (Results.Any())
                {
                    testRun.Result = Results.OrderBy(t => t.ResultID).First();
                }

                if (testRun.TestRunnerGroupID != null)
                {
                    testRun.TestRunnerGroup = _context.TestRunnerGroup.Single(t => t.TestRunnerGroupID == testRun.TestRunnerGroupID);
                }

                if (testRun.DependencyGroupID == null)
                {
                    var InvalidDependencyGroupIDsList = _context.Dependency.Where(t => t.TestRunID == testRun.TestRunID)
                                                        .Select(t => t.DependencyGroupID).ToList();
                    testRun.ValidDependencyGroups = _context.DependencyGroup.Where
                                                        (i => !InvalidDependencyGroupIDsList.Contains(i.DependencyGroupID)).ToList();
                }

                if (testRun.DependencyGroupID != null)
                {
                    dependencyGroup         = _context.DependencyGroup.Single(t => t.DependencyGroupID == testRun.DependencyGroupID);
                    testRun.DependencyGroup = dependencyGroup;
                    var Dependencies = _context.Dependency.Where(t => t.DependencyGroupID == dependencyGroup.DependencyGroupID);


                    foreach (var dependency in Dependencies)
                    {
                        dependency.TestRun = _context.TestRun.SingleOrDefault(t => t.TestRunID == dependency.TestRunID);
                        testRun.DependencyGroup.Dependencies.Add(dependency);

                        var Run     = _context.Run.SingleOrDefault(t => t.RunID == testRun.RunID);
                        var Group   = _context.Group.SingleOrDefault(t => t.GroupID == Run.GroupID);
                        var Folder  = _context.Folder.SingleOrDefault(t => t.FolderID == Group.FolderID);
                        var Project = _context.Project.SingleOrDefault(t => t.ID == Folder.ProjectID);

                        List <NavigationLink> NavLinkList = new List <NavigationLink>
                        {
                            new NavigationLink
                            {
                                Text       = "Project: " + Project.Name,
                                Controller = "Projects",
                                Action     = "Details",
                                RouteID    = Project.ID
                            },
                            new NavigationLink
                            {
                                Text       = "Folder: " + Folder.Name,
                                Controller = "Folders",
                                Action     = "Details",
                                RouteID    = Folder.FolderID
                            },
                            new NavigationLink
                            {
                                Text       = "Group: " + Group.Name,
                                Controller = "Groups",
                                Action     = "Details",
                                RouteID    = Group.GroupID
                            },
                            new NavigationLink
                            {
                                Text       = "Run: " + Run.Name,
                                Controller = "Runs",
                                Action     = "Details",
                                RouteID    = Run.RunID
                            }
                        };

                        ViewData["DependencyNavLinkList" + dependency.DependencyID] = NavLinkList;
                    }
                }
            }

            viewModel.Run.TestRunnerGroup = _context.TestRunnerGroup.SingleOrDefault
                                                (t => t.TestRunnerGroupID == viewModel.Run.TestRunnerGroupID);

            viewModel.Group =
                _context.Group.Single(m => m.GroupID == viewModel.Run.GroupID);

            viewModel.Folder =
                _context.Folder.Single(m => m.FolderID == viewModel.Group.FolderID);

            viewModel.Project =
                _context.Project.Single(m => m.ID == viewModel.Folder.ProjectID);

            string strTestRunnerGroupDescription, strTestRunnerGroupName;

            if (viewModel.Run.TestRunnerGroupID != null)
            {
                strTestRunnerGroupDescription = "Taken from Run";
                strTestRunnerGroupName        = _context.TestRunnerGroup.Single
                                                    (t => t.TestRunnerGroupID == viewModel.Run.TestRunnerGroupID).Name;
            }
            else if (viewModel.Group.TestRunnerGroupID != null)
            {
                strTestRunnerGroupDescription = "Taken from Group";
                strTestRunnerGroupName        = _context.TestRunnerGroup.Single
                                                    (t => t.TestRunnerGroupID == viewModel.Group.TestRunnerGroupID).Name;
            }
            else if (viewModel.Folder.TestRunnerGroupID != null)
            {
                strTestRunnerGroupDescription = "Taken from Folder";
                strTestRunnerGroupName        = _context.TestRunnerGroup.Single
                                                    (t => t.TestRunnerGroupID == viewModel.Folder.TestRunnerGroupID).Name;
            }
            else if (viewModel.Project.TestRunnerGroupID != null)
            {
                strTestRunnerGroupDescription = "Taken from Project";
                strTestRunnerGroupName        = _context.TestRunnerGroup.Single
                                                    (t => t.TestRunnerGroupID == viewModel.Project.TestRunnerGroupID).Name;
            }
            else
            {
                strTestRunnerGroupDescription = "No Test Runner Group assigned";
                strTestRunnerGroupName        = "No Test Runner Group assigned";
            }
            ViewBag.TestRunnerGroupDescription = strTestRunnerGroupDescription;
            ViewBag.TestRunnerGroupName        = strTestRunnerGroupName;
            var alltestrunIDs = _context.TestRun.Where(m => m.RunID == id).Select(t => t.TestRunID);

            ViewData["AllTestRunIDs"] = string.Join(",", alltestrunIDs);

            ViewBag.tests            = new SelectList(_context.Test, "TestID", "Name");
            ViewBag.testEnvironments = new SelectList(_context.TestEnvironment, "TestEnvironmentID", "Name");
            ViewBag.browsers         = new SelectList(new List <string> {
                "Chrome", "Firefox", "IE"
            });

            return(View(viewModel));
        }