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); }
public Task <GetTestsInfoResponse> GetTestsInfoAsync(GetTestsInfoRequest request) { return(MakeRequestAsync <GetTestsInfoRequest, GetTestsInfoResponse>(HttpMethod.Post, nameof(GetTestsInfoAsync), request)); }