示例#1
0
        public async void ShouldFailEditOtherUserExamAndPublishedExam()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);
            var tuple           = await httpCallHelper.CreateExam();

            var loggedUser1 = tuple.Item1;
            var examDto1    = tuple.Item3;

            tuple = await httpCallHelper.CreateExam();

            var loggedUser2 = tuple.Item1;
            var examDto2    = tuple.Item3;
            var putLink1    = $"/exams/{examDto1.Id}";
            var putLink2    = $"/exams/{examDto2.Id}";

            client.Authorize(loggedUser1.Token);
            await client.PutNotFound(putLink2, new Edit.Request()
            {
                Exam = new Edit.ExamData()
            });

            await client.PutExamSuccesfully(putLink1, new Edit.Request()
            {
                Exam = new Edit.ExamData()
            });

            await dbContextHelper.SetPublishExamAsync(examDto1.Id);

            await client.PutNotFound(putLink1, new Edit.Request()
            {
                Exam = new Edit.ExamData()
            });
        }
示例#2
0
        public async void ShouldGetExamDetails()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);

            var tuple = await httpCallHelper.CreateExam();

            var examPublicDto = tuple.Item3;

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

            var examPrivateDto = tuple.Item3;

            var getExamLink                   = $"exams/exam/{examPublicDto.Id}";
            var getExamLinkIncludeUser        = $"exams/exam/{examPublicDto.Id}?includeUser=true";
            var getExamLinkIncludeTags        = $"exams/exam/{examPublicDto.Id}?includeTags=true";
            var getExamLinkIncludeUserAndTags = $"exams/exam/{examPublicDto.Id}?includeUser=true&includeTags=true";

            var getPrivateExamLink = $"exams/exam/{examPrivateDto.Id}";

            //not published
            await client.GetNotFound(getExamLink);

            await client.GetNotFound(getPrivateExamLink);

            await dbContextHelper.SetPublishExamAsync(examPublicDto.Id);

            await dbContextHelper.SetPublishExamAsync(examPrivateDto.Id);

            //public and  published
            var responseExam = await client.GetExamSuccesfully(getExamLink);

            AssertHelper.AssertNoUserAndNoTagsIncluded(responseExam);

            //include user
            responseExam = await client.GetExamSuccesfully(getExamLinkIncludeUser);

            AssertHelper.AssertOnlyUserIncluded(responseExam);

            //include tags
            responseExam = await client.GetExamSuccesfully(getExamLinkIncludeTags);

            AssertHelper.AssertOnlyTagsIncluded(responseExam);

            //include user and tags
            responseExam = await client.GetExamSuccesfully(getExamLinkIncludeUserAndTags);

            AssertHelper.AssertUserAndTagsIncluded(responseExam);


            //private and  published
            await client.GetNotFound(getPrivateExamLink);
        }
示例#3
0
        public async void ShouldFailEditExamWithInvalidData()
        {
            var client         = httpClientFactory.CreateClient();
            var httpCallHelper = new HttpCallHelper(client);
            var tuple          = await httpCallHelper.CreateExam();

            var loggedUser = tuple.Item1;
            var examDto    = tuple.Item3;
            var putLink    = $"/exams/{examDto.Id}";

            var examData = new Edit.ExamData()
            {
                Title = "",

                Description = "",

                TimeInMinutes = 0,

                PassPercentage = 0,

                IsPrivate = !examDto.IsPrivate,

                Tags = new string[] { }
            };

            client.Authorize(loggedUser.Token);
            var problemDetails = await client.PutBadRequest(putLink, new Edit.Request()
            {
                Exam = examData
            });

            problemDetails.Errors.Should().HaveCount(4);
        }
        public async void ShouldDeleteExam()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);
            var tuple           = await httpCallHelper.CreateExam();

            var loggedUser1 = tuple.Item1;
            var examDto1    = tuple.Item3;

            tuple = await httpCallHelper.CreateExam();

            var loggedUser2   = tuple.Item1;
            var examDto2      = tuple.Item3;
            var link1         = $"exams/{examDto1.Id}";
            var link2         = $"exams/{examDto2.Id}";
            var linkNotExists = $"exams/{int.MaxValue}";

            var exam1 = await dbContextHelper.FindExamAsync(examDto1.Id);

            var exam2 = await dbContextHelper.FindExamAsync(examDto2.Id);

            AssertHelper.AssertExamNotDeleted(exam1);
            AssertHelper.AssertExamNotDeleted(exam2);

            //unauthorized
            await client.DeleteUnauthorized(link1);

            //not this users exam
            client.Authorize(loggedUser1.Token);
            await client.DeleteNotFound(link2);

            //not existing
            await client.DeleteNotFound(linkNotExists);

            //success
            var responseExam = await client.DeleteExamSucessfully(link1);

            Assert.Equal(responseExam.Id, examDto1.Id);
            exam1 = dbContextHelper.SelectExamFirstOrDefault(examDto1.Id);
            Assert.Null(exam1);

            exam1 = dbContextHelper.SelectExamIgnoreQueryFiltersTakeFirst(examDto1.Id);
            AssertHelper.AssertExamDeleted(exam1);
        }
示例#5
0
        public async void ShouldPublishExam()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);
            var tuple           = await httpCallHelper.CreateExam();

            var loggedUser1 = tuple.Item1;
            var examDto1    = tuple.Item3;

            tuple = await httpCallHelper.CreateExam();

            var loggedUser2 = tuple.Item1;
            var examDto2    = tuple.Item3;
            var link1       = $"exams/publish/{examDto1.Id}";
            var link2       = $"exams/publish/{examDto2.Id}";
            //unauthorized
            await client.PutUnauthorized(link1, null);

            //other user's exam.
            client.Authorize(loggedUser1.Token);
            await client.PutNotFound(link2, null);

            //already published
            await dbContextHelper.SetPublishExamAsync(examDto1.Id);

            await client.PutNotFound(link1, null);

            //sucess
            client.Authorize(loggedUser2.Token);
            var responseExam = await client.PutExamSuccesfully(link2, null);

            //check success
            var exam2 = await dbContextHelper.FindExamAsync(examDto2.Id);

            Assert.True(exam2.IsPublished);
            Assert.True(responseExam.IsPublished);
        }
示例#6
0
        public async void ShouldEditExam()
        {
            var client          = httpClientFactory.CreateClient();
            var httpCallHelper  = new HttpCallHelper(client);
            var dbContextHelper = new DbContextHelper(this.dbContextFactory);
            var tuple           = await httpCallHelper.CreateExam();

            var loggedUser = tuple.Item1;
            var examDto    = tuple.Item3;
            var putLink    = $"/exams/{examDto.Id}";
            var newTags    = new List <string>();

            newTags.Add(examDto.Tags.First().Tag);
            newTags.AddRange(SampleExamContextHelper.SeededTags.Select(e => e.TagId).ToArray());
            var uniqueString = Guid.NewGuid().ToGuidString();

            newTags.AddRange(new string[] { $"{uniqueString}_Tag1", $"{uniqueString}_Tag2" });

            var examData = new Edit.ExamData()
            {
                Title = $"{examDto.Title}_2",

                Description = $"{examDto.Description}_2",

                TimeInMinutes = examDto.TimeInMinutes + 1,

                PassPercentage = examDto.PassPercentage + 1,

                IsPrivate = !examDto.IsPrivate,

                Tags = newTags
            };

            await client.PutUnauthorized(putLink, new Edit.Request()
            {
                Exam = examData
            });

            client.Authorize(loggedUser.Token);
            var responseExam = await client.PutExamSuccesfully(putLink, new Edit.Request()
            {
                Exam = examData
            });


            var exam       = dbContextHelper.SelectExamWitTags(examDto.Id);
            var updatedAt1 = exam.UpdatedAt;

            AssertHelper.AssertExam(examData, responseExam, exam);
            AssertHelper.AssertExamTags(examData.Tags.ToArray(), responseExam, exam);

            responseExam = await client.PutExamSuccesfully(putLink, new Edit.Request()
            {
                Exam = examData
            });

            exam = dbContextHelper.SelectExamWitTags(examDto.Id);
            var updatedAt2 = exam.UpdatedAt;

            AssertHelper.AssertExam(examData, responseExam, exam);
            AssertHelper.AssertExamTags(examData.Tags.ToArray(), responseExam, exam);
            Assert.Equal(updatedAt1, updatedAt2);

            responseExam = await client.PutExamSuccesfully(putLink, new Edit.Request()
            {
                Exam = new Edit.ExamData()
            });

            exam = dbContextHelper.SelectExamWitTags(examDto.Id);
            var updatedAt3 = exam.UpdatedAt;

            AssertHelper.AssertExam(examData, responseExam, exam);
            AssertHelper.AssertExamTags(examData.Tags.ToArray(), responseExam, exam);
            Assert.Equal(updatedAt2, updatedAt3);
        }
示例#7
0
        public async void ShouldCreateTests()
        {
            var client                = httpClientFactory.CreateClient();
            var httpCallHelper        = new HttpCallHelper(client);
            var notPublishedExamItems = await httpCallHelper.CreateExam();

            var user1                = notPublishedExamItems.Item1;
            var examDto1             = notPublishedExamItems.Item3;
            var examDto2             = (await httpCallHelper.CreateExam()).Item3;
            var examDto3Published    = (await httpCallHelper.CreatePublishedExam(loggedUser: user1)).Item2;
            var radioQuestionData    = TestData.Question.Create.NewQuestionData();
            var checkboxQuestionData = TestData.Question.Create.NewQuestionData(false);
            var link1                = $"/questions/{examDto1.Id}";
            var link2                = $"/questions/{examDto2.Id}";
            var link3Published       = $"/questions/{examDto3Published.Id}";
            await client.PostUnauthorized(link1, new Create.Request()
            {
                Question = radioQuestionData
            });

            client.Authorize(user1.Token);

            var badQuestion = TestData.Question.Create.NewQuestionDataWithEmptyText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithNullText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithTooLongText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithEmptyAnswerOption();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithNullAnswerOption();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithFewerAnswerOption();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithMoreAnswerOption();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataRadioWithTwoRight();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataCheckboxWithSingleRight();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithAllRight();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithAllWrong();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithAllRight(false);
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithAllWrong(false);
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithEmptyAnswerText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithNullAnswerText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

            badQuestion = TestData.Question.Create.NewQuestionDataWithTooLongAnswerText();
            await client.PostBadRequest(link1, new Create.Request()
            {
                Question = badQuestion
            });

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

            //add to published exam
            await client.PostNotFound(link3Published, new Create.Request()
            {
                Question = radioQuestionData
            });

            //success
            await client.PostSucessfully(link1, new Create.Request()
            {
                Question = radioQuestionData
            });

            await client.PostSucessfully(link1, new Create.Request()
            {
                Question = checkboxQuestionData
            });
        }
        public async void ShouldGetUserExams()
        {
            var client         = httpClientFactory.CreateClient();
            var httpCallHelper = new HttpCallHelper(client);

            //create 4 public user exam out of 2 are published
            var tuple = await httpCallHelper.CreateExam();

            var user = tuple.Item1;
            await httpCallHelper.CreateExam(true, false, null, user);

            await httpCallHelper.CreatePublishedExam(true, false, null, user);

            await httpCallHelper.CreatePublishedExam(true, false, null, user);

            //create 4 private user exam out of 2 are
            await httpCallHelper.CreateExam(true, true, null, user);

            await httpCallHelper.CreateExam(true, true, null, user);

            await httpCallHelper.CreatePublishedExam(true, true, null, user);

            await httpCallHelper.CreatePublishedExam(true, true, null, user);

            var linkAll1            = "exams/user/exams";
            var linkAll2            = "exams/user/exams?privateType=all&publishType=all";
            var linkAllPrivates     = "exams/user/exams?privateType=private";
            var linkAllPublics      = "exams/user/exams?privateType=public";
            var linkAllPublished    = "exams/user/exams?publishType=published";
            var linkAllNotPublished = "exams/user/exams?publishType=notPublished";
            await client.GetUnauthorized(linkAll1);

            client.Authorize(user.Token);
            //all
            var exams = await client.GetExamsSuccesfully(linkAll1);

            Assert.True(exams.Count() == 8);
            //all2
            exams = await client.GetExamsSuccesfully(linkAll2);

            Assert.True(exams.Count() == 8);
            //privates
            exams = await client.GetExamsSuccesfully(linkAllPrivates);

            Assert.True(exams.Count() == 4);
            //publics
            exams = await client.GetExamsSuccesfully(linkAllPublics);

            Assert.True(exams.Count() == 4);
            //published
            exams = await client.GetExamsSuccesfully(linkAllPublished);

            Assert.True(exams.Count() == 4);
            //not published
            exams = await client.GetExamsSuccesfully(linkAllNotPublished);

            Assert.True(exams.Count() == 4);

            //creating more user exams ...

            for (int i = 0; i < 5; i++)
            {
                var isPrivate = i % 2 == 0;
                await httpCallHelper.CreateExam(true, isPrivate, null, user);
            }

            //authorize after create exam unauthirized
            client.Authorize(user.Token);

            var limitOffsetTester = new LimitOffsetTester(client, linkAll1);
            await limitOffsetTester.DoTest(GetExams);
        }
        public async void ShouldGetUserExamDetails()
        {
            var client         = httpClientFactory.CreateClient();
            var httpCallHelper = new HttpCallHelper(client);

            //create private & public -user1
            var tuple = await httpCallHelper.CreateExam();

            var loggedUser1 = tuple.Item1;
            var examDto1    = tuple.Item3;

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

            var examDtoPrivate1 = tuple.Item3;

            tuple = await httpCallHelper.CreateExam();

            var loggedUser2 = tuple.Item1;
            var examDto2    = tuple.Item3;

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

            var examDtoPrivate2 = tuple.Item3;

            //create private & public -user2
            var link1                          = $"exams/user/exam/{examDto1.Id}";
            var link1IncludeUser               = $"exams/user/exam/{examDto1.Id}?includeUser=true";
            var link1IncludeTags               = $"exams/user/exam/{examDto1.Id}?includeTags=true";
            var link1IncludeUserAndTags        = $"exams/user/exam/{examDto1.Id}?includeUser=true&includeTags=true";
            var link1Private                   = $"exams/user/exam/{examDtoPrivate1.Id}";
            var link1PrivateIncludeUser        = $"exams/user/exam/{examDtoPrivate1.Id}?includeUser=true";
            var link1PrivateIncludeTags        = $"exams/user/exam/{examDtoPrivate1.Id}?includeTags=true";
            var link1PrivateIncludeUserAndTags = $"exams/user/exam/{examDtoPrivate1.Id}?includeUser=true&includeTags=true";

            var link2 = $"exams/user/exam/{examDto2.Id}";

            //request unauthorized
            await client.GetUnauthorized(link1);

            //authorize user 1
            client.Authorize(loggedUser1.Token);

            //for public
            // include none
            var responseExam = await client.GetExamSuccesfully(link1);

            AssertHelper.AssertNoUserAndNoTagsIncluded(responseExam);
            //include user
            responseExam = await client.GetExamSuccesfully(link1IncludeUser);

            AssertHelper.AssertOnlyUserIncluded(responseExam);
            //include tags
            responseExam = await client.GetExamSuccesfully(link1IncludeTags);

            AssertHelper.AssertOnlyTagsIncluded(responseExam);
            //include both
            responseExam = await client.GetExamSuccesfully(link1IncludeUserAndTags);

            AssertHelper.AssertUserAndTagsIncluded(responseExam);

            //for private
            // include none
            responseExam = await client.GetExamSuccesfully(link1Private);

            AssertHelper.AssertNoUserAndNoTagsIncluded(responseExam);
            //include user
            responseExam = await client.GetExamSuccesfully(link1PrivateIncludeUser);

            AssertHelper.AssertOnlyUserIncluded(responseExam);
            //include tags
            responseExam = await client.GetExamSuccesfully(link1PrivateIncludeTags);

            AssertHelper.AssertOnlyTagsIncluded(responseExam);
            //include both
            responseExam = await client.GetExamSuccesfully(link1PrivateIncludeUserAndTags);

            AssertHelper.AssertUserAndTagsIncluded(responseExam);
            //request user 2 exam - should not found
            await client.GetNotFound(link2);

            //authorize user 2
            client.Authorize(loggedUser2.Token);
            //request user 1 exam - should not found
            await client.GetNotFound(link1);
        }
示例#10
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);
        }