Files
rogaining_srv/test_step1_complete.py

225 lines
7.5 KiB
Python

#!/usr/bin/env python3
"""
テストステップ1: 大垣3イベントをコピーして大垣テストイベントを作成し、
テストユーザー、チーム、メンバーを含む完全なテストデータを構築する
"""
import os
import sys
import django
from datetime import datetime, timedelta
# Django設定を読み込み
sys.path.append('/app')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()
from rog.models import NewEvent2, NewCategory, Entry, Team, Member, CustomUser
def create_test_event():
"""大垣3イベントをベースに大垣テストイベントを作成"""
print("=== テストイベント作成開始 ===")
# 既存の大垣3イベントを検索
base_event = None
for event in NewEvent2.objects.all():
if "大垣3" == event.event_name:
base_event = event
print(f"ベースイベント発見: {event.event_name} (ID: {event.id})")
break
if not base_event:
print("大垣3イベントが見つかりません")
return None
# 大垣テストイベントが既に存在するかチェック
test_event = NewEvent2.objects.filter(event_name__contains="大垣テスト").first()
if test_event:
print(f"テストイベントは既に存在します: {test_event.event_name} (ID: {test_event.id})")
return test_event
# 新しいテストイベントを作成
now = datetime.now()
test_event = NewEvent2.objects.create(
event_name="大垣テスト",
start_datetime=now + timedelta(days=1),
end_datetime=now + timedelta(days=2),
event_type=base_event.event_type,
location=base_event.location,
url=base_event.url,
active=True,
organizer=base_event.organizer
)
print(f"テストイベント作成完了: {test_event.event_name} (ID: {test_event.id})")
return test_event
def create_test_user():
"""テストユーザーを作成"""
print("\n=== テストユーザー作成開始 ===")
email = "test_user@example.com"
# 既存ユーザーをチェック
test_user = CustomUser.objects.filter(email=email).first()
if test_user:
print(f"テストユーザーは既に存在します: {test_user.email} (ID: {test_user.id})")
return test_user
# 新しいテストユーザーを作成
test_user = CustomUser.objects.create(
email=email,
firstname="テスト",
lastname="太郎",
date_of_birth=datetime(1990, 1, 1).date(),
female=False,
is_active=True
)
test_user.set_password("testpassword123")
test_user.save()
print(f"テストユーザー作成完了: {test_user.email} (ID: {test_user.id})")
return test_user
def create_test_team(test_user, test_event):
"""テストチームを作成"""
print("\n=== テストチーム作成開始 ===")
team_name = "テストチーム1"
# 既存チームをチェック
test_team = Team.objects.filter(
team_name=team_name,
event=test_event
).first()
if test_team:
print(f"テストチームは既に存在します: {test_team.team_name} (ID: {test_team.id})")
return test_team
# デフォルトカテゴリーを取得
default_category = NewCategory.objects.filter(category_name__contains="Default").first()
if not default_category:
# 適当なカテゴリーを取得
default_category = NewCategory.objects.first()
# 新しいテストチームを作成
test_team = Team.objects.create(
team_name=team_name,
owner=test_user,
category=default_category,
event=test_event,
zekken_number="T001"
)
print(f"テストチーム作成完了: {test_team.team_name} (ID: {test_team.id})")
return test_team
def create_test_member(test_user, test_team):
"""テストメンバーを作成"""
print("\n=== テストメンバー作成開始 ===")
# 既存メンバーをチェック
test_member = Member.objects.filter(
team=test_team,
user=test_user
).first()
if test_member:
print(f"テストメンバーは既に存在します: {test_member.user.email} (ID: {test_member.id})")
return test_member
# 新しいテストメンバーを作成
test_member = Member.objects.create(
team=test_team,
user=test_user,
firstname=test_user.firstname,
lastname=test_user.lastname,
date_of_birth=test_user.date_of_birth,
female=test_user.female
)
print(f"テストメンバー作成完了: {test_member.user.email} (ID: {test_member.id})")
return test_member
def create_test_entries(test_event, test_team):
"""利用可能な全カテゴリーでエントリーを作成"""
print("\n=== テストエントリー作成開始 ===")
# 利用可能なカテゴリーを取得
categories = NewCategory.objects.all()
print(f"利用可能なカテゴリー数: {categories.count()}")
created_entries = []
for category in categories[:3]: # 最初の3つのカテゴリーのみでテスト
# 既存エントリーをチェック
existing_entry = Entry.objects.filter(
team=test_team,
event=test_event,
category=category
).first()
if existing_entry:
print(f"エントリーは既に存在します: {category.category_name}")
created_entries.append(existing_entry)
continue
try:
# 新しいエントリーを作成
entry = Entry.objects.create(
team=test_team,
event=test_event,
category=category,
date=test_event.start_datetime,
owner=test_team.owner,
zekken_number=1
)
created_entries.append(entry)
print(f"エントリー作成完了: {category.category_name} (ID: {entry.id})")
except Exception as e:
print(f"エントリー作成エラー ({category.category_name}): {e}")
print(f"合計 {len(created_entries)} 個のエントリーを作成/確認しました")
return created_entries
def main():
"""メイン処理"""
print("テストデータ作成スクリプト開始")
print("=" * 50)
try:
# 1. テストイベント作成
test_event = create_test_event()
if not test_event:
print("テストイベント作成に失敗しました")
return
# 2. テストユーザー作成
test_user = create_test_user()
# 3. テストチーム作成
test_team = create_test_team(test_user, test_event)
# 4. テストメンバー作成
test_member = create_test_member(test_user, test_team)
# 5. テストエントリー作成
test_entries = create_test_entries(test_event, test_team)
print("\n" + "=" * 50)
print("テストデータ作成完了!")
print(f"イベント: {test_event.event_name}")
print(f"ユーザー: {test_user.email}")
print(f"チーム: {test_team.team_name}")
print(f"メンバー: {test_member.user.email}")
print(f"エントリー数: {len(test_entries)}")
except Exception as e:
print(f"エラーが発生しました: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()