def test_user_not_owner_cannot_perform_operation(self):
        self.mock_request.user = self.users["user"]

        with self.assertRaises(AccessControlError):
            data_structure_element_api.get_root_element(
                self.fixtures.data_structure_element_collection["1121"],
                self.mock_request,
            )
 def _get_curate_datastructure_from_module_id(module_id, request):
     module_element = data_structure_element_api.get_by_id(module_id, request)
     data_structure_element = data_structure_element_api.get_root_element(
         module_element, request
     )
     return curate_data_structure_api.get_by_data_structure_element_root_id(
         data_structure_element, request.user
     )
    def test_superuser_can_perform_operation(self):
        self.mock_request.user = self.users["superuser"]

        result = data_structure_element_api.get_root_element(
            self.fixtures.data_structure_element_collection["1121"], self.mock_request
        )

        self.assertEquals(
            result,
            self.fixtures.data_structure_element_collection["root"],
        )
Exemplo n.º 4
0
    def test_get_root_element_returns_root_for_root(self):
        # Arrange
        mock_request = Mock(spec=HttpRequest)
        mock_request.user = self.fixtures.default_owner_with_perm

        # Act
        result = data_structure_element_api.get_root_element(
            self.fixtures.data_structure_element_collection["root"],
            mock_request)
        # Assert
        self.assertEqual(
            result, self.fixtures.data_structure_element_collection["root"])
Exemplo n.º 5
0
    def test_get_root_element_return_same_root_for_elements_of_same_tree(self):
        # Arrange
        mock_request = Mock(spec=HttpRequest)
        mock_request.user = self.fixtures.default_owner_with_perm

        for element in self.fixtures.data_structure_element_collection.values(
        ):
            # Act
            result = data_structure_element_api.get_root_element(
                element, mock_request)
            # Assert
            self.assertEqual(
                result,
                self.fixtures.data_structure_element_collection["root"])
Exemplo n.º 6
0
 def test_get_root_element_return_same_root_for_elements_of_same_tree(self):
     for element in [
             self.fixture.data_structure_element_root,
             self.fixture.data_structure_element_1,
             self.fixture.data_structure_element_2,
             self.fixture.data_structure_element_1_1,
             self.fixture.data_structure_element_1_1_1,
             self.fixture.data_structure_element_1_1_2,
             self.fixture.data_structure_element_1_1_3,
             self.fixture.data_structure_element_1_1_2_1
     ]:
         # Act
         result = api_data_structure_element.get_root_element(element)
         # Assert
         self.assertEqual(result, self.fixture.data_structure_element_root)
     for element in [
             self.fixture.data_structure_element_root_2,
             self.fixture.data_structure_element_test
     ]:
         # Act
         result = api_data_structure_element.get_root_element(element)
         # Assert
         self.assertEqual(result,
                          self.fixture.data_structure_element_root_2)
Exemplo n.º 7
0
    def _retrieve_data(self, request):
        """

        Args:
            request:

        Returns:

        """
        data = ""
        if request.method == "GET":
            try:
                # get module id
                module_id = request.GET["module_id"]
                # get module element form module id
                module = data_structure_element_api.get_by_id(
                    module_id, request)
                # get key id form module
                key_id = module.options["params"]["key"]

                # get XML document root element from module element
                root_element = data_structure_element_api.get_root_element(
                    module, request)
                try:
                    # get auto key manager from db
                    auto_key = auto_key_api.get_by_root(root_element)
                except:
                    # create auto key manager if doesn't exist
                    auto_key = AutoKey(root=root_element)
                    auto_key_api.upsert(auto_key)

                # if key id not already present in auto key manager
                if key_id not in list(auto_key.keys.keys()):
                    # initialize key id entry
                    auto_key.keys[key_id] = []

                # if module id not already present in auto key manager
                if str(module_id) not in auto_key.keys[key_id]:
                    # add module id to auto key manager
                    auto_key.keys[key_id].append(str(module_id))

                # update auto key
                auto_key_api.upsert(auto_key)

                # if data are present
                if "data" in request.GET:
                    # set the key coming from data
                    data = request.GET["data"]
                else:
                    # get the list of values for this key
                    values = []
                    module_ids = auto_key.keys[key_id]
                    for key_module_id in module_ids:
                        try:
                            key_module = data_structure_element_api.get_by_id(
                                key_module_id, request)
                            if key_module.options["data"] is not None:
                                values.append(key_module.options["data"])
                        except Exception as e:
                            logger.warning(
                                "_retrieve_data threw an exception: {0}".
                                format(str(e)))

                    # generate next key
                    data = str(self.key_gen_func(values))
            except Exception as e:
                raise ModuleError(
                    "An unexpected error occurred in AutoKeyModule: " + str(e))

        return data
    def _retrieve_data(self, request):
        """Retrieve module's data

        Args:
            request:

        Returns:

        """
        data = ""
        if request.method == "GET":
            # look for existing values
            try:
                # get module id
                module_id = request.GET["module_id"]
                # get module element from module id
                module = data_structure_element_api.get_by_id(
                    module_id, request)
                # get keyref id in moduke
                keyref_id = module.options["params"]["keyref"]

                # get XML document root element
                root_element = data_structure_element_api.get_root_element(
                    module, request)
                try:
                    # get auto keyref manager by root
                    auto_keyref = auto_keyref_api.get_by_root(root_element)
                except:
                    # if auto keyref manager does not exist, create it
                    auto_keyref = AutoKeyref(root=root_element)
                    auto_keyref_api.upsert(auto_keyref)

                # if keyref id not already present
                if keyref_id not in list(auto_keyref.keyrefs.keys()):
                    # initialize keyref entry
                    auto_keyref.keyrefs[keyref_id] = []

                # if module id not already registered
                if str(module_id) not in auto_keyref.keyrefs[keyref_id]:
                    # add module id to keyref manager
                    auto_keyref.keyrefs[keyref_id].append(str(module_id))

                # update auto keyref
                auto_keyref_api.upsert(auto_keyref)

                # get key id from root element
                key_id = root_element.options["keyrefs"][keyref_id]["refer"]

                try:
                    # get auto key
                    auto_key = auto_key_api.get_by_root(root_element)
                    # get list of module ids for the given key id
                    modules_ids = auto_key.keys[key_id]
                except:
                    # no auto key found, create an empty list of module ids
                    modules_ids = []

                self.values = []
                for key_module_id in modules_ids:
                    key_module = data_structure_element_api.get_by_id(
                        key_module_id, request)
                    if key_module.options["data"] is not None:
                        self.values.append(key_module.options["data"])

                # get data from request
                if "data" in request.GET:
                    data = request.GET["data"]
                # get data from db
                elif "data" in module.options and module.options[
                        "data"] is not None:
                    data = str(module.options["data"])
            except Exception as e:
                raise ModuleError(
                    "An unexpected error occurred in AutoKeyrefModule: " +
                    str(e))

        elif request.method == "POST":
            if "data" in request.POST:
                data = request.POST["data"]

        return data
Exemplo n.º 9
0
 def test_get_root_element_returns_root_for_root(self):
     # Act
     result = api_data_structure_element.get_root_element(
         self.fixture.data_structure_element_root)
     # Assert
     self.assertEqual(result, self.fixture.data_structure_element_root)