Source code for aiida.backends.djsite.db.subtests.migrations.test_migrations_0040_data_migration_legacy_process_attributes

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida-core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
# pylint: disable=import-error,no-name-in-module,invalid-name
"""Tests for the migrations of legacy process attributes."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from aiida.backends.djsite.db.subtests.migrations.test_migrations_common import TestMigrations


[docs]class TestLegacyProcessAttributeDataMigration(TestMigrations): """Test the migration that performs a data migration of legacy `JobCalcState`.""" migrate_from = '0039_reset_hash' migrate_to = '0040_data_migration_legacy_process_attributes'
[docs] def setUpBeforeMigration(self): node_process = self.DbNode( node_type='process.calculation.calcjob.CalcJobNode.', user_id=self.default_user.id, attributes={ 'process_state': 'finished', '_sealed': True, '_finished': True, '_failed': False, '_aborted': False, '_do_abort': False, } ) node_process.save() self.node_process_id = node_process.id # This is an "active" modern process, due to its `process_state` and should *not* receive the `sealed` attribute node_process_active = self.DbNode( node_type='process.calculation.calcjob.CalcJobNode.', user_id=self.default_user.id, attributes={ 'process_state': 'created', '_finished': True, '_failed': False, '_aborted': False, '_do_abort': False, } ) node_process_active.save() self.node_process_active_id = node_process_active.id # Note that `Data` nodes should not have these attributes in real databases but the migration explicitly # excludes data nodes, which is what this test is verifying, by checking they are not deleted node_data = self.DbNode( node_type='data.dict.Dict.', user_id=self.default_user.id, attributes={ '_sealed': True, '_finished': True, '_failed': False, '_aborted': False, '_do_abort': False, } ) node_data.save() self.node_data_id = node_data.id
[docs] def test_data_migrated(self): """Verify that the correct attributes are removed.""" deleted_keys = ['_sealed', '_finished', '_failed', '_aborted', '_do_abort'] node_process = self.load_node(self.node_process_id) self.assertEqual(node_process.attributes['sealed'], True) for key in deleted_keys: self.assertNotIn(key, node_process.attributes) node_process_active = self.load_node(self.node_process_active_id) self.assertNotIn('sealed', node_process_active.attributes) for key in deleted_keys: self.assertNotIn(key, node_process_active.attributes) node_data = self.load_node(self.node_data_id) self.assertEqual(node_data.attributes.get('sealed', None), None) for key in deleted_keys: self.assertIn(key, node_data.attributes)