from unittest import TestCase
from unittest.mock import MagicMock, patch

from openslides.users.serializers import UserFullSerializer
from openslides.utils.rest_api import ValidationError


class UserCreateUpdateSerializerTest(TestCase):
    def test_validate_no_data(self):
        """
        Tests, that the validator raises a ValidationError, if not data is given.
        """
        serializer = UserFullSerializer()
        data = {}

        with self.assertRaises(ValidationError):
            serializer.validate(data)

    @patch('openslides.users.serializers.User.objects.generate_username')
    def test_validate_no_username(self, generate_username):
        """
        Tests, that an empty username is generated.
        """
        generate_username.return_value = 'test_value'
        serializer = UserFullSerializer()
        data = {'first_name': 'TestName'}

        new_data = serializer.validate(data)

        self.assertEqual(new_data['username'], 'test_value')

    def test_validate_no_username_in_patch_request(self):
        """
        Tests, that an empty username is not set in a patch request context.
        """
        view = MagicMock(action='partial_update')
        serializer = UserFullSerializer(context={'view': view})
        data = {'first_name': 'TestName'}

        new_data = serializer.validate(data)

        self.assertIsNone(new_data.get('username'))
