From 414737fd482fa8462e3389dd48009b88b753e2f1 Mon Sep 17 00:00:00 2001 From: shenjianZ Date: Mon, 15 Sep 2025 17:41:07 +0800 Subject: [PATCH] fix and add som usecases --- .gitignore | 3 +- PixPin_2025-09-15_15-18-02.png | Bin 0 -> 25741 bytes config/dev_env.yaml | 1 + conftest.py | 20 ++++ data/login_data.csv | 4 + frontend/src/App.tsx | 50 +++++++-- frontend/src/components/pages/danger-zone.tsx | 77 +++++++++++++ frontend/src/components/pages/home-page.tsx | 82 ++++++++++++++ frontend/src/components/pages/login-page.tsx | 70 ++++++++++++ .../src/components/pages/profile-editor.tsx | 53 +++++++++ .../src/components/pages/settings-panel.tsx | 51 +++++++++ frontend/src/components/protected-route.tsx | 14 +++ frontend/src/lib/auth.tsx | 102 ++++++++++++++++++ frontend/src/lib/utils.ts | 6 ++ frontend/src/main.tsx | 5 +- .../test_login_flow.py => frontend/theme.md | 0 page_objects/base_page.py | 20 ++-- page_objects/danger_zone_page.py | 56 ++++++++++ page_objects/dynamic_content_page.py | 4 +- page_objects/form_elements_page.py | 4 +- page_objects/home_dashboard_page.py | 34 ++++++ page_objects/home_page.py | 49 +++++++++ page_objects/login_page.py | 61 +++++++++++ page_objects/profile_editor_page.py | 53 +++++++++ page_objects/settings_panel_page.py | 48 +++++++++ requirements.txt | 3 +- tests/conftest.py | 13 ++- tests/test_dynamic_content/__init__.py | 1 + .../test_dynamic_content.py | 20 ++-- tests/test_form_elements/__init__.py | 1 + .../test_form_elements.py | 38 +++---- tests/test_home/conftest.py | 34 ++++++ tests/test_home/test_dashboard.py | 102 ++++++++++++++++++ tests/test_home/test_home.py | 44 ++++++++ tests/test_login/test_login.py | 61 +++++++++++ tests/test_shopping_cart/__init__.py | 0 tests/test_shopping_cart/test_add_to_cart.py | 0 37 files changed, 1133 insertions(+), 51 deletions(-) create mode 100644 PixPin_2025-09-15_15-18-02.png create mode 100644 conftest.py create mode 100644 frontend/src/components/pages/danger-zone.tsx create mode 100644 frontend/src/components/pages/home-page.tsx create mode 100644 frontend/src/components/pages/login-page.tsx create mode 100644 frontend/src/components/pages/profile-editor.tsx create mode 100644 frontend/src/components/pages/settings-panel.tsx create mode 100644 frontend/src/components/protected-route.tsx create mode 100644 frontend/src/lib/auth.tsx create mode 100644 frontend/src/lib/utils.ts rename tests/test_login/test_login_flow.py => frontend/theme.md (100%) create mode 100644 page_objects/danger_zone_page.py create mode 100644 page_objects/home_dashboard_page.py create mode 100644 page_objects/profile_editor_page.py create mode 100644 page_objects/settings_panel_page.py create mode 100644 tests/test_dynamic_content/__init__.py rename tests/{ => test_dynamic_content}/test_dynamic_content.py (86%) create mode 100644 tests/test_form_elements/__init__.py rename tests/{ => test_form_elements}/test_form_elements.py (79%) create mode 100644 tests/test_home/conftest.py create mode 100644 tests/test_home/test_dashboard.py create mode 100644 tests/test_home/test_home.py create mode 100644 tests/test_login/test_login.py delete mode 100644 tests/test_shopping_cart/__init__.py delete mode 100644 tests/test_shopping_cart/test_add_to_cart.py diff --git a/.gitignore b/.gitignore index 818066e..26dca31 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,7 @@ dist/ downloads/ eggs/ .eggs/ -lib/ -lib64/ + parts/ sdist/ var/ diff --git a/PixPin_2025-09-15_15-18-02.png b/PixPin_2025-09-15_15-18-02.png new file mode 100644 index 0000000000000000000000000000000000000000..d16308d58f56ecb56522c4b8dc0502b9c2a5f8ca GIT binary patch literal 25741 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 literal 0 HcmV?d00001 diff --git a/config/dev_env.yaml b/config/dev_env.yaml index e69de29..4bcdef6 100644 --- a/config/dev_env.yaml +++ b/config/dev_env.yaml @@ -0,0 +1 @@ +base_url: http://localhost:5173 diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..a28e184 --- /dev/null +++ b/conftest.py @@ -0,0 +1,20 @@ +import pytest +import yaml + +@pytest.fixture(scope="session") +def env_config(): + # A fixture to read the config file once per session. + # In a real-world scenario, you might add logic here to select + # different config files (e.g., dev, prod) based on a command-line argument. + with open('config/dev_env.yaml', 'r') as file: + return yaml.safe_load(file) + +@pytest.fixture(scope="session") +def base_url(env_config): + """ + Provides the base URL for the application under test. + """ + url = env_config.get('base_url') + if not url: + raise Exception("'base_url' not found in config file.") + return url diff --git a/data/login_data.csv b/data/login_data.csv index e69de29..da73a67 100644 --- a/data/login_data.csv +++ b/data/login_data.csv @@ -0,0 +1,4 @@ +test_case,email,password,name,description +valid_credentials,poop@shenjianl.cn,shenjianZ,Test User,Valid credentials for successful login +invalid_password,test.user@example.com,WrongPassword,N/A,Correct email but incorrect password +invalid_email,nouser@example.com,Password123,N/A,Non-existent email \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 1214003..bc6ea06 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,13 +8,16 @@ import { import { FormElementsPage } from "./components/pages/form-elements"; import { DynamicContentPage } from "./components/pages/dynamic-content"; import { cn } from "./lib/utils"; +import { LoginPage } from "./components/pages/login-page"; +import { HomePage } from "./components/pages/home-page"; +import { ProtectedRoute } from "./components/protected-route"; function App() { return ( -
+
{/* Sidebar */} -