def test_category_cache(app, authed_client): category = ForumCategory.from_pk(1) cache.cache_model(category, timeout=60) category = ForumCategory.from_pk(1) assert category.name == 'Site' assert category.description == 'General site discussion' assert cache.ttl(category.cache_key) < 61
def test_new_category(app, authed_client): category = ForumCategory.new(name='NewCategory', description=None, position=100) assert category.name == 'NewCategory' assert category.description is None assert category.position == 100 assert ForumCategory.from_cache(category.cache_key).id == category.id == 6
def post(self, request, slug, format=None): topic = self.get_object(slug) serializer = CategorySerializer(data=request.data) if serializer.is_valid(): name = request.data['name'] category = ForumCategory( name=name, topic=topic, ) category.save() serializer = CategorySerializer(category) return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def view_categories(include_dead: bool = False) -> flask.Response: """ This endpoint allows users to view the available forum categories and the forums in each category, along with some information about each forum. .. :quickref: ForumCategory; View forum categories. **Example response**: .. parsed-literal:: { "status": "success", "response": [ "<ForumCategory>", "<ForumCategory>" ] } :>json list response: A list of forum categories :statuscode 200: View successful :statuscode 401: View unsuccessful """ categories = ForumCategory.get_all( include_dead=include_dead and flask.g.user.has_permission('forums_forums_modify')) return flask.jsonify(categories)
def delete_category(id: int) -> flask.Response: """ This is the endpoint for forum category deletion . The ``forums_forums_modify`` permission is required to access this endpoint. The category must have no forums assigned to it in order to delete it. .. :quickref: ForumCategory; Delete a forum category. **Example response**: .. parsed-literal:: { "status": "success", "response": "ForumCategory 1 (Site) has been deleted." } :>json str response: The deleted forum category message :statuscode 200: Deletion successful :statuscode 400: Deletion unsuccessful :statuscode 404: Forum category does not exist """ category = ForumCategory.from_pk(id, _404=True) if category.forums: raise APIException( 'You cannot delete a forum category while it still has forums assigned to it.' ) category.deleted = True db.session.commit() return flask.jsonify( f'ForumCategory {id} ({category.name}) has been deleted.')
def test_delete_category(app, authed_client): add_permissions(app, 'forums_view', 'forums_forums_modify') response = authed_client.delete('/forums/categories/5') check_json_response(response, 'ForumCategory 5 (uWhatMate) has been deleted.') category = ForumCategory.from_pk(5, include_dead=True) assert category.deleted
def test_category_get_all(app, authed_client): categories = ForumCategory.get_all() assert len(categories) == 3 for category in categories: if category.name == 'Site' and category.id == 1: break else: raise AssertionError('A real forum not called')
def test_category_get_all_cached(app, authed_client): cache.set(ForumCategory.__cache_key_all__, [1, 3], timeout=60) categories = ForumCategory.get_all() assert len(categories) == 2 for category in categories: if category.name == 'Site' and category.id == 1: break else: raise AssertionError('A real forum not called')
def modify_forum( id: int, name: Optional_[str] = None, category_id: Optional_[int] = None, description: Union[str, bool, None] = False, position: Optional_[int] = None, ) -> flask.Response: """ This is the endpoint for forum editing. The ``forums_forums_modify`` permission is required to access this endpoint. The name, category, description, and position of a forum can be changed here. .. :quickref: Forum; Edit a forum. **Example request**: .. parsed-literal:: PUT /forums/6 HTTP/1.1 { "name": "Support", "description": "The place for **very** confused share bears.", "position": 99 } **Example response**: .. parsed-literal:: { "status": "success", "response": "<Forum>" } :>json dict response: The edited forum :statuscode 200: Editing successful :statuscode 400: Editing unsuccessful :statuscode 404: Forum does not exist """ forum = Forum.from_pk(id, _404=True) if name: forum.name = name if category_id and ForumCategory.is_valid(category_id, error=True): forum.category_id = category_id if description is not False: assert not isinstance(description, bool) forum.description = description if position is not None: forum.position = position db.session.commit() return flask.jsonify(forum)
def test_serialize_no_perms(app, authed_client): category = ForumCategory.from_pk(1) data = NewJSONEncoder().default(category) check_dictionary( data, { 'id': 1, 'name': 'Site', 'description': 'General site discussion', 'position': 1, }, ) assert 'forums' in data and len(data['forums']) == 2
def test_serialize_very_detailed(app, authed_client): add_permissions(app, 'forums_forums_modify') category = ForumCategory.from_pk(1) data = NewJSONEncoder().default(category) check_dictionary( data, { 'id': 1, 'name': 'Site', 'description': 'General site discussion', 'position': 1, 'deleted': False, }, ) assert 'forums' in data and len(data['forums']) == 2
def test_edit_category_skips(app, authed_client): add_permissions(app, 'forums_view', 'forums_forums_modify') response = authed_client.put('/forums/categories/1', data=json.dumps({'position': 0})) check_json_response( response, { 'id': 1, 'name': 'Site', 'description': 'General site discussion', 'position': 0, }, ) category = ForumCategory.from_pk(1) assert category.position == 0
def edit_category(id: int, name: str = None, description: str = None, position: int = None) -> flask.Response: """ This is the endpoint for forum category editing. The ``forums_forums_modify`` permission is required to access this endpoint. The name, description, and position of a forum category can be changed here. .. :quickref: ForumCategory; Edit a forum category. **Example request**: .. parsed-literal:: PUT /forums/categories/6 HTTP/1.1 { "name": "Support", "description": "The place for **very** confused share bears.", "position": 99 } **Example response**: .. parsed-literal:: { "status": "success", "response": "<ForumCategory>" } :>json dict response: The edited forum category :statuscode 200: Editing successful :statuscode 400: Editing unsuccessful :statuscode 404: Forum category does not exist """ category = ForumCategory.from_pk(id, _404=True) if name: category.name = name if description: category.description = description if position is not None: category.position = position db.session.commit() return flask.jsonify(category)
def test_serialize_nested(app, authed_client): add_permissions(app, 'forums_forums_modify') category = ForumCategory.from_pk(1) data = category.serialize(nested=True) check_dictionary( data, { 'id': 1, 'name': 'Site', 'description': 'General site discussion', 'forums': None, 'position': 1, 'deleted': False, }, strict=True, )
def test_edit_category(app, authed_client): add_permissions(app, 'forums_view', 'forums_forums_modify') response = authed_client.put( '/forums/categories/1', data=json.dumps({ 'name': 'Bite', 'description': 'Very New Description' }), ) check_json_response( response, { 'id': 1, 'name': 'Bite', 'description': 'Very New Description' }, ) category = ForumCategory.from_pk(1) assert category.id == 1 assert category.name == 'Bite' assert category.description == 'Very New Description'
def add_category(name: str, description: str = None, position: int = 0) -> flask.Response: """ This is the endpoint for forum category creation. The ``forums_forums_modify`` permission is required to access this endpoint. .. :quickref: ForumCategory; Create a forum category. **Example request**: .. parsed-literal:: POST /forums/categories HTTP/1.1 { "name": "Support", "description": "The place for confused share bears.", "position": 6 } **Example response**: .. parsed-literal:: { "status": "success", "response": "<ForumCategory>" } :>json dict response: The newly created forum category :statuscode 200: Creation successful :statuscode 400: Creation unsuccessful """ category = ForumCategory.new(name=name, description=description, position=position) return flask.jsonify(category)
def test_unicode_method(self): cat = ForumCategory(title="Software") self.assertEquals(str(cat), cat.title)
def test_category_from_pk(app, authed_client): category = ForumCategory.from_pk(1) assert category.name == 'Site' assert category.description == 'General site discussion'