1616 MembershipSerializer ,
1717 SemesterSerializer ,
1818 UserPrivateSerializer ,
19+ ReviewSerializer ,
1920)
2021
2122
@@ -302,7 +303,7 @@ def setUp(self):
302303
303304 def test_create (self , mock_delay ):
304305 self .client .force_authenticate (user = self .student2 )
305- self .client .post (
306+ response = self .client .post (
306307 reverse ("ohq:question-list" , args = [self .course .id , self .queue .id ]),
307308 {"text" : "Help me" , "tags" : [{"name" : "Tag" }]},
308309 )
@@ -733,6 +734,7 @@ def setUp(self):
733734 )
734735 self .head_ta = User .objects .create (username = "head_ta" )
735736 self .ta = User .objects .create (username = "ta" )
737+ self .other_ta = User .objects .create (username = "other_ta" )
736738 self .student = User .objects .create (username = "student" )
737739 self .other_student = User .objects .create (username = "other_student" )
738740 Membership .objects .create (
@@ -748,17 +750,17 @@ def setUp(self):
748750 self .queue = Queue .objects .create (name = "Queue" , course = self .course )
749751 self .question_text = "This is a question"
750752 self .question_1 = Question .objects .create (
751- queue = self .queue , asked_by = self .student , text = self .question_text
753+ queue = self .queue , asked_by = self .student , text = self .question_text , status = "ANSWERED"
752754 )
753755 self .review_content_1 = "TA was helpful"
754756 self .review_rating_1 = 5
755757 self .question_2 = Question .objects .create (
756- queue = self .queue , asked_by = self .student , text = self .question_text
758+ queue = self .queue , asked_by = self .student , text = self .question_text , status = "ANSWERED"
757759 )
758760 self .review_content_2 = "TA was mid"
759761 self .review_rating_2 = 2
760762 self .question_3 = Question .objects .create (
761- queue = self .queue , asked_by = self .student , text = self .question_text
763+ queue = self .queue , asked_by = self .student , text = self .question_text , status = "ANSWERED"
762764 )
763765 self .review_content_3 = "TA was decent"
764766 self .review_rating_3 = 4
@@ -777,6 +779,28 @@ def test_create(self):
777779 )
778780 self .assertEqual (1 , Review .objects .all ().count ())
779781
782+ # Ensure only one review can be made for one question
783+ self .client .post (
784+ reverse ("ohq:review-list" , args = [self .course .id , self .queue .id , self .question_1 .id ]),
785+ {
786+ "content" : self .review_content_2 ,
787+ "rating" : self .review_rating_2
788+ },
789+ )
790+ self .assertEqual (1 , Review .objects .all ().count ())
791+
792+ # Ensure review cannot be made to unanswered question
793+ unanswered_question = Question .objects .create (
794+ queue = self .queue , asked_by = self .student , text = self .question_text
795+ )
796+ self .client .post (
797+ reverse ("ohq:review-list" , args = [self .course .id , self .queue .id , unanswered_question .id ]),
798+ {
799+ "content" : self .review_content_2 ,
800+ "rating" : self .review_rating_2
801+ },
802+ )
803+ self .assertEqual (1 , Review .objects .all ().count ())
780804
781805 # Ensure TA cannot create a review
782806 self .client .force_authenticate (user = self .ta )
@@ -837,14 +861,64 @@ def test_list(self):
837861 "rating" : self .review_rating_1
838862 },
839863 )
840- response = self .client .get ("/api/courses/" + self .course .id
841- + "/queues/" + self .queue .id
842- + "/questions/" + self .question_1 .id + "/reviews/" )
864+ response = self .client .get ("/api/courses/" + str ( self .course .id )
865+ + "/queues/" + str ( self .queue .id )
866+ + "/questions/" + str ( self .question_1 .id ) + "/reviews/" )
843867 data = json .loads (response .content )
844868 self .assertEqual (1 , len (data ))
845869
870+ # Student cannot get access to review made by other students
846871 self .client .force_authenticate (user = self .other_student )
872+ response = self .client .get ("/api/courses/" + str ( self .course .id )
873+ + "/queues/" + str (self .queue .id )
874+ + "/questions/" + str (self .question_1 .id ) + "/reviews/" )
875+ data = json .loads (response .content )
876+ self .assertEqual (0 , len (data ))
877+
878+ def test_update (self ):
879+ """
880+ Ensure students can update reviews
881+ """
882+ self .client .force_authenticate (user = self .student )
883+ self .client .post (
884+ reverse ("ohq:review-list" , args = [self .course .id , self .queue .id , self .question_1 .id ]),
885+ {
886+ "content" : self .review_content_1 ,
887+ "rating" : self .review_rating_1
888+ },
889+ )
890+ review = Review .objects .first ()
891+ response = self .client .patch (
892+ reverse ("ohq:review-detail" , args = [self .course .id , self .queue .id , self .question_1 .id , review .id ]),
893+ {"content" : "hello" },
894+ )
895+ review = Review .objects .first ()
896+ self .assertEqual ("hello" , review .content )
897+ response = self .client .patch (
898+ reverse ("ohq:review-detail" , args = [self .course .id , self .queue .id , self .question_1 .id , review .id ]),
899+ {"rating" : 2 },
900+ )
901+ review = Review .objects .first ()
902+ self .assertEqual (2 , review .rating )
847903
904+ # Updating reviews without appropriate key will not work
905+ response = self .client .patch (
906+ reverse ("ohq:review-detail" , args = [self .course .id , self .queue .id , self .question_1 .id , review .id ]),
907+ {"something" : 3 },
908+ )
909+ self .assertEqual ("hello" , review .content )
910+ self .assertEqual (2 , review .rating )
911+
912+ # Ensure TAs cannot update reviews
913+ self .client .force_authenticate (user = self .ta )
914+ review = Review .objects .first ()
915+ response = self .client .patch (
916+ reverse ("ohq:review-detail" , args = [self .course .id , self .queue .id , self .question_1 .id , review .id ]),
917+ {"content" : "The best ta ever" , "rating" : 5 },
918+ )
919+ review = Review .objects .first ()
920+ self .assertEqual ("hello" , review .content )
921+ self .assertEqual (2 , review .rating )
848922
849923
850924
0 commit comments