Source code for aiida.backends.tests.cmdline.params.types.test_identifier

# -*- 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               #
###########################################################################
"""Tests for the `IdentifierParamType`."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

import click

from aiida.backends.testbase import AiidaTestCase
from aiida.cmdline.params.types import IdentifierParamType, NodeParamType
from aiida.orm import Bool, Float, Int


[docs]class TestIdentifierParamType(AiidaTestCase): """Tests for the `IdentifierParamType`."""
[docs] def test_base_class(self): """ The base class is abstract and should not be constructable """ with self.assertRaises(TypeError): IdentifierParamType() # pylint: disable=abstract-class-instantiated
[docs] def test_identifier_sub_invalid_type(self): """ The sub_classes keyword argument should expect a tuple """ with self.assertRaises(TypeError): NodeParamType(sub_classes='aiida.data:structure') with self.assertRaises(TypeError): NodeParamType(sub_classes=(None,))
[docs] def test_identifier_sub_invalid_entry_point(self): """ The sub_classes keyword argument should expect a tuple of valid entry point strings """ with self.assertRaises(ValueError): NodeParamType(sub_classes=('aiida.data.structure',)) with self.assertRaises(ValueError): NodeParamType(sub_classes=('aiida.data:not_existent',))
[docs] def test_identifier_sub_classes(self): """ The sub_classes keyword argument should allow to narrow the scope of the query based on the orm class """ node_bool = Bool(True).store() node_float = Float(0.0).store() node_int = Int(1).store() param_type_normal = NodeParamType() param_type_scoped = NodeParamType(sub_classes=('aiida.data:bool', 'aiida.data:float')) # For the base NodeParamType all node types should be matched self.assertEqual(param_type_normal.convert(str(node_bool.pk), None, None).uuid, node_bool.uuid) self.assertEqual(param_type_normal.convert(str(node_float.pk), None, None).uuid, node_float.uuid) self.assertEqual(param_type_normal.convert(str(node_int.pk), None, None).uuid, node_int.uuid) # The scoped NodeParamType should only match Bool and Float self.assertEqual(param_type_scoped.convert(str(node_bool.pk), None, None).uuid, node_bool.uuid) self.assertEqual(param_type_scoped.convert(str(node_float.pk), None, None).uuid, node_float.uuid) # The Int should not be found and raise with self.assertRaises(click.BadParameter): param_type_scoped.convert(str(node_int.pk), None, None)