Beispiel #1
0
        private void EditTest(ManageTestDto updatedTest, Test existingTest)
        {
            existingTest.Name        = updatedTest.TestName;
            existingTest.Duration    = updatedTest.RequestedTime;
            existingTest.IsPublished = updatedTest.IsPublished;

            var existingQuestionsIds = existingTest.Questions.Select(eq => eq.Id.ToString()).ToHashSet();

            foreach (var updatedQuestion in updatedTest.Questions)
            {
                if (existingQuestionsIds.Contains(updatedQuestion.Id))
                {
                    //update
                    var existingQuestion = existingTest.Questions.SingleOrDefault(q => q.Id.ToString() == updatedQuestion.Id);
                    this.EditQuestion(existingQuestion, updatedQuestion);
                    existingQuestionsIds.Remove(updatedQuestion.Id);
                }
                else
                {
                    //add
                    var questiontoAdd = this.mapper.MapTo <Question>(updatedQuestion);
                    existingTest.Questions.Add(questiontoAdd);
                    this.questionRepo.Add(questiontoAdd);
                }
            }

            foreach (var questionToDeleteId in existingQuestionsIds)
            {
                //delete
                var questionToDelete = existingTest.Questions.SingleOrDefault(q => q.Id.ToString() == questionToDeleteId);
                this.DeleteQuestion(questionToDelete);
            }

            this.testRepo.Update(existingTest);
        }
        public void CallDataSaverAdd()
        {
            var testDtoArgument = new ManageTestDto()
            {
                CategoryName = "Java"
            };
            var testToAdd = new Test();

            this.mapperMock.Setup(x => x.MapTo <Test>(It.IsAny <ManageTestDto>()))
            .Returns(testToAdd);

            var categories = new List <Category>()
            {
                new Category()
                {
                    Name = "Java"
                }
            };

            this.categoryRepoMock.Setup(x => x.All)
            .Returns(categories.AsQueryable());

            var sut = new TestService(
                testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object,
                mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object);

            sut.CreateTest(testDtoArgument);

            this.dataSaverMock.Verify(x => x.SaveChanges(), Times.Once);
        }
Beispiel #3
0
        public void CreateTest(ManageTestDto testDto)
        {
            if (testDto == null)
            {
                throw new ArgumentNullException(nameof(testDto));
            }

            var testToAdd = this.mapper.MapTo <Test>(testDto);

            var category = this.categoryRepo.All.SingleOrDefault(c => c.Name == testDto.CategoryName)
                           ?? throw new ArgumentException($"Category {testDto.CategoryName} does not exists!");

            testToAdd.Category = category;

            this.testRepo.Add(testToAdd);

            this.dataSaver.SaveChanges();

            this.memoryCache.Remove("Dashboard-Tests");
        }
Beispiel #4
0
        public void EditTest(ManageTestDto updatedTest)
        {
            if (updatedTest == null)
            {
                throw new ArgumentNullException(nameof(updatedTest));
            }

            var existingTest = this.testRepo.All
                               .Where(t => t.Id.ToString() == updatedTest.Id)
                               .Include(t => t.Questions)
                               .ThenInclude(q => q.Answers)
                               .SingleOrDefault();

            this.EditTest(updatedTest, existingTest);

            var category = this.categoryRepo.All.SingleOrDefault(c => c.Name == updatedTest.CategoryName)
                           ?? throw new ArgumentException($"Category {updatedTest.CategoryName} does not exists!");

            existingTest.Category = category;

            this.dataSaver.SaveChanges();

            this.memoryCache.Remove("Dashboard-Tests");
        }
Beispiel #5
0
        public void SucessfullyCallDataSaverSaveChanges_WhenInvokedWithValidParameters()
        {
            // Arrange
            // Domain
            var testId     = new Guid();
            var questionId = new Guid();
            var answerId   = new Guid();
            var category   = new Category()
            {
                Name = "JAVA"
            };
            var questionAnswers = new List <Answer>()
            {
                new Answer()
                {
                    Id        = answerId,
                    IsDeleted = false
                }
            };

            var testQuestions = new List <Question>()
            {
                new Question()
                {
                    Id        = questionId,
                    Answers   = questionAnswers,
                    IsDeleted = false
                }
            };

            var testStub = new Test()
            {
                Id        = testId,
                Questions = testQuestions,
                Category  = category
            };

            var testList = new List <Test>()
            {
                testStub
            };

            this.testRepoMock.Setup(x => x.All)
            .Returns(testList.AsQueryable());

            this.categoryRepoMock.Setup(x => x.All)
            .Returns(new List <Category>()
            {
                category
            }.AsQueryable());

            // DTO

            var dtoQuestion = new ManageQuestionDto()
            {
                Id = questionId.ToString()
            };
            var dtoAnswer = new ManageAnswerDto()
            {
                Id = answerId.ToString()
            };
            var dtoAnswersList = new List <ManageAnswerDto>()
            {
                dtoAnswer
            };

            dtoQuestion.Answers = dtoAnswersList;
            var dtoQuestionsList = new List <ManageQuestionDto>()
            {
                dtoQuestion
            };

            var testDtoArgument = new ManageTestDto()
            {
                Id           = testId.ToString(),
                CategoryName = category.Name,
                Questions    = dtoQuestionsList
            };

            var sut = new TestService(
                testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object,
                mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object);

            // Act

            sut.EditTest(testDtoArgument);

            // Assert

            this.dataSaverMock.Verify(x => x.SaveChanges(), Times.Once);
        }
Beispiel #6
0
        public void SucessfullyCallQuestionRepoAdd_WhenInvokedWithValidParameters()
        {
            // Arrange
            // Domain
            var testId     = new Guid();
            var questionId = new Guid();
            var answerId   = new Guid();
            var category   = new Category()
            {
                Name = "JAVA"
            };
            var questionAnswers = new List <Answer>()
            {
                new Answer()
                {
                    Id        = answerId,
                    IsDeleted = false
                }
            };

            var testQuestions = new List <Question>()
            {
                new Question()
                {
                    Id        = questionId,
                    Answers   = questionAnswers,
                    IsDeleted = false
                }
            };

            var testStub = new Test()
            {
                Id        = testId,
                Questions = testQuestions,
                Category  = category
            };

            var testList = new List <Test>()
            {
                testStub
            };

            this.testRepoMock.Setup(x => x.All)
            .Returns(testList.AsQueryable());

            this.categoryRepoMock.Setup(x => x.All)
            .Returns(new List <Category>()
            {
                category
            }.AsQueryable());

            // DTO
            //var questiontoAdd = this.mapper.MapTo<Question>(updatedQuestion);

            var guidString             = "e376ce00-89b0-44f3-bd1c-a248535585b9";
            var questionDomainToReturn = new Question()
            {
                Id = Guid.Parse(guidString)
            };

            this.mapperMock.Setup(x => x.MapTo <Question>(It.IsAny <ManageQuestionDto>()))
            .Returns(questionDomainToReturn);
            var dtoQuestion = new ManageQuestionDto()
            {
                Id = guidString
            };
            var dtoAnswer = new ManageAnswerDto()
            {
                Id = answerId.ToString()
            };
            var dtoAnswersList = new List <ManageAnswerDto>()
            {
                dtoAnswer
            };

            dtoQuestion.Answers = dtoAnswersList;
            var dtoQuestionsList = new List <ManageQuestionDto>()
            {
                dtoQuestion
            };

            var testDtoArgument = new ManageTestDto()
            {
                Id           = testId.ToString(),
                CategoryName = category.Name,
                Questions    = dtoQuestionsList
            };

            var sut = new TestService(
                testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object,
                mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object);

            // Act

            sut.EditTest(testDtoArgument);

            // Assert

            this.questionRepoMock.Verify(x => x.Add(questionDomainToReturn), Times.Once);
        }
        public void ReturnCorrectData_WhenInvokedWithValidParameters()
        {
            // Arrange
            var testId   = new Guid();
            var testName = "Test";
            var category = new Category()
            {
                Name = "JAVA"
            };

            var questionAnswers = new List <Answer>()
            {
                new Answer()
                {
                    IsDeleted = false
                }
            };

            var testQuestions = new List <Question>()
            {
                new Question()
                {
                    Answers   = questionAnswers,
                    IsDeleted = false
                }
            };

            var testStub = new Test()
            {
                Name      = testName,
                Questions = testQuestions,
                Category  = category
            };

            var testList = new List <Test>()
            {
                testStub
            };


            this.testRepoMock.Setup(x => x.All)
            .Returns(testList.AsQueryable());

            var testDtoToReturn = new ManageTestDto()
            {
                TestName = testName
            };

            this.mapperMock.Setup(x => x.MapTo <ManageTestDto>(It.IsAny <Test>()))
            .Returns(testDtoToReturn);

            var sut = new TestService(
                testRepoMock.Object, questionRepoMock.Object, answerRepoMock.Object, dataSaverMock.Object,
                mapperMock.Object, categoryRepoMock.Object, randomMock.Object, shufflerMock.Object, memoryCacheMock.Object);

            // Act
            var result = sut.GetTestByNameAndCategory(testId.ToString());

            // Assert
            Assert.AreEqual(result, testDtoToReturn);
        }