mirror of
https://github.com/ae-utbm/sith.git
synced 2024-12-22 15:51:19 +00:00
Remove GetCustomer API endpoint
This commit is contained in:
parent
a0eb53a607
commit
fc0ef29738
@ -21,12 +21,11 @@ from ninja_extra import ControllerBase, api_controller, paginate, route
|
|||||||
from ninja_extra.pagination import PageNumberPaginationExtra
|
from ninja_extra.pagination import PageNumberPaginationExtra
|
||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
|
|
||||||
from core.api_permissions import CanAccessLookup, CanView, IsLoggedInCounter, IsRoot
|
from core.api_permissions import CanAccessLookup, CanView, IsRoot
|
||||||
from counter.models import Counter, Customer, Product
|
from counter.models import Counter, Product
|
||||||
from counter.schemas import (
|
from counter.schemas import (
|
||||||
CounterFilterSchema,
|
CounterFilterSchema,
|
||||||
CounterSchema,
|
CounterSchema,
|
||||||
CustomerSchema,
|
|
||||||
ProductSchema,
|
ProductSchema,
|
||||||
SimplifiedCounterSchema,
|
SimplifiedCounterSchema,
|
||||||
)
|
)
|
||||||
@ -61,18 +60,6 @@ class CounterController(ControllerBase):
|
|||||||
return filters.filter(Counter.objects.all())
|
return filters.filter(Counter.objects.all())
|
||||||
|
|
||||||
|
|
||||||
@api_controller("/customer")
|
|
||||||
class CustomerController(ControllerBase):
|
|
||||||
@route.get(
|
|
||||||
"{customer_id}",
|
|
||||||
response=CustomerSchema,
|
|
||||||
permissions=[IsLoggedInCounter],
|
|
||||||
url_name="get_customer",
|
|
||||||
)
|
|
||||||
def get_customer(self, customer_id: int):
|
|
||||||
return self.get_object_or_exception(Customer, pk=customer_id)
|
|
||||||
|
|
||||||
|
|
||||||
@api_controller("/product")
|
@api_controller("/product")
|
||||||
class ProductController(ControllerBase):
|
class ProductController(ControllerBase):
|
||||||
@route.get(
|
@route.get(
|
||||||
|
@ -4,7 +4,7 @@ from annotated_types import MinLen
|
|||||||
from ninja import Field, FilterSchema, ModelSchema
|
from ninja import Field, FilterSchema, ModelSchema
|
||||||
|
|
||||||
from core.schemas import SimpleUserSchema
|
from core.schemas import SimpleUserSchema
|
||||||
from counter.models import Counter, Customer, Product
|
from counter.models import Counter, Product
|
||||||
|
|
||||||
|
|
||||||
class CounterSchema(ModelSchema):
|
class CounterSchema(ModelSchema):
|
||||||
@ -16,12 +16,6 @@ class CounterSchema(ModelSchema):
|
|||||||
fields = ["id", "name", "type", "club", "products"]
|
fields = ["id", "name", "type", "club", "products"]
|
||||||
|
|
||||||
|
|
||||||
class CustomerSchema(ModelSchema):
|
|
||||||
class Meta:
|
|
||||||
model = Customer
|
|
||||||
fields = ["user", "account_id", "amount", "recorded_products"]
|
|
||||||
|
|
||||||
|
|
||||||
class CounterFilterSchema(FilterSchema):
|
class CounterFilterSchema(FilterSchema):
|
||||||
search: Annotated[str, MinLen(1)] = Field(None, q="name__icontains")
|
search: Annotated[str, MinLen(1)] = Field(None, q="name__icontains")
|
||||||
|
|
||||||
|
@ -1,105 +0,0 @@
|
|||||||
import pytest
|
|
||||||
from django.contrib.auth.models import make_password
|
|
||||||
from django.test.client import Client
|
|
||||||
from django.urls import reverse
|
|
||||||
from model_bakery import baker
|
|
||||||
|
|
||||||
from core.baker_recipes import board_user, subscriber_user
|
|
||||||
from core.models import User
|
|
||||||
from counter.models import Counter
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def customer_user() -> User:
|
|
||||||
return subscriber_user.make()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def counter_bar() -> Counter:
|
|
||||||
return baker.make(Counter, type="BAR")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def barmen(counter_bar: Counter) -> User:
|
|
||||||
user = subscriber_user.make(password=make_password("plop"))
|
|
||||||
counter_bar.sellers.add(user)
|
|
||||||
return user
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def board_member() -> User:
|
|
||||||
return board_user.make()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def root_user() -> User:
|
|
||||||
return baker.make(User, is_superuser=True)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("connected_user"),
|
|
||||||
[
|
|
||||||
None, # Anonymous user
|
|
||||||
"barmen",
|
|
||||||
"customer_user",
|
|
||||||
"board_member",
|
|
||||||
"root_user",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_get_customer_fail(
|
|
||||||
client: Client,
|
|
||||||
customer_user: User,
|
|
||||||
request: pytest.FixtureRequest,
|
|
||||||
connected_user: str | None,
|
|
||||||
):
|
|
||||||
if connected_user is not None:
|
|
||||||
client.force_login(request.getfixturevalue(connected_user))
|
|
||||||
assert (
|
|
||||||
client.get(
|
|
||||||
reverse("api:get_customer", kwargs={"customer_id": customer_user.id})
|
|
||||||
).status_code
|
|
||||||
== 403
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_get_customer_from_bar_fail_wrong_referrer(
|
|
||||||
client: Client, customer_user: User, barmen: User, counter_bar: Counter
|
|
||||||
):
|
|
||||||
client.post(
|
|
||||||
reverse("counter:login", args=[counter_bar.pk]),
|
|
||||||
{"username": barmen.username, "password": "plop"},
|
|
||||||
)
|
|
||||||
|
|
||||||
assert (
|
|
||||||
client.get(
|
|
||||||
reverse("api:get_customer", kwargs={"customer_id": customer_user.id})
|
|
||||||
).status_code
|
|
||||||
== 403
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_get_customer_from_bar_success(
|
|
||||||
client: Client, customer_user: User, barmen: User, counter_bar: Counter
|
|
||||||
):
|
|
||||||
client.post(
|
|
||||||
reverse("counter:login", args=[counter_bar.pk]),
|
|
||||||
{"username": barmen.username, "password": "plop"},
|
|
||||||
)
|
|
||||||
|
|
||||||
response = client.get(
|
|
||||||
reverse("api:get_customer", kwargs={"customer_id": customer_user.id}),
|
|
||||||
HTTP_REFERER=reverse(
|
|
||||||
"counter:click",
|
|
||||||
kwargs={"counter_id": counter_bar.id, "user_id": customer_user.id},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assert response.status_code == 200
|
|
||||||
assert response.json() == {
|
|
||||||
"user": customer_user.id,
|
|
||||||
"account_id": customer_user.customer.account_id,
|
|
||||||
"amount": f"{customer_user.customer.amount:.2f}",
|
|
||||||
"recorded_products": customer_user.customer.recorded_products,
|
|
||||||
}
|
|
@ -72,9 +72,7 @@ class TestCounter(TestCase):
|
|||||||
kwargs={"customer_id": self.richard.customer.pk},
|
kwargs={"customer_id": self.richard.customer.pk},
|
||||||
)
|
)
|
||||||
|
|
||||||
response = self.client.get(
|
response = self.client.get(counter_url)
|
||||||
response.get("location"),
|
|
||||||
)
|
|
||||||
assert ">Richard Batsbak</" in str(response.content)
|
assert ">Richard Batsbak</" in str(response.content)
|
||||||
|
|
||||||
self.client.post(
|
self.client.post(
|
||||||
|
Loading…
Reference in New Issue
Block a user