Skip to content
Snippets Groups Projects
test_views.py 2.36 KiB
Newer Older
import json

from django.test import RequestFactory

from test_plus.test import TestCase
from funkwhale_api.users.models import User

from . factories import UserFactory


class UserTestCase(TestCase):

    def setUp(self):
        self.user = self.make_user()
        self.factory = RequestFactory()

    def test_can_create_user_via_api(self):
        url = self.reverse('rest_register')
        data = {
            'username': 'test1',
            'email': 'test1@test.com',
            'password1': 'testtest',
            'password2': 'testtest',
        }
        with self.settings(REGISTRATION_MODE="public"):
            response = self.client.post(url, data)
        self.assertEqual(response.status_code, 201)

        u = User.objects.get(email='test1@test.com')
        self.assertEqual(u.username, 'test1')

    def test_can_disable_registration_view(self):
        url = self.reverse('rest_register')
        data = {
            'username': 'test1',
            'email': 'test1@test.com',
            'password1': 'testtest',
            'password2': 'testtest',
        }
        with self.settings(REGISTRATION_MODE="disabled"):
            response = self.client.post(url, data)
        self.assertEqual(response.status_code, 403)

    def test_can_fetch_data_from_api(self):
        url = self.reverse('api:v1:users:users-me')
        response = self.client.get(url)
        # login required
        self.assertEqual(response.status_code, 401)

        user = UserFactory(
            is_staff=True,
            perms=[
                'music.add_importbatch',
                'dynamic_preferences.change_globalpreferencemodel',
            ]
        )
        self.assertTrue(user.has_perm('music.add_importbatch'))
        self.login(user)

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

        payload = json.loads(response.content.decode('utf-8'))

        self.assertEqual(payload['username'], user.username)
        self.assertEqual(payload['is_staff'], user.is_staff)
        self.assertEqual(payload['is_superuser'], user.is_superuser)
        self.assertEqual(payload['email'], user.email)
        self.assertEqual(payload['name'], user.name)
        self.assertEqual(
            payload['permissions']['import.launch']['status'], True)
        self.assertEqual(
            payload['permissions']['settings.change']['status'], True)