예제 #1
0
 def test_valid_access_token_returns_user(self, user):
     token = GreenbudgetSlidingToken.for_user(user)
     with mock.patch.object(User.objects, 'get',
                            return_value=user) as mock_fn:
         returned_user = get_user_from_token(str(token))
     assert returned_user.pk == user.pk
     assert mock_fn.mock_calls == [mock.call(pk=user.pk)]
def test_validate_token(api_client, settings, user):
    api_client.force_login(user)

    token = GreenbudgetSlidingToken.for_user(user)
    api_client.cookies = SimpleCookie({
        settings.JWT_TOKEN_COOKIE_NAME: str(token),
    })
    response = api_client.post("/v1/jwt/validate/")
    assert response.status_code == 201
    assert 'greenbudgetjwt' in response.cookies

    assert response.json() == {
        'user': {
            'id': user.pk,
            'first_name': user.first_name,
            'last_name': user.last_name,
            'full_name': user.full_name,
            'email': user.email,
            'username': user.username,
            'is_active': user.is_active,
            'is_admin': user.is_admin,
            'is_superuser': user.is_superuser,
            'is_staff': user.is_staff,
            'date_joined': api_datetime_string(user.date_joined),
            'updated_at': api_datetime_string(user.updated_at),
            'created_at': api_datetime_string(user.created_at),
            'last_login': '******',
            'timezone': str(user.timezone),
            "profile_image": None,
        }
    }
예제 #3
0
 def test_expired_access_token_auto_refreshes(self, user):
     token = GreenbudgetSlidingToken.for_user(user)
     token.set_exp(from_time=datetime(2010, 1, 1))
     with mock.patch.object(User.objects, 'get',
                            return_value=user) as mock_fn:
         returned_user = get_user_from_token(str(token))
     assert returned_user.pk == user.pk
     assert mock_fn.mock_calls == [mock.call(pk=user.pk)]
예제 #4
0
    def test_expired_access_token_missing_refresh_token_raises(self, user):
        token = GreenbudgetSlidingToken.for_user(user)
        token.set_exp(claim='refresh_exp', from_time=datetime(2010, 1, 1))
        with mock.patch.object(User.objects, 'get',
                               return_value=user) as mock_fn:
            with pytest.raises(TokenExpiredError):
                get_user_from_token(str(token))

        assert mock_fn.call_count == 0
예제 #5
0
def test_middleware_doesnt_update_cookie_for_read_only_methods(
        method, middleware_patch, user, settings, rf):
    middleware = TokenCookieMiddleware()
    rf.cookies = SimpleCookie({
        settings.JWT_TOKEN_COOKIE_NAME:
        GreenbudgetSlidingToken.for_user(user),
    })
    request = getattr(rf, method)('/')
    response = HttpResponse()
    with mock.patch.object(response, 'set_cookie') as set_cookie:
        with middleware_patch('get_cookie_user', return_value=user):
            middleware.process_request(request)
            response = middleware.process_response(request, response)
            assert set_cookie.called is False
예제 #6
0
def test_middleware_updates_cookie_at_refresh_endpoint(middleware_patch, user,
                                                       settings, rf):
    middleware = TokenCookieMiddleware()
    rf.cookies = SimpleCookie({
        settings.JWT_TOKEN_COOKIE_NAME:
        GreenbudgetSlidingToken.for_user(user),
    })
    request = rf.get(reverse('jwt:refresh'))
    response = HttpResponse()
    with mock.patch.object(response, 'set_cookie') as set_cookie:
        with middleware_patch('get_cookie_user', return_value=user):
            middleware.process_request(request)
            response = middleware.process_response(request, response)

            assert set_cookie.called is True
예제 #7
0
def test_process_response_sets_cookies(settings, rf, user):
    token = GreenbudgetSlidingToken.for_user(user)

    expire_date = datetime.now() + \
        settings.SIMPLE_JWT['SLIDING_TOKEN_REFRESH_LIFETIME']
    http_expire_date = http_date(expire_date.timestamp())

    request = rf.get('/')
    request.cookie_user = user
    response = HttpResponse()
    middleware = TokenCookieMiddleware()

    with mock.patch.object(GreenbudgetSlidingToken,
                           'for_user',
                           return_value=token) as mock_for_user:
        response = middleware.process_response(request, response)
        jwt_cookie = response.cookies[settings.JWT_TOKEN_COOKIE_NAME]

        assert jwt_cookie.value == str(token)
        assert jwt_cookie['expires'] == http_expire_date

        assert mock_for_user.mock_calls == [mock.call(user)]