测试Django REST视图集的POST方法

沙里特

Docs说,只有 GET

user_list = UserViewSet.as_view({'get':'list'})
user_detail = UserViewSet.as_view({'get':'retrieve'})

tests.py

def test_admin_can_create_role(userprofiles, aoo_admin, bug_manager, note_admin):
    aoo = User.objects.get(username='aoo')
    factory = APIRequestFactory()
    view = RoleViewSet.as_view()
    url = reverse('api:role-list')
    data = {
        'name': 'FirstAdmin',
        'type': Role.RoleType.admin,
        'company': 1,
    }
    request = factory.post(url, data=data, format='json')
    force_authenticate(request, user=aoo)
    response = view(request)
    assert 201 == response.data

viewsets.py

class RoleViewSetPermission(permissions.BasePermission):
    message = 'Only Manager or Admin are allowed'

    def has_permission(self, request, view):
        user = request.user
        return user.has_perm('roles.add_role') \
               and user.has_perm('roles.change_role') \
               and user.has_perm('roles.delete_role')


class RoleViewSet(viewsets.ModelViewSet):
    permission_classes = (RoleViewSetPermission,)
    queryset = Role.objects.all()
    serializer_class = RoleSerializer
    filter_backends = (filters.DjangoFilterBackend, SearchFilter)
    filter_class = RoleFilter
    search_fields = ('name', 'description', 'user__username', 'company__name', 'company__name_th')

    def filter_queryset(self, queryset):
        try:
            company = self.request.user.user_profile.companyappid.company
        except AttributeError:
            logger.error(f'{self.request.user} has AttributeError')
            return Role.objects.none()
        else:
            logger.info(f'{self.request.user} is {company} member')
            return queryset.filter(company=company)

追溯:

cls = <class 'poinkbackend.apps.roles.api.viewsets.RoleViewSet'>, actions = None, initkwargs = {}

    @classonlymethod
    def as_view(cls, actions=None, **initkwargs):
        """
            Because of the way class based views create a closure around the
            instantiated view, we need to totally reimplement `.as_view`,
            and slightly modify the view function that is created and returned.
            """
        # The suffix initkwarg is reserved for identifying the viewset type
        # eg. 'List' or 'Instance'.
        cls.suffix = None

        # actions must not be empty
        if not actions:
>           raise TypeError("The `actions` argument must be provided when "
                            "calling `.as_view()` on a ViewSet. For example "
                            "`.as_view({'get': 'list'})`")
E           TypeError: The `actions` argument must be provided when calling `.as_view()` on a ViewSet. For example `.as_view({'get': 'list'})`

../../.pyenv/versions/3.6.3/envs/poink/lib/python3.6/site-packages/rest_framework/viewsets.py:55: TypeError

问:
如何做force_authenticate,并request.postviewsets我没有问题。它已经在答案中了SO

参考:http :
//www.django-rest-framework.org/api-guide/viewsets/

沙里特

我不得不使用APIClientAPIRequestFactory
我虽然只有一种测试方法。
这是我的例子。

def test_admin_can_create_role(userprofiles, aoo_admin, bug_manager, note_admin):
    aoo = User.objects.get(username='aoo')
    client = APIClient()
    client.force_authenticate(user=aoo)
    url = reverse('api:role-list')
    singh = Company.objects.get(name='Singh')
    data = {
        'name': 'HairCut',
        'type': Role.RoleType.admin,
        'company': singh.id,  # Must be his companyid. Reason is in the RoleSerializer docstring
    }
    response = client.post(url, data, format='json')

    assert 201 == response.status_code

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django Rest Framework - 单元测试视图集额外操作

基于方法的Django Rest框架视图集权限

django rest框架-使用视图集

PyCharm:调试Django Rest视图集

django rest 的视图集调用默认序列化程序的 create 方法而不是覆盖方法

如何为 Django Rest Framework 中的视图集的自定义操作编写测试

Django REST Framework:视图和视图集之间的区别?

Django rest-auth:从其他视图集调用RegisterView;sensitive_post_parameters没有收到HttpRequest

无法扩展Django REST Framework视图集以处理多级API

在Django Rest框架中使用视图集进行过滤

Django Rest Framework视图集中的对象级别授权

如何使用 django rest 视图集执行多次插入?

如何在Django Rest Framework中动态更新视图集

测试Django视图功能

Django测试视图问题

测试 Django 视图

Django-Rest-Framework:我可以使用两个具有相同url_path但请求方法不同的方法来创建视图集吗?

用于视图集中视图的Django Rest Framework自定义架构

如何在Django REST中不将路由器用于视图集,而是用于通用视图?

Django测试-测试处理ajax调用的视图

django rest框架测试如何运行测试

Django rest框架无法处理模型视图集中的多个对象

Django Rest Framework:在视图集中传递上下文

通用外键字段模型中的Django Rest Framework search_fields视图集

如何使用Django Rest Framework视图集按父对象的属性过滤嵌套数据

如何在 perform_create 视图集(django rest 框架)中添加用户?

django-rest-framework自定义视图集与多个查找参数检索

如何在Django Rest Framework的视图集中渲染为html

如何在Django Rest Framework中更改视图集检索响应?