Exemplo n.º 1
0
def handle_dimensions(
    connector: NomisApiConnector,
    transformations: DatasetTransformations,
    key: Union[str, None],
) -> None:
    """
    Assign dimensions to the dataset.

    :param connector: An open, initialised instance of `NomisApiConnector`.
    :param transformations: An initialised instance of `DatasetTransformations` with a valid table attribute.
    :param key: Key value for dimensions.
    """

    logger.debug("\n-----ASSIGNING DIMENSIONS-----")
    connector.assign_dimensions_to_dataset(
        args.dataset_id, transformations.assign_dimensions(key))
class TestDatasetTransformations(unittest.TestCase):
    def setUp(self) -> None:
        """Set up a valid instance of DatasetTransformation."""
        self.valid_dataset_transformations = DatasetTransformations(
            VALID_TABLE)

    def test_validate_table(self):
        """Test that an instance of DataTransformations is blocked when the table parameter is invalid
        """
        with self.assertRaises(LookupError):
            DatasetTransformations(INVALID_TABLE)
        with self.assertRaises(TypeError):
            DatasetTransformations({"dimensions": True})

    def test_dataset_creation(self) -> None:
        """Test the dataset_creation() method of the DatasetTransformations class by asserting that expected exceptions
        are raised on invalid parameters, and that on valid calls all returned values and types are as expected. Also 
        ensure that the method works as a staticmethod, i.e. is callable without creating an instance of the class.
        """
        # Ensure expected exceptions are raised upon invalid parameters
        with self.assertRaises(TypeError):
            self.valid_dataset_transformations.dataset_creation(VALID_ID, 42)
        with self.assertRaises(ValueError):
            self.valid_dataset_transformations.dataset_creation(
                "", VALID_TITLE)

        # Retrieve a dataset using valid strings as the dataset title and id
        ds = self.valid_dataset_transformations.dataset_creation(
            VALID_ID, VALID_TITLE)

        # Ensure use as a staticmethod works in the same way
        self.assertEqual(
            ds, DatasetTransformations.dataset_creation(VALID_ID, VALID_TITLE))

        # Value & Type check
        self.assertIsInstance(ds, dict)
        self.assertEqual(ds["id"], VALID_ID)
        self.assertEqual(ds["title"], VALID_TITLE)

    def test_variable_creation(self) -> None:
        """Test the variable_creation() method of the DatasetTransformations class by assuring that on the valid
        instances all types and values are as expected
        """
        # Retrieve variables using the valid pyjstat table and assert types/values are as expected
        varis = self.valid_dataset_transformations.variable_creation()
        self.assertIsInstance(varis, list)
        for var in varis:
            self.assertIsInstance(var, dict)
            self.assertTrue(var["name"] in self.valid_dataset_transformations.
                            table["dimension"])

    def test_category_creation(self) -> None:
        """Test the category_creation() method
        """
        # Check valid attempts
        cats = self.valid_dataset_transformations.category_creation(["10000"])
        self.assertIsInstance(cats, list)
        for cat in cats:
            self.assertIsInstance(cat, dict)

    def test_assign_dimensions(self) -> None:
        """Test the assign_dimensions() method
        """
        dims = self.valid_dataset_transformations.assign_dimensions("SEX")
        self.assertIsInstance(dims, list)
        for dim in dims:
            self.assertIsInstance(dim, dict)

    def test_observations(self) -> None:
        """Test the observations() method
        """
        with self.assertRaises(TypeError):
            self.valid_dataset_transformations.observations(12345)
        with self.assertRaises(ValueError):
            self.valid_dataset_transformations.observations("")
        obs = self.valid_dataset_transformations.observations(VALID_ID)
        self.assertIsInstance(obs, dict)
        self.assertEqual(obs["dataset"], VALID_ID)

    def test_variable_metadata_request(self):
        """Test the variable_metadata_request() method
        """
        with self.assertRaises(TypeError):
            self.valid_dataset_transformations.variable_metadata_request(
                VALID_UUID_MD)
        mds = self.valid_dataset_transformations.variable_metadata_request(
            [VALID_UUID_MD])
        self.assertIsInstance(mds, list)
        for md in mds:
            self.assertIsInstance(md, dict)
            self.assertEqual(md['belongsTo'], VALID_UUID_MD.uuid)