示例#1
0
        public async Task <GetTestsInfoResponse> GetTestsInfo(GetTestsInfoRequest request)
        {
            var infos = await ensureDbPopulated(request.TestIds);

            return(new GetTestsInfoResponse(ges().ToArray()));

            IEnumerable <API.Models.TestRunInfo> ges()
            {
                foreach (var i in infos)
                {
                    var lastResult = i.Results
                                     .OrderByDescending(r => r.ResultBase.StartTime)
                                     .FirstOrDefault()
                                     ?.ResultBase;

                    StateBase state = new JustCreatedState();
                    if (i.Results.Any(r => r.ResultBase.Result == RunResult.Running))
                    {
                        state = new RunningState();
                    }
                    else
                    {
                        state = lastResult?.Result switch
                        {
                            RunResult.Aborted => new ReadyState(),
                            RunResult.Passed => new ReadyState(),
                            RunResult.Error => new ReadyState(),
                            RunResult.FatalError => new ReadyState(),
                            RunResult.Running => new RunningState(),
                            null => new JustCreatedState(),

                            _ => throw new NotSupportedException()
                        };
                    }

                    yield return(new API.Models.TestRunInfo(
                                     i.TestId,
                                     i.TestName,
                                     lastResult,
                                     state,
                                     i.RunPlan));
                }
            }
        }

        async Task <Db.TestRunInfo[]> ensureDbPopulated(int[] testIds)
        {
            var infos = await Db.TestRuns
                        .IncludeGroup(RunnerService.Db.EntityGroups.ALL, Db)
                        .Where(r => testIds.Contains(r.TestId))
                        .ToArrayAsync();

            var missingIds = testIds
                             .Where(id => infos.NotContains(i => i.TestId == id))
                             .ToArray();

            if (missingIds.Length > 0)
            {
                var lstReq = ListTestsDataRequest.ByIds(missingIds, new Vectors.IntInterval(0, missingIds.Length), false, false);
                ListTestsDataResponse lstResp = await TestsStorage.ListTestsDataAsync(lstReq);

                var missingRunInfos = lstResp.Tests
                                      .Select(ti => new Db.TestRunInfo()
                {
                    TestId   = ti.TestId,
                    TestName = ti.TestName,
                    RunPlan  = new ManualRunPlan(),
                }).ToArray();
                if (missingRunInfos.Length > 0)
                {
                    await Db.TestRuns.AddRangeAsync(missingRunInfos);

                    await Db.SaveChangesAsync();

                    infos = infos.Concat(missingRunInfos).ToArray();
                }
            }

            return(infos);
        }
示例#2
0
 public Task <GetTestsInfoResponse> GetTestsInfoAsync(GetTestsInfoRequest request)
 {
     return(MakeRequestAsync <GetTestsInfoRequest, GetTestsInfoResponse>(HttpMethod.Post, nameof(GetTestsInfoAsync), request));
 }