public async Task <IActionResult> AnalyzeTest(AnalyzeTestViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            try
            {
                var testInfos = await _runsProvider.GetAllTestsInfo();

                var test = await _runsProvider.GetTest(model.TestId);

                var viewTest = new ViewTest(test, testInfos);
                model.Test = viewTest;
                model.Run  = test.Run;
                var user = await _usersProvider.GetUser(User.GetUserId());

                var analyzeResolution = (AnalysisResolution)model.SelectedResolutionId;
                if (!model.SelectedStepId.HasValue)
                {
                    throw new Exception("Step was not specified");
                }
                await _runsProvider.SetAnalysisState(model.SelectedStepId.Value, analyzeResolution, model.IsExistingIssue,
                                                     model.ExistingIssueId, model.Title, model.Message, model.SelectedSuiteId, user);

                return(RedirectToAction("AnalyzeTest", "ResultsExplorer", new { @id = model.TestId }));
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, e.Message);
                return(View(model));
            }
        }
        public async Task <IActionResult> AnalyzeTest(long id)
        {
            var user = await _usersProvider.GetUser(User.GetUserId());

            var testInfos = await _runsProvider.GetAllTestsInfo();

            var model = new AnalyzeTestViewModel();
            var test  = await _runsProvider.GetTest(id);

            var viewTest = new ViewTest(test, testInfos);

            model.TestId      = id;
            model.CurrentUser = user;
            model.Test        = viewTest;
            model.Run         = test.Run;
            var failedStep = test.Steps.FirstOrDefault(p => !p.IsPassed);

            model.SelectedStepId = failedStep?.Id;
            model.Title          = $@"Fix {viewTest.Name} test";
            model.Message        =
                $@"Can not reproduce failure described at step: ""{failedStep?.Message.Trim()}"" for {test.Run.Environment.ConvertEnvironment()}";
            if (failedStep?.Stacktrace != null)
            {
                model.Message +=
                    $@" with the following stacktrace:{Environment.NewLine + failedStep?.Stacktrace.Replace("<<", "")}";
            }

            model.NewIssueMessage = $@"The test fails at step: ""{failedStep?.Message.Trim()}"" for {test.Run.Environment.ConvertEnvironment()}";
            if (failedStep?.Stacktrace != null)
            {
                model.NewIssueMessage +=
                    $@" with the following stacktrace:{Environment.NewLine + failedStep?.Stacktrace.Replace("<<", "")}";
            }

            model.KnownIssueMessage =
                $@"The failure is still reproducible for {test.Run.Environment.ConvertEnvironment()}";

            var testSuits = await _testLabProvider.GetAllTestSuits();

            model.TestSuitsModel = testSuits.OrderByDescending(p => p.Id).Select(p => new SelectListItem
            {
                Text  = p.Name,
                Value = p.Id.ToString()
            });
            model.Resolutions = ((AnalysisResolution[])Enum.GetValues(typeof(AnalysisResolution))).Select(p =>
                                                                                                          new SelectListItem
            {
                Text  = p.GetDescription(),
                Value = ((int)p).ToString()
            });
            model.TestSuitsModel = model.TestSuitsModel.OrderByDescending(p => int.Parse(p.Value));
            return(View(model));
        }