Exemplo n.º 1
0
    def test_create_valid(self):
        name = self.dataset_populator.get_random_name()
        description = "A test role."
        payload = {
            "name": name,
            "description": description,
            "user_ids": [self.dataset_populator.user_id()],
        }
        response = self._post("roles", payload, admin=True, json=True)
        assert_status_code_is(response, 200)
        role = response.json()
        RolesApiTestCase.check_role_dict(role)

        assert role["name"] == name
        assert role["description"] == description

        user_roles_response = self._get("roles")
        with self._different_user():
            different_user_roles_response = self._get("roles")

        user_roles_response_ids = [r["id"] for r in user_roles_response.json()]
        different_user_roles_response_ids = [
            r["id"] for r in different_user_roles_response.json()
        ]

        # This new role is public, all users see it.
        assert role["id"] in user_roles_response_ids
        assert role["id"] in different_user_roles_response_ids
Exemplo n.º 2
0
    def test_create_valid(self):
        name = self.dataset_populator.get_random_name()
        description = "A test role."
        payload = {
            "name": name,
            "description": description,
            "user_ids": json.dumps([self.dataset_populator.user_id()]),
        }
        response = self._post("roles", payload, admin=True)
        assert_status_code_is(response, 200)
        # TODO: Why does this return a singleton list - that is bad - should be deprecated
        # and return a single role.
        role = response.json()[0]
        RolesApiTestCase.check_role_dict(role)

        assert role["name"] == name
        assert role["description"] == description

        user_roles_response = self._get("roles")
        with self._different_user():
            different_user_roles_response = self._get("roles")

        user_roles_response_ids = [r["id"] for r in user_roles_response.json()]
        different_user_roles_response_ids = [
            r["id"] for r in different_user_roles_response.json()
        ]

        # This new role is public, all users see it.
        assert role["id"] in user_roles_response_ids
        assert role["id"] in different_user_roles_response_ids
Exemplo n.º 3
0
 def check_roles_response(response):
     assert_status_code_is(response, 200)
     as_list = response.json()
     assert isinstance(as_list, list)
     assert len(as_list) > 0
     for role in as_list:
         RolesApiTestCase.check_role_dict(role)
Exemplo n.º 4
0
 def entry_point_target(self, entry_point_id):
     entry_point_access_response = self._get("entry_points/%s/access" %
                                             entry_point_id)
     api_asserts.assert_status_code_is(entry_point_access_response, 200)
     access_json = entry_point_access_response.json()
     api_asserts.assert_has_key(access_json, "target")
     return access_json["target"]
    def test_mapping_collection_states_running(self):
        history_id = self.current_history_id()
        input_collection = self.dataset_collection_populator.create_list_in_history(
            history_id, contents=["0", "1"]).json()
        running_inputs = {
            "input1": {
                'batch': True,
                'values': [{
                    "src": "hdca",
                    "id": input_collection["id"]
                }]
            },
            "sleep_time": 60,
        }
        running_response = self.dataset_populator.run_tool_raw(
            "cat_data_and_sleep",
            running_inputs,
            history_id,
        )
        try:
            assert_status_code_is(running_response, 200)
            running_hid = running_response.json(
            )["implicit_collections"][0]["hid"]

            # sleep really shouldn't be needed :(
            time.sleep(1)

            self.home()

            self.history_panel_wait_for_hid_state(running_hid, "running", 1)
            self.screenshot("history_panel_collections_state_mapping_running")
        finally:
            for job in running_response.json()["jobs"]:
                self.dataset_populator.cancel_job(job["id"])
Exemplo n.º 6
0
    def test_output_collection_states_running(self):
        history_id = self.current_history_id()
        running_inputs = {
            "sleep_time": 180,
        }
        running_response = self.dataset_populator.run_tool(
            "collection_creates_dynamic_nested",
            running_inputs,
            history_id,
            assert_ok=False,
        )
        assert_status_code_is(running_response, 200)

        payload = running_response.json()
        assert payload["output_collections"]
        assert payload["jobs"]
        assert len(payload["jobs"]) > 0
        assert len(["output_collections"]) > 0

        running_hid = payload["output_collections"][0]["hid"]
        assert running_hid

        try:
            if not self.is_beta_history():
                # sleep really shouldn't be needed :(
                time.sleep(1)
                self.home()
            self.history_panel_wait_for_hid_state(running_hid, "running")
            self.screenshot("history_panel_collections_state_running")
        finally:
            for job in payload["jobs"]:
                self.dataset_populator.cancel_job(job["id"])
Exemplo n.º 7
0
    def test_vault_secret_per_user_in_file_source(self):
        """
        This file source performs a user vault lookup. The secret stored for the first user is a
        valid path and should succeed, while the second user's stored secret should fail.
        """
        with self._different_user(email=self.USER_1_APP_VAULT_ENTRY):
            app = self._app
            user = app.model.context.query(app.model.User).filter(
                app.model.User.email == self.USER_1_APP_VAULT_ENTRY).first()
            user_vault = UserVaultWrapper(self._app.vault, user)
            # use a valid symlink path so the posix list succeeds
            user_vault.write_secret(
                'posix/root_path',
                app.config.user_library_import_symlink_allowlist[0])

            data = {"target": "gxfiles://test_user_vault"}
            list_response = self.galaxy_interactor.get("remote_files", data)
            api_asserts.assert_status_code_is_ok(list_response)
            remote_files = list_response.json()
            print(remote_files)

        with self._different_user(email=self.USER_2_APP_VAULT_ENTRY):
            app = self._app
            user = app.model.context.query(app.model.User).filter(
                app.model.User.email == self.USER_2_APP_VAULT_ENTRY).first()
            user_vault = UserVaultWrapper(self._app.vault, user)
            # use an invalid symlink path so the posix list fails
            user_vault.write_secret('posix/root_path', '/invalid/root')

            data = {"target": "gxfiles://test_user_vault"}
            list_response = self.galaxy_interactor.get("remote_files", data)
            api_asserts.assert_status_code_is(list_response, 404)
Exemplo n.º 8
0
    def test_show_error_codes(self):
        # Bad role ids are 400.
        response = self._get("roles/badroleid")
        assert_status_code_is(response, 400)

        # Trying to access roles are errors - should probably be 403 not 400 though?
        with self._different_user():
            different_user_role_id = self.dataset_populator.user_private_role_id(
            )
        response = self._get(f"roles/{different_user_role_id}")
        assert_status_code_is(response, 400)
Exemplo n.º 9
0
 def test_501_on_download_pdf_when_service_unavailable(self):
     configuration = self.dataset_populator.get_configuration()
     can_produce_markdown = configuration["markdown_to_pdf_available"]
     if can_produce_markdown:
         raise SkipTest("Skipping test because server does implement markdown conversion to PDF")
     page_request = self._test_page_payload(slug="md-page-to-pdf", content_format="markdown")
     page_response = self._post("pages", page_request, json=True)
     self._assert_status_code_is(page_response, 200)
     page_id = page_response.json()['id']
     pdf_response = self._get(f"pages/{page_id}.pdf")
     api_asserts.assert_status_code_is(pdf_response, 501)
     api_asserts.assert_error_code_is(pdf_response, error_codes.error_codes_by_name["SERVER_NOT_CONFIGURED_FOR_REQUEST"])
Exemplo n.º 10
0
 def repository_operation(self,
                          operation,
                          owner,
                          name,
                          changeset,
                          tool_shed_url='https://toolshed.g2.bx.psu.edu'):
     payload = {
         'tool_shed_url': tool_shed_url,
         'name': name,
         'owner': owner,
         'changeset_revision': changeset
     }
     create_response = operation(payload)
     assert_status_code_is(create_response, 200)
     return create_response.json()
Exemplo n.º 11
0
 def test_pdf_when_service_available(self):
     configuration = self.dataset_populator.get_configuration()
     can_produce_markdown = configuration["markdown_to_pdf_available"]
     if not can_produce_markdown:
         raise SkipTest(
             "Skipping test because server does not implement markdown conversion to PDF"
         )
     page_request = self._test_page_payload(slug="md-page-to-pdf",
                                            content_format="markdown")
     page_response = self._post("pages", page_request, json=True)
     self._assert_status_code_is(page_response, 200)
     page_id = page_response.json()['id']
     pdf_response = self._get(f"pages/{page_id}.pdf")
     api_asserts.assert_status_code_is(pdf_response, 200)
     assert "application/pdf" in pdf_response.headers['content-type']
     assert pdf_response.content[0:4] == b"%PDF"
Exemplo n.º 12
0
    def test_list_and_show(self):
        def check_roles_response(response):
            assert_status_code_is(response, 200)
            as_list = response.json()
            assert isinstance(as_list, list)
            assert len(as_list) > 0
            for role in as_list:
                RolesApiTestCase.check_role_dict(role)

        user_role_id = self.dataset_populator.user_private_role_id()
        with self._different_user():
            different_user_role_id = self.dataset_populator.user_private_role_id(
            )

        admin_roles_response = self._get("roles", admin=True)
        user_roles_response = self._get("roles")

        check_roles_response(admin_roles_response)
        check_roles_response(user_roles_response)

        admin_roles_response_ids = [
            r["id"] for r in admin_roles_response.json()
        ]
        user_roles_response_ids = [r["id"] for r in user_roles_response.json()]

        # User can see their own private role not the other users, admin can see both.
        assert user_role_id in user_roles_response_ids
        assert different_user_role_id not in user_roles_response_ids

        assert user_role_id in admin_roles_response_ids
        assert different_user_role_id in admin_roles_response_ids

        # Check showing a valid, role.
        role_response = self._get(f"roles/{user_role_id}")
        assert_status_code_is(role_response, 200)
        role = role_response.json()
        RolesApiTestCase.check_role_dict(role, assert_id=user_role_id)
Exemplo n.º 13
0
    def test_create_invalid_params(self):
        # In theory these low-level validation test cases could be handled in more
        # of a unit test style but it makes sense during the transition from wsgi to
        # asgi to have some tests that validate the whole pipeline is being integrated
        # properly in terms of exception handling.

        # Test missing description
        name = self.dataset_populator.get_random_name()
        description = "A test role."
        payload = {
            "name": name,
            "user_ids": [self.dataset_populator.user_id()],
        }
        response = self._post("roles", payload, admin=True, json=True)
        assert_status_code_is(response, 400)
        assert_error_code_is(
            response, error_codes.
            error_codes_by_name['USER_REQUEST_MISSING_PARAMETER'].code)
        assert "description" in response.json()["err_msg"]

        # Test missing name
        payload = {
            "name": None,
            "description": description,
            "user_ids": [self.dataset_populator.user_id()],
        }
        response = self._post("roles", payload, admin=True, json=True)
        assert_status_code_is(response, 400)
        assert_error_code_is(
            response, error_codes.
            error_codes_by_name['USER_REQUEST_MISSING_PARAMETER'].code)
        assert "name" in response.json()["err_msg"]

        # Test invalid type for name
        payload = {
            "name": ["a test", "name"],
            "description": description,
            "user_ids": [self.dataset_populator.user_id()],
        }
        response = self._post("roles", payload, admin=True, json=True)
        assert_status_code_is(response, 400)
        assert_error_code_is(
            response, error_codes.
            error_codes_by_name['USER_REQUEST_INVALID_PARAMETER'].code)
        assert "name" in response.json()["err_msg"]
        assert "validation_errors" in response.json()
Exemplo n.º 14
0
 def test_create_only_admin(self):
     response = self._post("roles", json=True)
     assert_status_code_is(response, 403)
     response_err = response.json()
     assert response_err["err_code"] == 403006
     assert "administrator" in response_err["err_msg"]
Exemplo n.º 15
0
 def entry_points_for_job(self, job_id):
     entry_points_response = self._get("entry_points?job_id=%s" % job_id)
     api_asserts.assert_status_code_is(entry_points_response, 200)
     return entry_points_response.json()
Exemplo n.º 16
0
 def _assert_status_code_is(self, response, expected_status_code):
     assert_status_code_is(response, expected_status_code)
Exemplo n.º 17
0
 def _assert_access_forbidden_response(self, response):
     api_asserts.assert_status_code_is(response, 403)
Exemplo n.º 18
0
 def test_create_only_admin(self):
     response = self._post("roles")
     assert_status_code_is(response, 403)