mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-22 15:31:08 -05:00
Refactor test utilities and enhance ASGI settings
- Cleaned up and standardized assertions in ApiTestMixin for API response validation. - Updated ASGI settings to use os.environ for setting the DJANGO_SETTINGS_MODULE. - Removed unused imports and improved formatting in settings.py. - Refactored URL patterns in urls.py for better readability and organization. - Enhanced view functions in views.py for consistency and clarity. - Added .flake8 configuration for linting and style enforcement. - Introduced type stubs for django-environ to improve type checking with Pylance.
This commit is contained in:
@@ -2,27 +2,26 @@ from django.core.management.base import BaseCommand
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.utils import timezone
|
||||
from moderation.models import EditSubmission, PhotoSubmission
|
||||
from parks.models import Park
|
||||
from rides.models import Ride
|
||||
from datetime import date, timedelta
|
||||
from datetime import date
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Seeds test submissions for moderation dashboard'
|
||||
help = "Seeds test submissions for moderation dashboard"
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
# Ensure we have a test user
|
||||
user, created = User.objects.get_or_create(
|
||||
username='test_user',
|
||||
email='test@example.com'
|
||||
username="test_user", email="test@example.com"
|
||||
)
|
||||
if created:
|
||||
user.set_password('testpass123')
|
||||
user.set_password("testpass123")
|
||||
user.save()
|
||||
self.stdout.write(self.style.SUCCESS('Created test user'))
|
||||
self.stdout.write(self.style.SUCCESS("Created test user"))
|
||||
|
||||
# Get content types
|
||||
park_ct = ContentType.objects.get_for_model(Park)
|
||||
@@ -30,29 +29,29 @@ class Command(BaseCommand):
|
||||
|
||||
# Create test park for edit submissions
|
||||
test_park, created = Park.objects.get_or_create(
|
||||
name='Test Park',
|
||||
name="Test Park",
|
||||
defaults={
|
||||
'description': 'A test theme park located in Orlando, Florida',
|
||||
'status': 'OPERATING',
|
||||
'operating_season': 'Year-round',
|
||||
'size_acres': 100.50,
|
||||
'website': 'https://testpark.example.com'
|
||||
}
|
||||
"description": "A test theme park located in Orlando, Florida",
|
||||
"status": "OPERATING",
|
||||
"operating_season": "Year-round",
|
||||
"size_acres": 100.50,
|
||||
"website": "https://testpark.example.com",
|
||||
},
|
||||
)
|
||||
|
||||
# Create test ride for edit submissions
|
||||
test_ride, created = Ride.objects.get_or_create(
|
||||
name='Test Coaster',
|
||||
name="Test Coaster",
|
||||
park=test_park,
|
||||
defaults={
|
||||
'description': 'A thrilling steel roller coaster with multiple inversions',
|
||||
'status': 'OPERATING',
|
||||
'category': 'RC',
|
||||
'capacity_per_hour': 1200,
|
||||
'ride_duration_seconds': 180,
|
||||
'min_height_in': 48,
|
||||
'opening_date': date(2020, 6, 15)
|
||||
}
|
||||
"description": "A thrilling steel roller coaster with multiple inversions",
|
||||
"status": "OPERATING",
|
||||
"category": "RC",
|
||||
"capacity_per_hour": 1200,
|
||||
"ride_duration_seconds": 180,
|
||||
"min_height_in": 48,
|
||||
"opening_date": date(2020, 6, 15),
|
||||
},
|
||||
)
|
||||
|
||||
# Create EditSubmissions
|
||||
@@ -61,33 +60,39 @@ class Command(BaseCommand):
|
||||
EditSubmission.objects.create(
|
||||
user=user,
|
||||
content_type=park_ct,
|
||||
submission_type='CREATE',
|
||||
submission_type="CREATE",
|
||||
changes={
|
||||
'name': 'Adventure World Orlando',
|
||||
'description': ('A brand new theme park coming to Orlando featuring five uniquely themed lands: '
|
||||
'Future Frontier, Ancient Mysteries, Ocean Depths, Sky Kingdom, and Fantasy Forest. '
|
||||
'The park will feature state-of-the-art attractions including 3 roller coasters, '
|
||||
'4 dark rides, and multiple family attractions in each themed area.'),
|
||||
'status': 'UNDER_CONSTRUCTION',
|
||||
'opening_date': '2024-06-01',
|
||||
'operating_season': 'Year-round with extended hours during summer and holidays',
|
||||
'size_acres': 250.75,
|
||||
'website': 'https://adventureworld.example.com',
|
||||
'location': {
|
||||
'street_address': '1234 Theme Park Way',
|
||||
'city': 'Orlando',
|
||||
'state': 'Florida',
|
||||
'country': 'United States',
|
||||
'postal_code': '32819',
|
||||
'latitude': '28.538336',
|
||||
'longitude': '-81.379234'
|
||||
}
|
||||
"name": "Adventure World Orlando",
|
||||
"description": (
|
||||
"A brand new theme park coming to Orlando featuring five uniquely themed lands: "
|
||||
"Future Frontier, Ancient Mysteries, Ocean Depths, Sky Kingdom, and Fantasy Forest. "
|
||||
"The park will feature state-of-the-art attractions including 3 roller coasters, "
|
||||
"4 dark rides, and multiple family attractions in each themed area."
|
||||
),
|
||||
"status": "UNDER_CONSTRUCTION",
|
||||
"opening_date": "2024-06-01",
|
||||
"operating_season": "Year-round with extended hours during summer and holidays",
|
||||
"size_acres": 250.75,
|
||||
"website": "https://adventureworld.example.com",
|
||||
"location": {
|
||||
"street_address": "1234 Theme Park Way",
|
||||
"city": "Orlando",
|
||||
"state": "Florida",
|
||||
"country": "United States",
|
||||
"postal_code": "32819",
|
||||
"latitude": "28.538336",
|
||||
"longitude": "-81.379234",
|
||||
},
|
||||
},
|
||||
reason=('Submitting new theme park details based on official press release and construction permits. '
|
||||
'The park has begun vertical construction and has announced its opening date.'),
|
||||
source=('Official press release: https://adventureworld.example.com/press/announcement\n'
|
||||
'Construction permits: Orange County Building Department #2023-12345'),
|
||||
status='PENDING'
|
||||
reason=(
|
||||
"Submitting new theme park details based on official press release and construction permits. "
|
||||
"The park has begun vertical construction and has announced its opening date."
|
||||
),
|
||||
source=(
|
||||
"Official press release: https://adventureworld.example.com/press/announcement\n"
|
||||
"Construction permits: Orange County Building Department #2023-12345"
|
||||
),
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
# Existing park edit with comprehensive updates
|
||||
@@ -95,75 +100,89 @@ class Command(BaseCommand):
|
||||
user=user,
|
||||
content_type=park_ct,
|
||||
object_id=test_park.id,
|
||||
submission_type='EDIT',
|
||||
submission_type="EDIT",
|
||||
changes={
|
||||
'description': ('A world-class theme park featuring 12 uniquely themed areas and over 50 attractions. '
|
||||
'Recent expansion added the new "Cosmic Adventures" area with 2 roller coasters and '
|
||||
'3 family attractions. The park now offers enhanced dining options and night-time '
|
||||
'spectacular "Starlight Dreams".'),
|
||||
'status': 'OPERATING',
|
||||
'website': 'https://testpark.example.com',
|
||||
'size_acres': 120.25,
|
||||
'operating_season': ('Year-round with extended hours (9AM-11PM) during summer. '
|
||||
'Special events during Halloween and Christmas seasons.'),
|
||||
'location': {
|
||||
'street_address': '5678 Park Boulevard',
|
||||
'city': 'Orlando',
|
||||
'state': 'Florida',
|
||||
'country': 'United States',
|
||||
'postal_code': '32830',
|
||||
'latitude': '28.538336',
|
||||
'longitude': '-81.379234'
|
||||
}
|
||||
"description": (
|
||||
"A world-class theme park featuring 12 uniquely themed areas and over 50 attractions. "
|
||||
'Recent expansion added the new "Cosmic Adventures" area with 2 roller coasters and '
|
||||
"3 family attractions. The park now offers enhanced dining options and night-time "
|
||||
'spectacular "Starlight Dreams".'
|
||||
),
|
||||
"status": "OPERATING",
|
||||
"website": "https://testpark.example.com",
|
||||
"size_acres": 120.25,
|
||||
"operating_season": (
|
||||
"Year-round with extended hours (9AM-11PM) during summer. "
|
||||
"Special events during Halloween and Christmas seasons."
|
||||
),
|
||||
"location": {
|
||||
"street_address": "5678 Park Boulevard",
|
||||
"city": "Orlando",
|
||||
"state": "Florida",
|
||||
"country": "United States",
|
||||
"postal_code": "32830",
|
||||
"latitude": "28.538336",
|
||||
"longitude": "-81.379234",
|
||||
},
|
||||
},
|
||||
reason=('Updating park information to reflect recent expansion and operational changes. '
|
||||
'The new Cosmic Adventures area opened last month and operating hours have been extended.'),
|
||||
source=('Park press release: https://testpark.example.com/news/expansion\n'
|
||||
'Official park map: https://testpark.example.com/map\n'
|
||||
'Personal visit and photos from opening day of new area'),
|
||||
status='PENDING'
|
||||
reason=(
|
||||
"Updating park information to reflect recent expansion and operational changes. "
|
||||
"The new Cosmic Adventures area opened last month and operating hours have been extended."
|
||||
),
|
||||
source=(
|
||||
"Park press release: https://testpark.example.com/news/expansion\n"
|
||||
"Official park map: https://testpark.example.com/map\n"
|
||||
"Personal visit and photos from opening day of new area"
|
||||
),
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
# New ride creation with detailed specifications
|
||||
EditSubmission.objects.create(
|
||||
user=user,
|
||||
content_type=ride_ct,
|
||||
submission_type='CREATE',
|
||||
submission_type="CREATE",
|
||||
changes={
|
||||
'name': 'Thunderbolt: The Ultimate Launch Coaster',
|
||||
'park': test_park.id,
|
||||
'description': ('A cutting-edge steel launch coaster featuring the world\'s tallest inversion (160 ft) '
|
||||
'and fastest launch acceleration (0-80 mph in 2 seconds). The ride features a unique '
|
||||
'triple launch system, 5 inversions including a zero-g roll and cobra roll, and a '
|
||||
'first-of-its-kind vertical helix element. Total track length is 4,500 feet with a '
|
||||
'maximum height of 375 feet.'),
|
||||
'status': 'UNDER_CONSTRUCTION',
|
||||
'category': 'RC',
|
||||
'opening_date': '2024-07-01',
|
||||
'capacity_per_hour': 1400,
|
||||
'ride_duration_seconds': 210,
|
||||
'min_height_in': 52,
|
||||
'manufacturer': 1, # Assuming manufacturer ID
|
||||
'park_area': 1, # Assuming park area ID
|
||||
'stats': {
|
||||
'height_ft': 375,
|
||||
'length_ft': 4500,
|
||||
'speed_mph': 80,
|
||||
'inversions': 5,
|
||||
'launch_type': 'LSM',
|
||||
'track_material': 'STEEL',
|
||||
'roller_coaster_type': 'SITDOWN',
|
||||
'trains_count': 3,
|
||||
'cars_per_train': 6,
|
||||
'seats_per_car': 4
|
||||
}
|
||||
"name": "Thunderbolt: The Ultimate Launch Coaster",
|
||||
"park": test_park.id,
|
||||
"description": (
|
||||
"A cutting-edge steel launch coaster featuring the world's tallest inversion (160 ft) "
|
||||
"and fastest launch acceleration (0-80 mph in 2 seconds). The ride features a unique "
|
||||
"triple launch system, 5 inversions including a zero-g roll and cobra roll, and a "
|
||||
"first-of-its-kind vertical helix element. Total track length is 4,500 feet with a "
|
||||
"maximum height of 375 feet."
|
||||
),
|
||||
"status": "UNDER_CONSTRUCTION",
|
||||
"category": "RC",
|
||||
"opening_date": "2024-07-01",
|
||||
"capacity_per_hour": 1400,
|
||||
"ride_duration_seconds": 210,
|
||||
"min_height_in": 52,
|
||||
"manufacturer": 1, # Assuming manufacturer ID
|
||||
"park_area": 1, # Assuming park area ID
|
||||
"stats": {
|
||||
"height_ft": 375,
|
||||
"length_ft": 4500,
|
||||
"speed_mph": 80,
|
||||
"inversions": 5,
|
||||
"launch_type": "LSM",
|
||||
"track_material": "STEEL",
|
||||
"roller_coaster_type": "SITDOWN",
|
||||
"trains_count": 3,
|
||||
"cars_per_train": 6,
|
||||
"seats_per_car": 4,
|
||||
},
|
||||
},
|
||||
reason=('Submitting details for the new flagship roller coaster announced by the park. '
|
||||
'Construction has begun and track pieces are arriving on site.'),
|
||||
source=('Official announcement: https://testpark.example.com/thunderbolt\n'
|
||||
'Construction photos: https://coasterfan.com/thunderbolt-construction\n'
|
||||
'Manufacturer specifications sheet'),
|
||||
status='PENDING'
|
||||
reason=(
|
||||
"Submitting details for the new flagship roller coaster announced by the park. "
|
||||
"Construction has begun and track pieces are arriving on site."
|
||||
),
|
||||
source=(
|
||||
"Official announcement: https://testpark.example.com/thunderbolt\n"
|
||||
"Construction photos: https://coasterfan.com/thunderbolt-construction\n"
|
||||
"Manufacturer specifications sheet"
|
||||
),
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
# Existing ride edit with technical updates
|
||||
@@ -171,58 +190,72 @@ class Command(BaseCommand):
|
||||
user=user,
|
||||
content_type=ride_ct,
|
||||
object_id=test_ride.id,
|
||||
submission_type='EDIT',
|
||||
submission_type="EDIT",
|
||||
changes={
|
||||
'description': ('A high-speed steel roller coaster featuring 4 inversions and a unique '
|
||||
'dual-loading station system. Recent upgrades include new magnetic braking '
|
||||
'system and enhanced on-board audio experience.'),
|
||||
'status': 'OPERATING',
|
||||
'capacity_per_hour': 1500, # Increased after station upgrades
|
||||
'ride_duration_seconds': 185,
|
||||
'min_height_in': 48,
|
||||
'max_height_in': 80,
|
||||
'stats': {
|
||||
'trains_count': 3,
|
||||
'cars_per_train': 8,
|
||||
'seats_per_car': 4
|
||||
}
|
||||
"description": (
|
||||
"A high-speed steel roller coaster featuring 4 inversions and a unique "
|
||||
"dual-loading station system. Recent upgrades include new magnetic braking "
|
||||
"system and enhanced on-board audio experience."
|
||||
),
|
||||
"status": "OPERATING",
|
||||
"capacity_per_hour": 1500, # Increased after station upgrades
|
||||
"ride_duration_seconds": 185,
|
||||
"min_height_in": 48,
|
||||
"max_height_in": 80,
|
||||
"stats": {
|
||||
"trains_count": 3,
|
||||
"cars_per_train": 8,
|
||||
"seats_per_car": 4,
|
||||
},
|
||||
},
|
||||
reason=('Updating ride information to reflect recent upgrades including new braking system, '
|
||||
'audio system, and increased capacity due to improved loading efficiency.'),
|
||||
source=('Park operations manual\n'
|
||||
'Maintenance records\n'
|
||||
'Personal observation and timing of new ride cycle'),
|
||||
status='PENDING'
|
||||
reason=(
|
||||
"Updating ride information to reflect recent upgrades including new braking system, "
|
||||
"audio system, and increased capacity due to improved loading efficiency."
|
||||
),
|
||||
source=(
|
||||
"Park operations manual\n"
|
||||
"Maintenance records\n"
|
||||
"Personal observation and timing of new ride cycle"
|
||||
),
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
# Create PhotoSubmissions with detailed captions
|
||||
|
||||
# Park photo submission
|
||||
image_data = b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;'
|
||||
dummy_image = SimpleUploadedFile('park_entrance.gif', image_data, content_type='image/gif')
|
||||
image_data = b"GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"
|
||||
dummy_image = SimpleUploadedFile(
|
||||
"park_entrance.gif", image_data, content_type="image/gif"
|
||||
)
|
||||
|
||||
PhotoSubmission.objects.create(
|
||||
user=user,
|
||||
content_type=park_ct,
|
||||
object_id=test_park.id,
|
||||
photo=dummy_image,
|
||||
caption=('Main entrance plaza of Test Park showing the newly installed digital display board '
|
||||
'and renovated ticketing area. Photo taken during morning park opening.'),
|
||||
caption=(
|
||||
"Main entrance plaza of Test Park showing the newly installed digital display board "
|
||||
"and renovated ticketing area. Photo taken during morning park opening."
|
||||
),
|
||||
date_taken=date(2024, 1, 15),
|
||||
status='PENDING'
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
# Ride photo submission
|
||||
dummy_image2 = SimpleUploadedFile('coaster_track.gif', image_data, content_type='image/gif')
|
||||
dummy_image2 = SimpleUploadedFile(
|
||||
"coaster_track.gif", image_data, content_type="image/gif"
|
||||
)
|
||||
PhotoSubmission.objects.create(
|
||||
user=user,
|
||||
content_type=ride_ct,
|
||||
object_id=test_ride.id,
|
||||
photo=dummy_image2,
|
||||
caption=('Test Coaster\'s first drop and loop element showing the new paint scheme. '
|
||||
'Photo taken from the guest pathway near Station Alpha.'),
|
||||
caption=(
|
||||
"Test Coaster's first drop and loop element showing the new paint scheme. "
|
||||
"Photo taken from the guest pathway near Station Alpha."
|
||||
),
|
||||
date_taken=date(2024, 1, 20),
|
||||
status='PENDING'
|
||||
status="PENDING",
|
||||
)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Successfully seeded test submissions'))
|
||||
self.stdout.write(self.style.SUCCESS("Successfully seeded test submissions"))
|
||||
|
||||
Reference in New Issue
Block a user