コード例 #1
0
ファイル: MainController.cs プロジェクト: GataullinRR/Testkit
        public async Task <RunTestResponse> RunTest(RunTestRequest request)
        {
            var listRequest  = new ListTestsDataRequest(request.FilteringOrders, new Vectors.IntInterval(0, 1000), true, false);
            var listResponse = await TestsStorage.ListTestsDataAsync(listRequest);

            var testsQuery = Db.TestRuns
                             .IncludeGroup(RunnerService.Db.EntityGroups.ALL, Db)
                             .Filter(Logger, request.FilteringOrders);
            var tests = await testsQuery.ToArrayAsync();

            foreach (var testFromStorge in listResponse.Tests)
            {
                var exists = tests.Any(r => r.TestName == testFromStorge.TestName);
                if (!exists)
                {
                    tests.Add(new RunnerService.Db.TestRunInfo()
                    {
                        TestId   = testFromStorge.TestId,
                        Results  = new List <Result>(),
                        RunPlan  = new ManualRunPlan(),
                        TestName = testFromStorge.TestName,
                    });

                    await Db.TestRuns.AddAsync(tests.LastElement());
                }
            }

            var messages = new List <Func <BeginTestMessage> >();

            foreach (var test in tests)
            {
                var result = new Result()
                {
                    ResultBase = new PendingCompletionResult()
                    {
                        StartTime     = DateTime.UtcNow,
                        StartedByUser = request.StartedByUser,
                        TestId        = test.TestId,
                        TestName      = test.TestName,
                        State         = new StateInfo("", null, false)
                    }
                };
                test.Results.Add(result);

                var data = listResponse.Tests.First(t => t.TestName == test.TestName).Data;
                messages.Add(() => new BeginTestMessage(test.TestId, result.Id, data.Type, data.Data));
            }

            await Db.SaveChangesAsync();

            foreach (var message in messages)
            {
                MessageProducer.FireBeginTest(message());
            }

            return(new RunTestResponse());
        }