74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
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
|