import pytest from django.urls import reverse from users.models import User from store.models import Game, Set, Card, CardListing, Cart from decks.models import Deck, DeckCard @pytest.mark.django_db class TestModels: def test_user_profile_created_signal(self): user = User.objects.create_user('testuser', 'test@example.com', 'password') assert hasattr(user, 'profile') assert user.profile.is_pro is False def test_cart_total_price(self, db): user = User.objects.create_user('cartuser', 'c@e.com', 'pass') cart = Cart.objects.create(user=user) game = Game.objects.create(name="G", slug="g") set_ = Set.objects.create(game=game, name="S") card = Card.objects.create(set=set_, name="C") listing = CardListing.objects.create(card=card, price=10.00, quantity=5) cart.items.create(listing=listing, quantity=2) assert cart.total_price == 20.00 @pytest.mark.django_db class TestStoreViews: def test_card_list_view(self, client): url = reverse('store:card_list') response = client.get(url) assert response.status_code == 200 def test_add_to_cart_requires_login(self, client): listing = CardListing.objects.create( card=Card.objects.create( set=Set.objects.create( game=Game.objects.create(name="G", slug="g"), name="S" ), name="C" ), price=10.00 ) url = reverse('store:add_to_cart', args=[listing.id]) response = client.post(url) assert response.status_code == 302 # Redirect to login @pytest.mark.django_db class TestDeckViews: @pytest.fixture def pro_user(self): u = User.objects.create_user('pro', 'pro@e.com', 'pass') u.profile.is_pro = True u.profile.save() return u @pytest.fixture def basic_user(self): return User.objects.create_user('basic', 'basic@e.com', 'pass') def test_deck_builder_access_pro(self, client, pro_user): client.force_login(pro_user) deck = Deck.objects.create(user=pro_user, name="Pro Deck", game=Game.objects.create(name="G", slug="g")) url = reverse('decks:deck_builder', args=[deck.id]) response = client.get(url) assert response.status_code == 200 def test_deck_builder_access_basic(self, client, basic_user): client.force_login(basic_user) # Basic user tries to access create page url = reverse('decks:deck_create') response = client.get(url) assert response.status_code == 302 # Redirect expected