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(); }
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 }); }
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); } }