225 lines
7.5 KiB
Python
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()
|