コード例 #1
0
        private async Task CreateQuestions(HttpClient client)
        {
            var httpCallHelper = new HttpCallHelper(client);

            //u means user
            u1PublicNotPublished = await httpCallHelper.CreateQuestion();

            u1PublicPublished = await httpCallHelper.CreateQuestion(loggedUser : u1PublicNotPublished.Item1);

            u1PrivateNotPublished = await httpCallHelper.CreateQuestion(loggedUser : u1PublicNotPublished.Item1, isPrivate : true);

            u1PrivatePublished = await httpCallHelper.CreateQuestion(loggedUser : u1PublicNotPublished.Item1, isPrivate : true);

            u2PublicNotPublished = await httpCallHelper.CreateQuestion();

            u2PublicPublished = await httpCallHelper.CreateQuestion(loggedUser : u2PublicNotPublished.Item1);

            u2PrivateNotPublished = await httpCallHelper.CreateQuestion(loggedUser : u2PublicNotPublished.Item1, isPrivate : true);

            u2PrivatePublished = await httpCallHelper.CreateQuestion(loggedUser : u2PublicNotPublished.Item1, isPrivate : true);

            //publishing exams
            client.Authorize(u1PublicNotPublished.Item1.Token);
            await httpCallHelper.PublishExam(u1PublicPublished.Item3.Id);

            await httpCallHelper.PublishExam(u1PrivatePublished.Item3.Id);

            client.Authorize(u2PublicNotPublished.Item1.Token);
            await httpCallHelper.PublishExam(u2PublicPublished.Item3.Id);

            await httpCallHelper.PublishExam(u2PrivatePublished.Item3.Id);

            client.Unauthorize();
        }
コード例 #2
0
        public async void ShouldEditTests()
        {
            var client         = httpClientFactory.CreateClient();
            var httpCallHelper = new HttpCallHelper(client);
            var questionItems  = await httpCallHelper.CreateQuestion();

            var questionItemsPublished = await httpCallHelper.CreateQuestion(loggedUser : questionItems.Item1);

            var questionItems2 = await httpCallHelper.CreateQuestion();

            var question1            = questionItems.Item5;
            var question2            = questionItems2.Item5;
            var questionPublished    = questionItemsPublished.Item5;
            var examPublished        = questionItemsPublished.Item3;
            var user1                = questionItems.Item1;
            var radioQuestionData    = TestData.Question.Edit.NewQuestionData();
            var checkboxQuestionData = TestData.Question.Edit.NewQuestionData(false);

            var link1         = $"/questions/{question1.Id}";
            var link2         = $"/questions/{question2.Id}";
            var linkPublished = $"/questions/{questionPublished.Id}";

            await client.PutUnauthorized(link1, new Edit.Request()
            {
                Question = radioQuestionData
            });

            client.Authorize(user1.Token);

            var tempQuestion = TestData.Question.Edit.NewQuestionDataWithEmptyText();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithTooLongText();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithFewerAnswerOption();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithMoreAnswerOption();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataRadioWithTwoRight();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataCheckboxWithSingleRight();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithAllRight();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithAllWrong();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithAllRight(false);
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithAllWrong(false);
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithEmptyAnswerText();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });


            tempQuestion = TestData.Question.Edit.NewQuestionDataWithTooLongAnswerText();
            await client.PutBadRequest(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            //other user's exam
            await client.PutNotFound(link2, new Edit.Request()
            {
                Question = radioQuestionData
            });

            //edit published exam question
            await client.PutSucessfully(linkPublished, new Edit.Request()
            {
                Question = radioQuestionData
            });

            await httpCallHelper.PublishExam(examPublished.Id);

            await client.PutNotFound(linkPublished, new Edit.Request()
            {
                Question = radioQuestionData
            });

            //sucess
            //null text and null answer
            var questionData = TestData.Question.Edit.NewQuestionDataWithNullTextAndAnswer();
            var resultDto    = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertEqual(question1, resultDto);

            //null text and same answers
            questionData      = mapper.Mapper.Map <Edit.QuestionData>(resultDto);
            questionData.Text = null;
            resultDto         = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertEqual(question1, resultDto);

            //same text and null answers
            questionData         = mapper.Mapper.Map <Edit.QuestionData>(resultDto);
            questionData.Answers = null;
            resultDto            = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertEqual(question1, resultDto);

            //with new answer
            questionData = mapper.Mapper.Map <Edit.QuestionData>(resultDto);
            var count              = questionData.Answers.Count();
            var answers            = new List <Edit.AnswerData>(questionData.Answers);
            var newAnserOptionData = TestData.Question.Edit.GenerateAnswerOption(count);

            answers.Add(newAnserOptionData);
            questionData.Answers = answers;
            resultDto            = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertNotEqual(question1, resultDto);
            Assert.True(question1.UpdatedAt < resultDto.UpdatedAt);
            Assert.True(resultDto.AnswerOptions.Count() == count + 1);
            var answerOptions     = resultDto.AnswerOptions.OrderByDescending(e => e.Id).ToArray();
            var answerOptionAdded = answerOptions[0];

            AssertHelper.AssertEqual(answerOptionAdded, newAnserOptionData);

            //only added anser changed.
            for (int i = 1; i < answerOptions.Length; i++)
            {
                var ao = answerOptions[i];
                Assert.True(ao.UpdatedAt < answerOptionAdded.UpdatedAt);
            }
            question1 = resultDto;

            //with new text
            questionData      = mapper.Mapper.Map <Edit.QuestionData>(resultDto);
            questionData.Text = questionData.Text + "_NewOne";
            resultDto         = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertNotEqual(question1, resultDto);
            Assert.True(question1.Text != resultDto.Text);
            Assert.True(question1.UpdatedAt < resultDto.UpdatedAt);
            foreach (var ao in resultDto.AnswerOptions)
            {
                Assert.True(ao.UpdatedAt < resultDto.UpdatedAt);
            }
            question1 = resultDto;
            //with new answer and deleted and edited
            questionData       = mapper.Mapper.Map <Edit.QuestionData>(resultDto);
            count              = questionData.Answers.Count();
            answers            = new List <Edit.AnswerData>(questionData.Answers);
            newAnserOptionData = TestData.Question.Edit.GenerateAnswerOption(count);
            var answerEdited = answers.First();

            answerEdited.Text = answerEdited.Text + "_Edited";
            var answerDeleted   = answers.Where(e => e.Id != answerEdited.Id && !e.IsRight).Last();
            var answerUnchanged = answers.Where(e => e.Id != answerEdited.Id && e.Id != answerDeleted.Id && !e.IsRight).Last();

            answerUnchanged.Text = null;
            answers.Add(newAnserOptionData);
            answers.Remove(answerDeleted);
            questionData.Answers = answers;
            resultDto            = await client.PutQuestionSucessfully(link1, new Edit.Request()
            {
                Question = questionData
            });

            AssertHelper.AssertNotEqual(question1, resultDto);
            Assert.True(question1.UpdatedAt < resultDto.UpdatedAt);
            Assert.True(resultDto.AnswerOptions.Count() == count);
            answerOptions     = resultDto.AnswerOptions.OrderByDescending(e => e.Id).ToArray();
            answerOptionAdded = answerOptions[0];
            var answerOptionEdited    = answerOptions.Where(e => e.Id == answerEdited.Id).First();
            var answerOptionUnchanged = answerOptions.Where(e => e.Id == answerUnchanged.Id).First();

            AssertHelper.AssertEqual(answerOptionAdded, newAnserOptionData);
            AssertHelper.AssertEqual(answerOptionEdited, answerEdited);
            Assert.True(resultDto.UpdatedAt == answerOptionEdited.UpdatedAt);
            Assert.True(answerOptionAdded.UpdatedAt == answerOptionEdited.UpdatedAt);
            Assert.True(answerOptionUnchanged.Text.Length > 1);
            Assert.True(answerOptionUnchanged.UpdatedAt < answerOptionEdited.UpdatedAt);
            foreach (var ao in resultDto.AnswerOptions)
            {
                Assert.True(ao.Id != answerDeleted.Id);
                if (ao.Id != answerOptionAdded.Id && ao.Id != answerOptionEdited.Id)
                {
                    Assert.True(ao.UpdatedAt < answerOptionEdited.UpdatedAt);
                }
            }
            question1 = resultDto;

            // some ok cases
            tempQuestion = TestData.Question.Edit.NewQuestionDataWithNullAnswerOption();
            await client.PutSucessfully(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithNullText();
            await client.PutSucessfully(link1, new Edit.Request()
            {
                Question = tempQuestion
            });

            tempQuestion = TestData.Question.Edit.NewQuestionDataWithEmptyAnswerOption();
            await client.PutSucessfully(link1, new Edit.Request()
            {
                Question = tempQuestion
            });
        }
コード例 #3
0
        public async void AllListTests()
        {
            var client = httpClientFactory.CreateClient();
            var data   = new QuestionTestData(client);
            var helper = new HttpCallHelper(client);

            client.Unauthorize();
            var u1PublicNotPublishedLink  = $"/questions?examId={data.u1PublicNotPublished.Item3.Id}";
            var u1PublicPublishedLink     = $"/questions?examId={data.u1PublicPublished.Item3.Id}";
            var u1PrivateNotPublishedLink = $"/questions?examId={data.u1PrivateNotPublished.Item3.Id}";
            var u1PrivatePublishedLink    = $"/questions?examId={data.u1PrivatePublished.Item3.Id}";

            var u2PublicNotPublishedLink  = $"/questions?examId={data.u2PublicNotPublished.Item3.Id}";
            var u2PublicPublishedLink     = $"/questions?examId={data.u2PublicPublished.Item3.Id}";
            var u2PrivateNotPublishedLink = $"/questions?examId={data.u2PrivateNotPublished.Item3.Id}";
            var u2PrivatePublishedLink    = $"/questions?examId={data.u2PrivatePublished.Item3.Id}";

            var linkNoneExisting = $"/questions?examId={int.MaxValue}";
            await client.GetNotFound(linkNoneExisting);

            //user 1
            await client.GetNotFound(u1PublicNotPublishedLink);

            var questionsEnvelope = await client.GetQuestionsSuccesfully(u1PublicPublishedLink);

            Assert.Equal(questionsEnvelope.QuestionCount, questionsEnvelope.Questions.Count());
            Assert.Equal(1, questionsEnvelope.QuestionCount);
            Assert.Equal(0, questionsEnvelope.Questions.First().AnswerOptions.Count);

            await client.GetNotFound(u1PrivateNotPublishedLink);

            await client.GetNotFound(u1PrivatePublishedLink);

            //user 2
            await client.GetNotFound(u2PublicNotPublishedLink);

            questionsEnvelope = await client.GetQuestionsSuccesfully(u2PublicPublishedLink);

            Assert.Equal(questionsEnvelope.QuestionCount, questionsEnvelope.Questions.Count());
            Assert.Equal(1, questionsEnvelope.QuestionCount);
            Assert.Equal(0, questionsEnvelope.Questions.First().AnswerOptions.Count);

            await client.GetNotFound(u2PrivateNotPublishedLink);

            await client.GetNotFound(u2PrivatePublishedLink);

            //includeAnswerOptions
            questionsEnvelope = await client.GetQuestionsSuccesfully($"{u1PublicPublishedLink}&includeAnswerOptions=true");

            Assert.Equal(questionsEnvelope.QuestionCount, questionsEnvelope.Questions.Count());
            Assert.Equal(1, questionsEnvelope.QuestionCount);
            Assert.Equal(data.u1PublicPublished.Item5.AnswerOptions.Count, questionsEnvelope.Questions.First().AnswerOptions.Count);

            //  limit , offset
            for (int i = 0; i < 11; i++)
            {
                await helper.CreateQuestionInExam(
                    data.u1PublicNotPublished.Item1.Token,
                    data.u1PublicNotPublished.Item3.Id, i % 2 == 0);
            }
            client.Authorize(data.u1PublicNotPublished.Item1.Token);
            await helper.PublishExam(data.u1PublicNotPublished.Item3.Id);

            client.Unauthorize();
            var limitOffsetTester = new LimitOffsetTester(client, u1PublicPublishedLink);
            await limitOffsetTester.DoTest(QuestionHelper.GetQuestions);
        }
コード例 #4
0
        public async void ShouldDeleteTests()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);
            var questionItems   = await httpCallHelper.CreateQuestion();

            var questionItemsPublished = await httpCallHelper.CreateQuestion(loggedUser : questionItems.Item1);

            var examPublished  = questionItemsPublished.Item3;
            var questionItems2 = await httpCallHelper.CreateQuestion();

            var question1         = questionItems.Item5;
            var question2         = questionItems2.Item5;
            var questionPublished = questionItemsPublished.Item5;

            var user1 = questionItems.Item1;

            var link1            = $"/questions/{question1.Id}";
            var link2            = $"/questions/{question2.Id}";
            var linkPublished    = $"/questions/{questionPublished.Id}";
            var linkNoneExisting = $"/questions/{int.MaxValue}";

            await client.DeleteUnauthorized(link1);

            client.Authorize(user1.Token);

            //publishing exam
            await httpCallHelper.PublishExam(examPublished.Id);

            await client.DeleteNotFound(linkNoneExisting);

            await client.DeleteNotFound(link2);

            await client.DeleteNotFound(linkPublished);

            await client.DeleteSucessfully(link1);


            var count = dbContextHelper.SelectQuestionCount(question1.Id);

            Assert.Equal(0, count);
            count = dbContextHelper.SelectQuestionCount(question2.Id);
            Assert.Equal(1, count);
            count = dbContextHelper.SelectQuestionCount(questionPublished.Id);
            Assert.Equal(1, count);

            foreach (var answerOption in question1.AnswerOptions)
            {
                count = dbContextHelper.SelectAnswerOptionCount(answerOption.Id);
                Assert.Equal(0, count);
            }

            foreach (var answerOption in question2.AnswerOptions)
            {
                count = dbContextHelper.SelectAnswerOptionCount(answerOption.Id);
                Assert.Equal(1, count);
            }

            foreach (var answerOption in questionPublished.AnswerOptions)
            {
                count = dbContextHelper.SelectAnswerOptionCount(answerOption.Id);
                Assert.Equal(1, count);
            }
        }
コード例 #5
0
        public async void ShouldSelectPublishedExams()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);

            //create at least two public and two private exams
            var tuple = await httpCallHelper.CreateExam();

            var examPublicDto1 = tuple.Item3;

            tuple = await httpCallHelper.CreateExam();

            var examPublicDto2 = tuple.Item3;

            tuple = await httpCallHelper.CreateExam(true, true);

            var examPrivateDto1 = tuple.Item3;

            tuple = await httpCallHelper.CreateExam(true, true);

            var examPrivateDto2 = tuple.Item3;

            await dbContextHelper.SetPublishExamAsync(examPublicDto1.Id);

            await dbContextHelper.SetPublishExamAsync(examPublicDto2.Id);

            await dbContextHelper.SetPublishExamAsync(examPrivateDto1.Id);

            await dbContextHelper.SetPublishExamAsync(examPrivateDto2.Id);

            var getLink                   = "exams";
            var getLinkIncludeTags        = "exams?includeTags=true";
            var getLinkIncludeUser        = "******";
            var getLinkIncludeTagsAndUser = "******";


            //no user and tags
            var responseExams = await client.GetExamsSuccesfully(getLink);

            foreach (var exam in responseExams)
            {
                Assert.True(exam.IsPublished);
                Assert.False(exam.IsPrivate);
                AssertHelper.AssertNoUserAndNoTagsIncluded(exam);
            }

            //with tags
            responseExams = await client.GetExamsSuccesfully(getLinkIncludeTags);

            foreach (var exam in responseExams)
            {
                Assert.True(exam.IsPublished);
                Assert.False(exam.IsPrivate);
                AssertHelper.AssertOnlyTagsIncluded(exam);
            }

            //with user
            responseExams = await client.GetExamsSuccesfully(getLinkIncludeUser);

            foreach (var exam in responseExams)
            {
                Assert.True(exam.IsPublished);
                Assert.False(exam.IsPrivate);
                AssertHelper.AssertOnlyUserIncluded(exam);
            }

            //with tags and user
            responseExams = await client.GetExamsSuccesfully(getLinkIncludeTagsAndUser);

            foreach (var exam in responseExams)
            {
                Assert.True(exam.IsPublished);
                Assert.False(exam.IsPrivate);
                Assert.NotNull(exam.User);
                if (exam.Id == examPublicDto2.Id || exam.Id == examPublicDto1.Id)
                {
                    Assert.True(exam.Tags.Count > 0);
                }
            }

            //limit, ofset tests...

            //creating some exams
            for (int i = 0; i < 11; i++)
            {
                tuple = await httpCallHelper.CreateExam();

                var examId = tuple.Item3.Id;
                var token  = tuple.Item1.Token;
                client.Authorize(token);
                await httpCallHelper.PublishExam(examId);
            }

            var limitOffsetTester = new LimitOffsetTester(client, getLink);
            await limitOffsetTester.DoTest(GetExams);
        }