When changing document types, don't delete the old metadata that is
also found in the new document type. GitLab issue #421. Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -6,7 +6,10 @@ from django.test import override_settings
|
||||
|
||||
from common.tests import BaseTestCase
|
||||
from documents.models import DocumentType
|
||||
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL
|
||||
from documents.tests import (
|
||||
TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_PATH,
|
||||
TEST_DOCUMENT_TYPE_LABEL
|
||||
)
|
||||
|
||||
from ..models import MetadataType, DocumentMetadata
|
||||
|
||||
@@ -190,3 +193,107 @@ class MetadataTestCase(BaseTestCase):
|
||||
self.metadata_type.lookup = 'test1,test2'
|
||||
self.metadata_type.save()
|
||||
self.metadata_type.validate_value(document_type=None, value='test1')
|
||||
|
||||
def test_add_new_metadata_type_on_document_type_change(self):
|
||||
"""
|
||||
When switching document types, add the required metadata of the new
|
||||
document type, the value to the default of the metadata type.
|
||||
"""
|
||||
self.metadata_type.default = TEST_DEFAULT_VALUE
|
||||
self.metadata_type.save()
|
||||
|
||||
self.document_type_2 = DocumentType.objects.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
self.document_type_2.metadata.create(
|
||||
metadata_type=self.metadata_type, required=True
|
||||
)
|
||||
|
||||
self.document.set_document_type(document_type=self.document_type_2)
|
||||
|
||||
self.assertEqual(self.document.metadata.count(), 1)
|
||||
self.assertEqual(
|
||||
self.document.metadata.first().value, TEST_DEFAULT_VALUE
|
||||
)
|
||||
|
||||
def test_preserve_metadata_value_on_document_type_change(self):
|
||||
"""
|
||||
Preserve the document metadata that is present in the
|
||||
old and new document types
|
||||
"""
|
||||
document_metadata = DocumentMetadata(
|
||||
document=self.document, metadata_type=self.metadata_type,
|
||||
value=TEST_DEFAULT_VALUE
|
||||
)
|
||||
|
||||
document_metadata.full_clean()
|
||||
document_metadata.save()
|
||||
|
||||
self.document_type_2 = DocumentType.objects.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
self.document_type_2.metadata.create(metadata_type=self.metadata_type)
|
||||
|
||||
self.document.set_document_type(document_type=self.document_type_2)
|
||||
|
||||
self.assertEqual(self.document.metadata.count(), 1)
|
||||
self.assertEqual(
|
||||
self.document.metadata.first().value, TEST_DEFAULT_VALUE
|
||||
)
|
||||
self.assertEqual(
|
||||
self.document.metadata.first().metadata_type, self.metadata_type
|
||||
)
|
||||
|
||||
def test_delete_metadata_value_on_document_type_change(self):
|
||||
"""
|
||||
Delete the old document metadata whose types are not present in the
|
||||
new document type
|
||||
"""
|
||||
document_metadata = DocumentMetadata(
|
||||
document=self.document, metadata_type=self.metadata_type,
|
||||
value=TEST_DEFAULT_VALUE
|
||||
)
|
||||
|
||||
document_metadata.full_clean()
|
||||
document_metadata.save()
|
||||
|
||||
self.document_type_2 = DocumentType.objects.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
self.document.set_document_type(document_type=self.document_type_2)
|
||||
|
||||
self.assertEqual(self.document.metadata.count(), 0)
|
||||
|
||||
def test_duplicate_metadata_value_on_document_type_change(self):
|
||||
"""
|
||||
Delete the old document metadata whose types are not present in the
|
||||
new document type
|
||||
"""
|
||||
document_metadata = DocumentMetadata(
|
||||
document=self.document, metadata_type=self.metadata_type,
|
||||
value=TEST_DEFAULT_VALUE
|
||||
)
|
||||
|
||||
document_metadata.full_clean()
|
||||
document_metadata.save()
|
||||
|
||||
self.document_type_2 = DocumentType.objects.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
self.document_type_2.metadata.create(
|
||||
metadata_type=self.metadata_type, required=True
|
||||
)
|
||||
|
||||
self.document.set_document_type(document_type=self.document_type_2)
|
||||
|
||||
self.assertEqual(self.document.metadata.count(), 1)
|
||||
self.assertEqual(
|
||||
self.document.metadata.first().value, TEST_DEFAULT_VALUE
|
||||
)
|
||||
self.assertEqual(
|
||||
self.document.metadata.first().metadata_type, self.metadata_type
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user