Merge pull request #2574 from rtfd/fix-translation-model
Stop cascading delete on translation deletionhotfix-virtualenv-no-downlaod
commit
71acc78ecd
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('projects', '0017_add_domain_https'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='project',
|
||||
name='main_language_project',
|
||||
field=models.ForeignKey(related_name='translations', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='projects.Project', null=True),
|
||||
),
|
||||
]
|
|
@ -242,6 +242,7 @@ class Project(models.Model):
|
|||
# A subproject pointed at its main language, so it can be tracked
|
||||
main_language_project = models.ForeignKey('self',
|
||||
related_name='translations',
|
||||
on_delete=models.SET_NULL,
|
||||
blank=True, null=True)
|
||||
|
||||
# Version State
|
||||
|
|
|
@ -48,6 +48,26 @@ class TestProject(TestCase):
|
|||
set(translation_ids_from_orm)
|
||||
)
|
||||
|
||||
def test_translation_delete(self):
|
||||
"""Ensure translation deletion doesn't cascade up to main project"""
|
||||
# In this scenario, a user has created a project and set the translation
|
||||
# to another project. If the user deletes this new project, the delete
|
||||
# operation shouldn't cascade up to the main project, and should instead
|
||||
# set None on the relation.
|
||||
project_keep = get(Project)
|
||||
project_delete = get(Project)
|
||||
project_delete.translations.add(project_keep)
|
||||
self.assertTrue(Project.objects.filter(pk=project_keep.pk).exists())
|
||||
self.assertTrue(Project.objects.filter(pk=project_delete.pk).exists())
|
||||
self.assertEqual(
|
||||
Project.objects.get(pk=project_keep.pk).main_language_project,
|
||||
project_delete
|
||||
)
|
||||
project_delete.delete()
|
||||
self.assertFalse(Project.objects.filter(pk=project_delete.pk).exists())
|
||||
self.assertTrue(Project.objects.filter(pk=project_keep.pk).exists())
|
||||
self.assertIsNone(Project.objects.get(pk=project_keep.pk).main_language_project)
|
||||
|
||||
def test_token(self):
|
||||
r = self.client.get('/api/v2/project/6/token/', {})
|
||||
resp = json.loads(r.content)
|
||||
|
|
Loading…
Reference in New Issue