Skip to content
This repository has been archived by the owner on Feb 19, 2021. It is now read-only.

Commit

Permalink
Merge pull request #247 from danielquinn/issue/235
Browse files Browse the repository at this point in the history
Allow correspondents to be deleted without deleting their documents
  • Loading branch information
danielquinn authored Jul 15, 2017
2 parents ede2743 + 347986a commit e293f70
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 2 deletions.
7 changes: 6 additions & 1 deletion docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ Changelog
#########

* 0.7.0
* **Potentially breaking change**: As per `#235`_, Paperless will no longer
automatically delete documents attached to correspondents when those
correspondents are themselves deleted. This was Django's default
behaviour, but didn't make much sense in Paperless' case. Thanks to
`Thomas Brueggemann`_ and `David Martin`_ for their input on this one.
* Fix for `#232`_ wherein Paperless wasn't recognising ``.tif`` files
properly. Thanks to `ayounggun`_ for reporting this one and to
`Kusti Skytén`_ for posting the correct solution in the Github issue.
Expand Down Expand Up @@ -264,5 +269,5 @@ Changelog
.. _#229: https://github.com/danielquinn/paperless/pull/229
.. _#230: https://github.com/danielquinn/paperless/pull/230
.. _#232: https://github.com/danielquinn/paperless/issues/232
.. _#235: https://github.com/danielquinn/paperless/issues/235
.. _#236: https://github.com/danielquinn/paperless/issues/236

1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pytz>=2016.10
gunicorn==19.6.0

# For the tests
factory-boy
pytest
pytest-django
pytest-sugar
Expand Down
21 changes: 21 additions & 0 deletions src/documents/migrations/0018_auto_20170715_1712.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-07-15 17:12
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('documents', '0017_auto_20170512_0507'),
]

operations = [
migrations.AlterField(
model_name='document',
name='correspondent',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='documents', to='documents.Correspondent'),
),
]
7 changes: 6 additions & 1 deletion src/documents/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,12 @@ class Document(models.Model):
TYPES = (TYPE_PDF, TYPE_PNG, TYPE_JPG, TYPE_GIF, TYPE_TIF,)

correspondent = models.ForeignKey(
Correspondent, blank=True, null=True, related_name="documents")
Correspondent,
blank=True,
null=True,
related_name="documents",
on_delete=models.SET_NULL
)

title = models.CharField(max_length=128, blank=True, db_index=True)

Expand Down
17 changes: 17 additions & 0 deletions src/documents/tests/factories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import factory

from ..models import Document, Correspondent


class CorrespondentFactory(factory.DjangoModelFactory):

class Meta:
model = Correspondent

name = factory.Faker("name")


class DocumentFactory(factory.DjangoModelFactory):

class Meta:
model = Document
31 changes: 31 additions & 0 deletions src/documents/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from django.test import TestCase

from ..models import Document, Correspondent
from .factories import DocumentFactory, CorrespondentFactory


class CorrespondentTestCase(TestCase):

def test___str__(self):
for s in ("test", "οχι", "test with fun_charÅc'\"terß"):
correspondent = CorrespondentFactory.create(name=s)
self.assertEqual(str(correspondent), s)


class DocumentTestCase(TestCase):

def test_correspondent_deletion_does_not_cascade(self):

self.assertEqual(Correspondent.objects.all().count(), 0)
correspondent = CorrespondentFactory.create()
self.assertEqual(Correspondent.objects.all().count(), 1)

self.assertEqual(Document.objects.all().count(), 0)
DocumentFactory.create(correspondent=correspondent)
self.assertEqual(Document.objects.all().count(), 1)
self.assertIsNotNone(Document.objects.all().first().correspondent)

correspondent.delete()
self.assertEqual(Correspondent.objects.all().count(), 0)
self.assertEqual(Document.objects.all().count(), 1)
self.assertIsNone(Document.objects.all().first().correspondent)

0 comments on commit e293f70

Please sign in to comment.