Oscar Mederos
Oscar Mederos

Reputation: 29823

Unit testing decorators in Python

I wrote the following decorator to be used in some Django views where I don't want the user to be logged in (like register and forgot-password):

def not_logged_in(view, redirect_url=None):
    def _wrapper(request, *args, **kwargs):
        if request.user.is_authenticated():
            return HttpResponseRedirect(
                redirect_url or '/'
            )
        return view(*args, **kwargs)

    return _wrapper

Once I have it, I can easily write:

@not_logged_in
def register(request):
    ...

I have written unit tests for the views that are using it, and it is working without problems, but I'm wondering what would be the best way of unit testing the not_logged_in function alone?

Upvotes: 5

Views: 2080

Answers (1)

9000
9000

Reputation: 40894

I suppose that you can easily mock the request object, then decorate a trivial function with your decorator and pass that request a parameter.

I also suppose that your _wrapper does not really have an unused request parameter?

Upvotes: 3

Related Questions