def test_use_invalid_names(self):
        data = {
            'name': 'VARIABLE WITH SPACES',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't contain spaces",
            form.errors['name'],
        )

        data = {
            'name': 'READTHEDOCS__INVALID',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't start with READTHEDOCS",
            form.errors['name'],
        )

        data = {
            'name': 'INVALID_CHAR*',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            'Only letters, numbers and underscore are allowed',
            form.errors['name'],
        )

        data = {
            'name': '__INVALID',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't start with __ (double underscore)",
            form.errors['name'],
        )

        get(EnvironmentVariable, name='EXISTENT_VAR', project=self.project)
        data = {
            'name': 'EXISTENT_VAR',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            'There is already a variable with this name for this project',
            form.errors['name'],
        )
    def test_create(self):
        data = {
            'name': 'MYTOKEN',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        form.save()

        self.assertEqual(EnvironmentVariable.objects.count(), 1)
        self.assertEqual(EnvironmentVariable.objects.first().name, 'MYTOKEN')
        self.assertEqual(EnvironmentVariable.objects.first().value, "'string here'")

        data = {
            'name': 'ESCAPED',
            'value': r'string escaped here: #$\1[]{}\|',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        form.save()

        self.assertEqual(EnvironmentVariable.objects.count(), 2)
        self.assertEqual(EnvironmentVariable.objects.first().name, 'ESCAPED')
        self.assertEqual(EnvironmentVariable.objects.first().value, r"'string escaped here: #$\1[]{}\|'")
    def test_create(self):
        data = {
            'name': 'MYTOKEN',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        form.save()

        self.assertEqual(EnvironmentVariable.objects.count(), 1)
        self.assertEqual(EnvironmentVariable.objects.first().name, 'MYTOKEN')
        self.assertEqual(EnvironmentVariable.objects.first().value, "'string here'")

        data = {
            'name': 'ESCAPED',
            'value': r'string escaped here: #$\1[]{}\|',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        form.save()

        self.assertEqual(EnvironmentVariable.objects.count(), 2)
        self.assertEqual(EnvironmentVariable.objects.first().name, 'ESCAPED')
        self.assertEqual(EnvironmentVariable.objects.first().value, r"'string escaped here: #$\1[]{}\|'")
    def test_use_invalid_names(self):
        data = {
            'name': 'VARIABLE WITH SPACES',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't contain spaces",
            form.errors['name'],
        )

        data = {
            'name': 'READTHEDOCS__INVALID',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't start with READTHEDOCS",
            form.errors['name'],
        )

        data = {
            'name': 'INVALID_CHAR*',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            'Only letters, numbers and underscore are allowed',
            form.errors['name'],
        )

        data = {
            'name': '__INVALID',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            "Variable name can't start with __ (double underscore)",
            form.errors['name'],
        )

        get(EnvironmentVariable, name='EXISTENT_VAR', project=self.project)
        data = {
            'name': 'EXISTENT_VAR',
            'value': 'string here',
        }
        form = EnvironmentVariableForm(data, project=self.project)
        self.assertFalse(form.is_valid())
        self.assertIn(
            'There is already a variable with this name for this project',
            form.errors['name'],
        )