From a25af16089dd47f7f96feef4082c72fab53c0312 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Fri, 27 Oct 2023 17:59:26 +0900 Subject: [PATCH 1/7] Add load db test --- e2e_tests/test_standalone/test_study_list.py | 38 ++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index b0d4735e4..2c4dff2e8 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -1,3 +1,6 @@ +import os +import time + from playwright.sync_api import Page import pytest @@ -20,3 +23,38 @@ def test_home( title = element.text_content() assert title is not None assert title == "Optuna Dashboard (Wasm ver.)" + + +def test_load_storage( + page: Page, + server_url: str, +) -> None: + test_file = "e2etest.db" + + if os.path.exists(f"./{test_file}"): + os.remove(f"./{test_file}") + + def create_storage_file(): + import optuna + + storage = optuna.storages.RDBStorage(f"sqlite:///{test_file}") + study = optuna.create_study(study_name="single-objective", storage=storage) + + def objective(trial: optuna.Trial) -> float: + x1 = trial.suggest_float("x1", 0, 10) + x2 = trial.suggest_float("x2", 0, 10) + x3 = trial.suggest_categorical("x3", ["foo", "bar"]) + return (x1 - 2) ** 2 + (x2 - 5) ** 2 + + study.optimize(objective, n_trials=100) + + create_storage_file() + + url = f"{server_url}" + page.goto(url) + name = "Load an Optuna Storage Drag your SQLite3 file here or click to browse." + page.get_by_role("button", name=name).click() + + time.sleep(1) + page.get_by_role("button", name=name).set_input_files(f"./{test_file}") + os.remove(f"./{test_file}") From ba53fb86969b0c6938f21b6114572d4065613e7b Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Fri, 27 Oct 2023 19:01:41 +0900 Subject: [PATCH 2/7] Fix loading file --- e2e_tests/test_standalone/test_study_list.py | 33 +++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index 2c4dff2e8..77bfe542d 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -1,5 +1,4 @@ import os -import time from playwright.sync_api import Page import pytest @@ -29,21 +28,23 @@ def test_load_storage( page: Page, server_url: str, ) -> None: - test_file = "e2etest.db" + test_file = "./e2etest.db" + current_dir = os.getcwd() + path = os.path.join(current_dir, test_file) + study_name = "single-objective" - if os.path.exists(f"./{test_file}"): - os.remove(f"./{test_file}") + if os.path.exists(path): + os.remove(path) def create_storage_file(): import optuna storage = optuna.storages.RDBStorage(f"sqlite:///{test_file}") - study = optuna.create_study(study_name="single-objective", storage=storage) + study = optuna.create_study(study_name=study_name, storage=storage) def objective(trial: optuna.Trial) -> float: x1 = trial.suggest_float("x1", 0, 10) x2 = trial.suggest_float("x2", 0, 10) - x3 = trial.suggest_categorical("x3", ["foo", "bar"]) return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective, n_trials=100) @@ -52,9 +53,19 @@ def objective(trial: optuna.Trial) -> float: url = f"{server_url}" page.goto(url) - name = "Load an Optuna Storage Drag your SQLite3 file here or click to browse." - page.get_by_role("button", name=name).click() + with page.expect_file_chooser() as fc_info: + page.get_by_role( + "button", name="Load an Optuna Storage Drag your SQLite3 file here or click to browse." + ).click() + file_chooser = fc_info.value + file_chooser.set_files(path) - time.sleep(1) - page.get_by_role("button", name=name).set_input_files(f"./{test_file}") - os.remove(f"./{test_file}") + page.get_by_role("link", name=study_name).click() + + element = page.query_selector(".MuiTypography-root") + assert element is not None + title = element.text_content() + assert title is not None + assert title == "Optuna Dashboard" + + os.remove(path) From 552e52fdbe627766f80ee74365b84c34015102ae Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Mon, 20 Nov 2023 21:01:12 +0900 Subject: [PATCH 3/7] Use tempfile for sqlite --- e2e_tests/test_standalone/test_study_list.py | 51 +++++++++----------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index 77bfe542d..c3b17f3e6 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -1,4 +1,5 @@ import os +import tempfile from playwright.sync_api import Page import pytest @@ -28,18 +29,14 @@ def test_load_storage( page: Page, server_url: str, ) -> None: - test_file = "./e2etest.db" current_dir = os.getcwd() - path = os.path.join(current_dir, test_file) study_name = "single-objective" + url = f"{server_url}" - if os.path.exists(path): - os.remove(path) - - def create_storage_file(): + def create_storage_file(filename: str): import optuna - storage = optuna.storages.RDBStorage(f"sqlite:///{test_file}") + storage = optuna.storages.RDBStorage(f"sqlite:///{filename}") study = optuna.create_study(study_name=study_name, storage=storage) def objective(trial: optuna.Trial) -> float: @@ -49,23 +46,23 @@ def objective(trial: optuna.Trial) -> float: study.optimize(objective, n_trials=100) - create_storage_file() - - url = f"{server_url}" - page.goto(url) - with page.expect_file_chooser() as fc_info: - page.get_by_role( - "button", name="Load an Optuna Storage Drag your SQLite3 file here or click to browse." - ).click() - file_chooser = fc_info.value - file_chooser.set_files(path) - - page.get_by_role("link", name=study_name).click() - - element = page.query_selector(".MuiTypography-root") - assert element is not None - title = element.text_content() - assert title is not None - assert title == "Optuna Dashboard" - - os.remove(path) + with tempfile.NamedTemporaryFile() as fp: + filename = fp.name + path = os.path.join(current_dir, filename) + create_storage_file(filename) + page.goto(url) + with page.expect_file_chooser() as fc_info: + page.get_by_role( + "button", + name="Load an Optuna Storage Drag your SQLite3 file here or click to browse.", + ).click() + file_chooser = fc_info.value + file_chooser.set_files(path) + + page.get_by_role("link", name=study_name).click() + + element = page.query_selector(".MuiTypography-root") + assert element is not None + title = element.text_content() + assert title is not None + assert title == "Optuna Dashboard" From 04215cdd682ef72d28c8d314e8b309d845478fd6 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Mon, 20 Nov 2023 21:58:44 +0900 Subject: [PATCH 4/7] Add skip_compatibility_check --- .github/workflows/e2e-standalone-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-standalone-tests.yml b/.github/workflows/e2e-standalone-tests.yml index 2de6d6107..49839e4b0 100644 --- a/.github/workflows/e2e-standalone-tests.yml +++ b/.github/workflows/e2e-standalone-tests.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - optuna-version: ['optuna==2.10.0', 'git+https://github.com/optuna/optuna.git'] + optuna-version: ['git+https://github.com/optuna/optuna.git'] steps: - uses: actions/checkout@v3 From e8251c8b52793a33496f5196c56120c8fa93ce10 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Mon, 1 Jan 2024 12:41:05 +0900 Subject: [PATCH 5/7] Follow review comments --- e2e_tests/test_standalone/test_study_list.py | 40 +++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index c3b17f3e6..c8bbe0a67 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -29,7 +29,6 @@ def test_load_storage( page: Page, server_url: str, ) -> None: - current_dir = os.getcwd() study_name = "single-objective" url = f"{server_url}" @@ -46,23 +45,28 @@ def objective(trial: optuna.Trial) -> float: study.optimize(objective, n_trials=100) - with tempfile.NamedTemporaryFile() as fp: - filename = fp.name - path = os.path.join(current_dir, filename) - create_storage_file(filename) - page.goto(url) - with page.expect_file_chooser() as fc_info: - page.get_by_role( - "button", - name="Load an Optuna Storage Drag your SQLite3 file here or click to browse.", - ).click() - file_chooser = fc_info.value - file_chooser.set_files(path) + with tempfile.TemporaryDirectory() as dir: + with tempfile.NamedTemporaryFile() as fp: + filename = fp.name + path = os.path.join(dir, filename) + create_storage_file(filename) + page.goto(url) + with page.expect_file_chooser() as fc_info: + page.get_by_role( + "button", + name="Load an Optuna Storage Drag your SQLite3 file here or click to browse.", + ).click() + file_chooser = fc_info.value + file_chooser.set_files(path) page.get_by_role("link", name=study_name).click() + + def count_components(page: Page, component_name: str): + component_count = page.evaluate(f'''() => {{ + const components = document.querySelectorAll('.{component_name}'); + return components.length; + }}''') + return component_count - element = page.query_selector(".MuiTypography-root") - assert element is not None - title = element.text_content() - assert title is not None - assert title == "Optuna Dashboard" + count = count_components(page, "MuiCardContent-root") + assert count is 6 From 1e7b8c0ea3ee000496a65c27ce0a01b3b10421b7 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Mon, 1 Jan 2024 12:41:22 +0900 Subject: [PATCH 6/7] Follow review comments --- e2e_tests/test_standalone/test_study_list.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index c8bbe0a67..bf424334c 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -60,12 +60,14 @@ def objective(trial: optuna.Trial) -> float: file_chooser.set_files(path) page.get_by_role("link", name=study_name).click() - + def count_components(page: Page, component_name: str): - component_count = page.evaluate(f'''() => {{ + component_count = page.evaluate( + f"""() => {{ const components = document.querySelectorAll('.{component_name}'); return components.length; - }}''') + }}""" + ) return component_count count = count_components(page, "MuiCardContent-root") From 8cff2c4fc80efb44a04757cca597032dab630ee4 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Mon, 1 Jan 2024 12:43:48 +0900 Subject: [PATCH 7/7] Fix flake8 --- e2e_tests/test_standalone/test_study_list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e_tests/test_standalone/test_study_list.py b/e2e_tests/test_standalone/test_study_list.py index bf424334c..883a17e78 100644 --- a/e2e_tests/test_standalone/test_study_list.py +++ b/e2e_tests/test_standalone/test_study_list.py @@ -71,4 +71,4 @@ def count_components(page: Page, component_name: str): return component_count count = count_components(page, "MuiCardContent-root") - assert count is 6 + assert count == 6