Exemplo n.º 1
0
        public TestTemplateDTO GetById(int id)
        {
            var template = unitOfWork.TestTemplates.Get(id);

            if (template == null)
            {
                throw new EntityNotFoundException <TestTemplate>(id);
            }

            var templateDto = mapper.Map <TestTemplate, TestTemplateDTO>(template);

            foreach (var level in templateDto.Levels)
            {
                level.ValidTaskCount = taskSource.Filter(level.Filter).Count();
            }

            return(templateDto);
        }
Exemplo n.º 2
0
        public void BindToTemplate(TestDTO test, int?testTemplateId)
        {
            if (test == null)
            {
                throw new ArgumentNullException(nameof(test));
            }

            if (!testTemplateId.HasValue)
            {
                foreach (var levelToRemove in test.Levels)
                {
                    levelToRemove.TemplateDeleted = true;
                }
                return;
            }

            var template = unitOfWork.TestTemplates.Get(testTemplateId.Value);

            if (template == null)
            {
                throw new EntityNotFoundException <TestTemplateDTO>();
            }

            test.TestTemplateId = testTemplateId;
            if (string.IsNullOrEmpty(test.Title))
            {
                var prevTestsCount = unitOfWork.Tests
                                     .Filter(v => v.TestTemplateId == testTemplateId)
                                     .Count();
                test.Title = "Test #" + (prevTestsCount + 1);
            }
            foreach (var templateLevel in template.Levels)
            {
                var templateLevelDTO = mapper.Map <TestTemplateLevel, TestTemplateLevelDTO>(templateLevel);
                var availableTasks   = taskSource.Filter(templateLevelDTO.Filter);

                var existedLevel = test.Levels
                                   .FirstOrDefault(l => l.TestTemplateLevelId == templateLevel.Id);

                if (existedLevel == null)
                {
                    test.Levels.Add(new TestLevelDTO()
                    {
                        Description         = templateLevel.Description,
                        TestTemplateLevelId = templateLevel.Id,
                        RequiredTasksCount  = templateLevel.TasksCount,
                        TestId         = test.Id,
                        AvailableTasks = availableTasks.ToList()
                    });
                }
                else
                {
                    existedLevel.RequiredTasksCount = templateLevel.TasksCount;
                    existedLevel.AvailableTasks     = availableTasks.ToList();
                    existedLevel.TemplateModified   = existedLevel.Tasks
                                                      .Select(t => t.Id)
                                                      .Except(availableTasks.Select(t => t.Id))
                                                      .Any();
                }
            }

            var levelsToRemove = test.Levels
                                 .Where(l => template.Levels.All(tl => tl.Id != l.TestTemplateLevelId));

            foreach (var levelToRemove in levelsToRemove)
            {
                levelToRemove.TemplateDeleted = true;
            }
        }