diff --git a/requirements.in b/requirements.in index 3af9360..f9e52d7 100644 --- a/requirements.in +++ b/requirements.in @@ -1,4 +1,4 @@ -Django==5.1.6 +Django django-environ django-debug-toolbar django-extensions diff --git a/requirements.txt b/requirements.txt index a68e129..636fa01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,13 +11,13 @@ asgiref==3.8.1 # django-htmx asttokens==3.0.0 # via stack-data -azure-core==1.32.0 +azure-core==1.33.0 # via # azure-identity # azure-storage-blob azure-identity==1.21.0 # via -r requirements.in -azure-storage-blob==12.25.0 +azure-storage-blob==12.25.1 # via -r requirements.in black==25.1.0 # via -r requirements.in @@ -37,9 +37,9 @@ click==8.1.8 # via # black # pip-tools -coverage[toml]==7.6.12 +coverage[toml]==7.8.0 # via pytest-cov -crispy-bootstrap5==2024.10 +crispy-bootstrap5==2025.4 # via -r requirements.in cryptography==44.0.2 # via @@ -51,7 +51,7 @@ decorator==5.2.1 # via # ipdb # ipython -django==5.1.6 +django==5.2 # via # -r requirements.in # crispy-bootstrap5 @@ -61,25 +61,25 @@ django==5.1.6 # django-extensions # django-htmx # django-storages -django-allauth==65.5.0 +django-allauth==65.7.0 # via -r requirements.in -django-crispy-forms==2.3 +django-crispy-forms==2.4 # via # -r requirements.in # crispy-bootstrap5 -django-debug-toolbar==5.0.1 +django-debug-toolbar==5.1.0 # via -r requirements.in django-environ==0.12.0 # via -r requirements.in -django-extensions==3.2.3 +django-extensions==4.1 # via -r requirements.in django-htmx==1.23.0 # via -r requirements.in -django-storages==1.14.5 +django-storages==1.14.6 # via -r requirements.in executing==2.2.0 # via stack-data -flake8==7.1.2 +flake8==7.2.0 # via -r requirements.in folium==0.19.5 # via -r requirements.in @@ -87,11 +87,11 @@ gunicorn==23.0.0 # via -r requirements.in idna==3.10 # via requests -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest ipdb==0.13.13 # via -r requirements.in -ipython==9.0.2 +ipython==9.1.0 # via ipdb ipython-pygments-lexers==1.1.1 # via ipython @@ -117,11 +117,11 @@ msal==1.32.0 # msal-extensions msal-extensions==1.3.1 # via azure-identity -mypy-extensions==1.0.0 +mypy-extensions==1.1.0 # via black -numpy==2.2.3 +numpy==2.2.5 # via folium -packaging==24.2 +packaging==25.0 # via # black # build @@ -133,25 +133,25 @@ pathspec==0.12.1 # via black pexpect==4.9.0 # via ipython -pillow==11.1.0 +pillow==11.2.1 # via -r requirements.in pip-tools==7.4.1 # via -r requirements.in -platformdirs==4.3.6 +platformdirs==4.3.7 # via black pluggy==1.5.0 # via pytest -prompt-toolkit==3.0.50 +prompt-toolkit==3.0.51 # via ipython ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -pycodestyle==2.12.1 +pycodestyle==2.13.0 # via flake8 pycparser==2.22 # via cffi -pyflakes==3.2.0 +pyflakes==3.3.2 # via flake8 pygments==2.19.1 # via @@ -169,16 +169,16 @@ pytest==8.3.5 # via # pytest-cov # pytest-django -pytest-cov==6.0.0 +pytest-cov==6.1.1 # via -r requirements.in -pytest-django==4.10.0 +pytest-django==4.11.1 # via -r requirements.in requests==2.32.3 # via # azure-core # folium # msal -sentry-sdk==2.22.0 +sentry-sdk==2.26.1 # via -r requirements.in six==1.17.0 # via azure-core @@ -192,12 +192,12 @@ traitlets==5.14.3 # via # ipython # matplotlib-inline -typing-extensions==4.12.2 +typing-extensions==4.13.2 # via # azure-core # azure-identity # azure-storage-blob -urllib3==2.3.0 +urllib3==2.4.0 # via # requests # sentry-sdk diff --git a/tests/test_add_soldier.py b/tests/test_add_soldier.py index 6a230c0..01f16b5 100644 --- a/tests/test_add_soldier.py +++ b/tests/test_add_soldier.py @@ -1,6 +1,18 @@ import os +import sys +import django from playwright.sync_api import sync_playwright import random +from test_utils import login + +# Add the project root directory to the Python path +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Set up Django +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') +django.setup() + +from django.conf import settings BASE_URL = "http://localhost:8000" @@ -17,10 +29,11 @@ def test_add_soldier(): browser = playwright.chromium.launch(headless=False) page = browser.new_page() - # Go to search page - page.goto(f"{BASE_URL}/mgmt/soldiers/search/") + # Use shared login function + login(page) - # Click the correct button text + # Rest of the test remains the same + page.goto(f"{BASE_URL}/mgmt/soldiers/search/") page.click("text=Add New Soldier") # Generate random name diff --git a/tests/test_add_soldier_decoration.py b/tests/test_add_soldier_decoration.py index d7d41c5..b7fbf15 100644 --- a/tests/test_add_soldier_decoration.py +++ b/tests/test_add_soldier_decoration.py @@ -1,7 +1,17 @@ import os +import sys +import django from playwright.sync_api import sync_playwright import random import traceback # Add this for better error reporting +from test_utils import login + +# Add the project root directory to the Python path +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Set up Django +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') +django.setup() BASE_URL = "http://localhost:8000" @@ -13,12 +23,14 @@ def generate_random_name(): 'initials': f"{random.choice(initials)}{random.choice(initials)}" } -def test_add_soldier(): - print("Test starting...") +def test_add_soldier_decoration(): with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) page = browser.new_page() + # Use shared login function + login(page) + try: # Go to search page page.goto(f"{BASE_URL}/mgmt/soldiers/search/") @@ -147,4 +159,4 @@ def test_add_soldier(): print("Browser closed") if __name__ == "__main__": - test_add_soldier() \ No newline at end of file + test_add_soldier_decoration() \ No newline at end of file diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..64eb4c3 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,27 @@ +import os +from playwright.sync_api import Page + +def login(page: Page): + """ + Shared login function for test cases + + Args: + page: Playwright page object + """ + print("Navigating to login page...") + page.goto("http://localhost:8000/accounts/login/") + + # Wait for the page to load + page.wait_for_load_state('networkidle') + + # Wait for and fill username + username_input = page.wait_for_selector("#id_login", state="visible") + username_input.fill(os.environ.get('admin_user')) + + # Wait for and fill password + password_input = page.wait_for_selector("#id_password", state="visible") + password_input.fill(os.environ.get('admin_password')) + + # Wait for and click submit button + submit_button = page.wait_for_selector("button[type='submit']", state="visible") + submit_button.click() \ No newline at end of file