Skip to content

Commit

Permalink
Merge pull request #2 from atsanda/bug-complete-order
Browse files Browse the repository at this point in the history
(bug) order complete twice
  • Loading branch information
atsanda authored Mar 24, 2021
2 parents 585674a + dc781ca commit cc8ff42
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
3 changes: 2 additions & 1 deletion candy_shop/apps/delivery/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,8 @@ class CompleteOrderSerializer(serializers.Serializer):
order_id = serializers.PrimaryKeyRelatedField(queryset=Order.objects.all())

def validate_order_id(self, value):
if value.status != Order.OrderStatus.ASSIGNED:
if not (value.status in [Order.OrderStatus.ASSIGNED,
Order.OrderStatus.COMPLETE]):
raise serializers.ValidationError("Order has invalid status")
return value

Expand Down
3 changes: 3 additions & 0 deletions candy_shop/apps/delivery/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ def assign_orders(courier):


def complete_order(courier: Courier, order: Order):
if order.status == Order.OrderStatus.COMPLETE:
return order

order.status = Order.OrderStatus.COMPLETE
order.complete_time = timezone.now()

Expand Down
28 changes: 28 additions & 0 deletions candy_shop/apps/delivery/tests/test_orders_complete.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import pytest
import json
from rest_framework import status
from candy_shop.apps.delivery.models import Order


@pytest.fixture
Expand Down Expand Up @@ -77,3 +78,30 @@ def test_invalid_complete(simple_setup, client):
json.dumps(complete),
content_type="application/json")
assert response.status_code == status.HTTP_400_BAD_REQUEST


@pytest.mark.django_db
@pytest.mark.integration
def test_complete_twice(simple_setup, client):
complete = {
"courier_id": 1,
"order_id": 1,
}
response = client.post(
'/orders/complete',
json.dumps(complete),
content_type="application/json")
assert response.status_code == status.HTTP_200_OK
assert response.data['order_id'] == 1

complete_time = Order.objects.get(pk=1).complete_time

response = client.post(
'/orders/complete',
json.dumps(complete),
content_type="application/json")
assert response.status_code == status.HTTP_200_OK
assert response.data['order_id'] == 1

assert Order.objects.get(pk=1).complete_time == complete_time

0 comments on commit cc8ff42

Please sign in to comment.