def test_relationships_move_can_be_overrided_by_comment_author( self, username, expected): user = getattr(self, username) if username else None move_comment = self.blend_move_comment(author=self.user_1) move2 = self.blend_move() response = MoveCommentPayload()\ .set_move(move2)\ .patch(move_comment.id, user=user, code=expected) if expected == 200: response.assertHasRelationshipMoveData(move2)
def test_filter_by_move(self): move_comment = self.blend_move_comment() self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(args={'filter': '[{"name":"move__id","op":"has","val":"%s"}]' % move_comment.move_id})\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment) response = MoveCommentPayload()\ .get_collection(args={'filter': '[{"name":"move","op":"has","val":{"name":"id","op":"eq","val":"%s"}}]' % move_comment.move_id})\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment)
def test_missing_cannot_be_posted_on_old_moves(self): geokret = self.blend_geokret(created_on_datetime='2019-01-12T22:53:05') move1 = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-12T22:53:21') move2 = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-12T22:53:43') move_comment = self.blend_move_comment(move=move2, type=MOVE_COMMENT_TYPE_MISSING) payload = MoveCommentPayload() payload.set_move(move1)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .patch(move_comment.id, user=self.admin, code=422)\ .assertRaiseJsonApiError('/data/relationships/move') payload.set_move(move1)\ .set_type(MOVE_COMMENT_TYPE_COMMENT)\ .patch(move_comment.id, user=self.admin)\ .assertHasRelationshipMoveData(move1) move3 = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-12T23:07:03') payload.set_move(move3)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .patch(move_comment.id, user=self.admin)\ .assertHasRelationshipMoveData(move3)
def test_geokret_missing_comment_not_accepted_for_some_move_type( self, move_type, expected): move = self.blend_move(type=move_type) result = MoveCommentPayload().blend()\ .set_move(move)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .post(user=self.user_1, code=expected) if expected == 422: result.assertRaiseJsonApiError('/data/relationships/move/data') self.assertEqual(len(move.comments), 0) self.assertFalse(move.geokret.missing) else: self.assertEqual(len(move.comments), 1) self.assertTrue(move.geokret.missing)
def test_geokret_id_stored_in_database_for_compatibility_with_legacy(self): move = self.blend_move() payload = MoveCommentPayload().blend()\ .set_move(move)\ .post(user=self.user_1) move_comment = safe_query(self, MoveComment, 'id', payload.id, 'id') self.assertIsNotNone(move_comment.geokret_id) self.assertEqual(move_comment.geokret_id, move.geokret.id)
def test_geokret_missing_status_computed(self): move = self.blend_move(type=MOVE_TYPE_DROPPED) move_comment = self.blend_move_comment(move=move, type=MOVE_COMMENT_TYPE_MISSING, author=self.user_1) self.assertTrue(move.geokret.missing) MoveCommentPayload().delete(move_comment.id, user=self.user_1) self.assertFalse(move.geokret.missing)
def test_geokret_owner_can_edit_comments(self, username, expected): user = getattr(self, username) if username else None geokret = self.blend_geokret(owner=self.user_1) move = self.blend_move(geokret=geokret) move_comment = self.blend_move_comment(move=move) MoveCommentPayload()\ .set_comment("Some other comment")\ .patch(move_comment.id, user=user, code=expected)
def test_missing_can_be_reported_multiple_times(self, move_type): geokret = self.blend_geokret(created_on_datetime='2019-01-12T23:33:08') move = self.blend_move(type=move_type, geokret=geokret, moved_on_datetime='2019-01-12T23:33:20') payload = MoveCommentPayload().blend()\ .set_move(move)\ .set_type(MOVE_COMMENT_TYPE_COMMENT) comment1 = payload.post(user=self.user_1) comment2 = payload.post(user=self.user_1) comment3 = payload.post(user=self.user_1) payload = MoveCommentPayload().set_type(MOVE_COMMENT_TYPE_MISSING) payload.patch(comment1.id, user=self.user_1) payload.patch(comment2.id, user=self.user_1) payload.patch(comment3.id, user=self.user_1)
def test_as_(self, username, expected): user = getattr(self, username) if username else None move = self.blend_move() MoveCommentPayload()\ .set_type(MOVE_COMMENT_TYPE_COMMENT)\ .set_move(move)\ .set_comment("Some comment")\ .post(user=user, code=expected)
def test_geokret_missing_status_computed(self): move = self.blend_move(type=MOVE_TYPE_DROPPED) self.assertFalse(move.geokret.missing) MoveCommentPayload()\ .set_comment("Comment")\ .set_move(move)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .post(user=self.user_1) self.assertTrue(move.geokret.missing)
def test_has_public_attributes_as_(self, username): user = getattr(self, username) if username else None move_comments = self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(user=user)\ .assertCount(3) response.data[0].assertHasPublicAttributes(move_comments[0]) response.data[1].assertHasPublicAttributes(move_comments[1]) response.data[2].assertHasPublicAttributes(move_comments[2])
def test_order_by(self): move_comments = self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(args={'sort': '-id'})\ .assertCount(3) response.data[0].assertHasId(move_comments[2].id) response.data[1].assertHasId(move_comments[1].id) response.data[2].assertHasId(move_comments[0].id)
def test_field_type_from_predefined_list(self): move = self.blend_move(type=MOVE_TYPE_DROPPED) move_comment = self.blend_move_comment(move=move, author=self.user_1) payload = MoveCommentPayload() payload.set_type(MOVE_COMMENT_TYPE_COMMENT)\ .patch(move_comment.id, user=self.user_1) payload.set_type(MOVE_COMMENT_TYPE_MISSING)\ .patch(move_comment.id, user=self.user_1) payload.set_type(666)\ .patch(move_comment.id, user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/type')
def test_option_move_author_can_moderate_move_comments( self, enable, expected): current_app.config[ 'ALLOW_MOVE_AUTHOR_TO_MODERATE_MOVE_COMMENTS'] = enable move = self.blend_move(author=self.user_1) move_comment = self.blend_move_comment(move=move) MoveCommentPayload()\ .delete(move_comment.id, user=self.user_1, code=expected) current_app.config[ 'ALLOW_MOVE_AUTHOR_TO_MODERATE_MOVE_COMMENTS'] = True
def test_option_geokret_owner_can_delete_comments(self, enable, expected): current_app.config[ 'ALLOW_GEOKRET_OWNER_TO_MODERATE_MOVE_COMMENTS'] = enable geokret = self.blend_geokret(owner=self.user_1) move = self.blend_move(geokret=geokret) move_comment = self.blend_move_comment(move=move) MoveCommentPayload()\ .delete(move_comment.id, user=self.user_1, code=expected) current_app.config[ 'ALLOW_GEOKRET_OWNER_TO_MODERATE_MOVE_COMMENTS'] = True
def test_pagination(self): move_comments = self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(args={'page[size]': '1'})\ .assertCount(3)\ .assertHasPaginationLinks() self.assertEqual(len(response['data']), 1) response.data[0].assertHasId(move_comments[0].id)
def test_filter_by_author(self): user = self.blend_user(name="someone") move_comment = self.blend_move_comment(author=user) self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(args={'filter': '[{"name":"author__name","op":"has","val":"%s"}]' % user.name})\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment) self.blend_move_comment(count=3) response = MoveCommentPayload()\ .get_collection(args={'filter': '[{"name":"author__id","op":"has","val":"%s"}]' % user.id})\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment) response = MoveCommentPayload()\ .get_collection(args={'filter': '[{"name":"author","op":"has","val":{"name":"name","op":"like","val":"some%"}}]'})\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment)
def test_missing_can_be_reported_again_on_new_moves(self): geokret = self.blend_geokret(created_on_datetime='2019-01-13T18:02:17') move1 = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-13T18:02:57') MoveCommentPayload().blend()\ .set_move(move1)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .post(user=self.user_1) self.assertTrue(geokret.missing) move2 = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-13T18:03:26') self.assertFalse(geokret.missing) MoveCommentPayload().blend()\ .set_move(move2)\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .post(user=self.user_1) self.assertTrue(geokret.missing)
def test_field_type_from_predefined_list(self): move = self.blend_move(type=MOVE_TYPE_DROPPED) payload = MoveCommentPayload().blend(move=move) payload.set_type(MOVE_COMMENT_TYPE_COMMENT).post(user=self.user_1) payload.set_type(MOVE_COMMENT_TYPE_MISSING).post(user=self.user_1) payload.set_type(666).post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/type')
def test_missing_cannot_be_posted_on_old_moves(self): geokret = self.blend_geokret(created_on_datetime='2019-01-12T22:53:05') move = self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-12T22:53:21') self.blend_move(type=MOVE_TYPE_DROPPED, geokret=geokret, moved_on_datetime='2019-01-12T22:53:43') payload = MoveCommentPayload().blend()\ .set_move(move)\ .set_type(MOVE_COMMENT_TYPE_MISSING) payload.post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/relationships/move') payload.set_type(MOVE_COMMENT_TYPE_COMMENT).post(user=self.user_1)
def test_geokret_missing_comment_not_accepted_for_some_move_type( self, move_type, expected): move = self.blend_move(type=move_type) move_comment = self.blend_move_comment(move=move, type=MOVE_COMMENT_TYPE_COMMENT, author=self.user_1) result = MoveCommentPayload()\ .set_type(MOVE_COMMENT_TYPE_MISSING)\ .patch(move_comment.id, user=self.user_1, code=expected) if expected == 422: result.assertRaiseJsonApiError('/data/relationships/move/data') self.assertEqual(move_comment.type, MOVE_COMMENT_TYPE_COMMENT) self.assertFalse(move.geokret.missing) else: result.assertHasType(MOVE_COMMENT_TYPE_MISSING) self.assertEqual(move_comment.type, MOVE_COMMENT_TYPE_MISSING) self.assertTrue(move.geokret.missing)
def test_field_comment_cannot_be_blank(self, comment): MoveCommentPayload().blend()\ .set_comment(comment)\ .post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/comment')
def test_relationships_move_is_mandatory(self): MoveCommentPayload().blend()\ ._del_relationships('move')\ .set_author(self.user_1)\ .post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/relationships/move/data')
def test_relationships_author_cant_be_overrided(self): MoveCommentPayload().blend()\ .set_author(self.user_2)\ .post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/relationships/author/data')
def test_relationships_author_is_optional(self): MoveCommentPayload().blend()\ ._del_relationships('author')\ .post(user=self.user_1)\ .assertHasRelationshipAuthorData(self.user_1.id)
def test_move_comment_list_via_author(self): move_comment = self.blend_move_comment() response = MoveCommentPayload(_url_collection="/v1/users/{}/moves-comments".format(move_comment.author.id))\ .get_collection()\ .assertCount(1) response.data[0].assertHasPublicAttributes(move_comment)
def test_field_type_is_of_type_comment(self): MoveCommentPayload().blend()\ .post(user=self.user_1)\ .assertHasType(MOVE_COMMENT_TYPE_COMMENT)
def test_field_comment_support_html_subset(self, comment, expected): MoveCommentPayload().blend()\ .set_comment(comment)\ .post(user=self.user_1)\ .assertHasComment(expected)
def test_relationships_author_can_be_overrided_by_admin(self): MoveCommentPayload().blend()\ .set_author(self.user_2)\ .post(user=self.admin)\ .assertHasRelationshipAuthorData(self.user_2.id)
def test_field_comment_is_mandatory(self): MoveCommentPayload().blend()\ ._del_attribute('comment')\ .post(user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/comment')