feat: improve coverage

This commit is contained in:
2025-01-23 17:32:16 +01:00
parent 0cef264b40
commit 90bcfe298b
4 changed files with 66 additions and 57 deletions
+6 -44
View File
@@ -1,45 +1,7 @@
import random class Response:
import string def __init__(self, data, status_code, *args, **kwargs):
self.data = data
self.status_code = status_code
from django.contrib.auth.models import Permission, User def json(self):
return self.data
class TestUserAuthenticationMixin:
model_name = ""
def create_user(self):
self.password = "".join(
[random.choice(string.ascii_letters) for _ in range(16)]
)
self.user = User.objects.create(
username="vader",
email="darth@vader.com",
is_staff=True,
is_active=True,
)
self.user.set_password(self.password)
self.user.save()
self.setup_user_permissions()
def login(self):
self.client.force_login(self.user)
def setup_user_permissions(self):
self.create_permission = Permission.objects.get(
codename=f"add_{self.model_name}"
)
self.delete_permission = Permission.objects.get(
codename=f"delete_{self.model_name}"
)
self.list_permission = Permission.objects.get(
codename=f"view_{self.model_name}"
)
self.update_permission = Permission.objects.get(
codename=f"change_{self.model_name}"
)
# Grant access and permissions
self.user.user_permissions.add(self.create_permission)
self.user.user_permissions.add(self.delete_permission)
self.user.user_permissions.add(self.list_permission)
self.user.user_permissions.add(self.update_permission)
+46
View File
@@ -1,13 +1,17 @@
import base64 import base64
import json import json
from decimal import Decimal from decimal import Decimal
from unittest.mock import patch
import pytest
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from config.tests.mixins import Response
from shop.exceptions import RedsysPaymentException
from shop.models import CustomerAddress, Order, ShopSettings, Tax from shop.models import CustomerAddress, Order, ShopSettings, Tax
from shop.redsys import RedsysClient from shop.redsys import RedsysClient
from shop.tests.mixins import CreateProductsMixin from shop.tests.mixins import CreateProductsMixin
@@ -16,6 +20,21 @@ from shop.utils import create_order, create_order_line_for_product, validate_exp
User = get_user_model() User = get_user_model()
def redsys_response_ok(*args, **kwargs):
response = {
"Ds_SignatureVersion": "HMAC_SHA256_V1",
"Ds_MerchantParameters": "eyJEc19BbW91bnQiOiIxNDUiLCJEc19DdXJyZW5jeSI6Ijk3OCIsIkRzX09yZGVyIjoiMTQ0NjA2ODU4MSIsIkRzX01lcmNoYW50Q29kZSI6Ijk5OTAwODg4MSIsIkRzX1Rlcm1pbmFsIjoiMSIsIkRzX1Jlc3BvbnNlIjoiMDAwMCIsIkRzX0F1dGhvcmlzYXRpb25Db2RlIjoiNTAxNjAyIiwiRHNfVHJhbnNhY3Rpb25UeXBlIjoiMCIsIkRzX1NlY3VyZVBheW1lbnQiOiIwIiwiRHNfTGFuZ3VhZ2UiOiIxIiwiRHNfQ2FyZE51bWJlciI6IjQ1NDg4MSoqKioqKioqMDQiLCJEc19NZXJjaGFudERhdGEiOiIiLCJEc19DYXJkX0NvdW50cnkiOiI3MjQiLCJEc19DYXJkX0JyYW5kIjoiMSJ9",
"Ds_Signature": "QVxoXwwp919v7XYjyBjhr1VXozESRosHPb3PDW-rcME=",
}
return Response(response, status_code=200)
def redsys_response_error(*args, **kwargs):
response = {"errorCode": "SIS00001"}
return Response(response, status_code=200)
class TestRedsysTPV(APITestCase, CreateProductsMixin): class TestRedsysTPV(APITestCase, CreateProductsMixin):
def setUp(self): def setUp(self):
self.tax = Tax.objects.create( self.tax = Tax.objects.create(
@@ -53,6 +72,7 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
self.order = self.create_order() self.order = self.create_order()
self.order.calculate_total_from_lines() self.order.calculate_total_from_lines()
self.settings = ShopSettings.load() self.settings = ShopSettings.load()
self.settings.merchant_code = "999008881"
self.settings.shared_secret = "sq7HjrUOBfKmC576ILgskD5srU870gJ7" # Debug secret self.settings.shared_secret = "sq7HjrUOBfKmC576ILgskD5srU870gJ7" # Debug secret
self.settings.save() self.settings.save()
@@ -184,3 +204,29 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
assert not validate_expiry_date(f"{previous_year}{current_month}") assert not validate_expiry_date(f"{previous_year}{current_month}")
assert validate_expiry_date(f"{current_year}{current_month}") assert validate_expiry_date(f"{current_year}{current_month}")
@patch("requests.post", redsys_response_ok)
def test_redsys_rest_client(self):
client = RedsysClient()
params = client.pay_order_rest(
self.order,
pan="4548810000000003",
expiry_date="122049",
cvv2="285",
)
assert params.get("Ds_Order") == "1446068581"
assert params.get("Ds_MerchantCode") == self.settings.merchant_code
@patch("requests.post", redsys_response_error)
def test_redsys_rest_client_error(self):
client = RedsysClient()
with pytest.raises(RedsysPaymentException):
client.pay_order_rest(
self.order,
pan="4548810000000003",
expiry_date="122049",
cvv2="285",
)
@@ -26,9 +26,7 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
web_settings = WebSettings.load() web_settings = WebSettings.load()
path = os.path.join( path = os.path.join(settings.BASE_DIR, "theme", "static", "css", "main.css")
settings.BASE_DIR, "theme", "static", "css", "main.css"
)
colors = [] colors = []
for color_name, data in web_settings.theme_colors.items(): for color_name, data in web_settings.theme_colors.items():
@@ -38,18 +36,21 @@ class Command(BaseCommand):
result = str( result = str(
render_to_string( render_to_string(
"theme/main.css.template", context={"colors": colors}, "theme/main.css.template",
context={"colors": colors},
) )
) )
with open(path, "w") as f: with open(path, "w") as f:
f.write(result) f.write(result)
subprocess.run([ subprocess.run(
[
"tailwindcss", "tailwindcss",
"-i", "-i",
"theme/static/css/main.css", "theme/static/css/main.css",
"-o", "-o",
"theme/static/css/styles.css", "theme/static/css/styles.css",
"--minify", "--minify",
]) ]
)
call_command("collectstatic", "--no-input") call_command("collectstatic", "--no-input")
File diff suppressed because one or more lines are too long