Skip to content

Commit 14adb20

Browse files
authored
Merge pull request readthedocs#3387 from rtfd/fix-domain-editing
Fix issue where you couldn't edit your canonical domain.
2 parents 3cfba49 + c6cf8f0 commit 14adb20

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

readthedocs/projects/forms.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,9 +570,10 @@ def clean_domain(self):
570570

571571
def clean_canonical(self):
572572
canonical = self.cleaned_data['canonical']
573+
_id = self.initial.get('id')
573574
if canonical and Domain.objects.filter(
574-
project=self.project, canonical=True).exclude(
575-
domain=self.cleaned_data['domain']).exists():
575+
project=self.project, canonical=True
576+
).exclude(pk=_id).exists():
576577
raise forms.ValidationError(
577578
_('Only 1 Domain can be canonical at a time.'))
578579
return canonical

readthedocs/rtd_tests/tests/test_domains.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,26 @@ def test_https(self):
8181
project=self.project)
8282
self.assertFalse(form.is_valid())
8383

84+
def test_canonical_change(self):
85+
"""Make sure canonical can be properly changed"""
86+
form = DomainForm({'domain': 'example.com', 'canonical': True},
87+
project=self.project)
88+
self.assertTrue(form.is_valid())
89+
domain = form.save()
90+
self.assertEqual(domain.domain, 'example.com')
91+
92+
form = DomainForm({'domain': 'example2.com', 'canonical': True},
93+
project=self.project)
94+
self.assertFalse(form.is_valid())
95+
self.assertEqual(form.errors['canonical'][0], 'Only 1 Domain can be canonical at a time.')
96+
97+
form = DomainForm({'domain': 'example2.com', 'canonical': True},
98+
project=self.project,
99+
instance=domain)
100+
self.assertTrue(form.is_valid())
101+
domain = form.save()
102+
self.assertEqual(domain.domain, 'example2.com')
103+
84104

85105
class TestAPI(TestCase):
86106

0 commit comments

Comments
 (0)