Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion requirements.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Django==5.1.6
Django
django-environ
django-debug-toolbar
django-extensions
Expand Down
52 changes: 26 additions & 26 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -51,7 +51,7 @@ decorator==5.2.1
# via
# ipdb
# ipython
django==5.1.6
django==5.2
# via
# -r requirements.in
# crispy-bootstrap5
Expand All @@ -61,37 +61,37 @@ 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
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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
19 changes: 16 additions & 3 deletions tests/test_add_soldier.py
Original file line number Diff line number Diff line change
@@ -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"

Expand All @@ -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
Expand Down
18 changes: 15 additions & 3 deletions tests/test_add_soldier_decoration.py
Original file line number Diff line number Diff line change
@@ -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"

Expand All @@ -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/")
Expand Down Expand Up @@ -147,4 +159,4 @@ def test_add_soldier():
print("Browser closed")

if __name__ == "__main__":
test_add_soldier()
test_add_soldier_decoration()
27 changes: 27 additions & 0 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -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()