Skip to content

Commit

Permalink
Merge pull request #818 from WesternFriend/orders-view-tests
Browse files Browse the repository at this point in the history
Order create view tests
  • Loading branch information
brylie committed Jul 20, 2023
2 parents 64966f9 + d95c075 commit 80e5d92
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 5 deletions.
82 changes: 78 additions & 4 deletions orders/tests.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
from django.test import TestCase
from unittest.mock import MagicMock, patch
from django.test import Client, TestCase
from django.urls import reverse


from .models import Order, OrderItem


Expand Down Expand Up @@ -37,10 +41,9 @@ def test_str_method(self) -> None:


class OrderItemModelTest(TestCase):
@classmethod
def setUpTestData(cls) -> None:
def setUp(self) -> None:
# Create an OrderItem instance using the factory
cls.order_item = OrderItem(
self.order_item = OrderItem(
id=1,
product_title="Quaker Faith & Practice",
product_id=1,
Expand All @@ -63,3 +66,74 @@ def test_get_cost_method(self) -> None:
self.order_item.get_cost(),
expected_cost,
)


class OrderCreateViewTest(TestCase):
def setUp(self) -> None:
# Create a client to make requests
self.client = Client()

# Mock the Cart
self.cart_mock = patch("cart.cart.Cart").start()

def tearDown(self) -> None:
# Stop the Cart mock
patch.stopall()

def test_order_create_view_get_request(self) -> None:
# Send a GET request
response = self.client.get(reverse("orders:order_create"))

# Check that the response has a status code of 200
self.assertEqual(response.status_code, 200)

# Check if the correct template was used
self.assertTemplateUsed(response, "orders/create.html")

def test_order_create_view_post_request_form_valid(self) -> None:
# Mock the OrderCreateForm
with patch("orders.forms.OrderCreateForm") as MockOrderCreateForm:
# Instance of the form
mock_form = MagicMock()

# Set is_valid to return True
mock_form.is_valid.return_value = True

# Set save to return a mock order with an id
mock_order = MagicMock()
mock_order.id = 1
mock_form.save.return_value = mock_order

# Set our mock form as the return value of the form class
MockOrderCreateForm.return_value = mock_form

# Send a POST request
response = self.client.post(reverse("orders:order_create"))

# Check that the response is a redirect
self.assertEqual(response.status_code, 302)

# Check if the redirect URL is correct
self.assertRedirects(
response,
reverse(
"payment:process_bookstore_order_payment",
kwargs={"order_id": mock_order.id},
),
fetch_redirect_response=False,
)

def test_order_create_view_post_request_form_invalid(self) -> None:
# Create a dictionary with the invalid data you want to test
invalid_data = {
"field_name": "invalid value",
} # replace with your actual invalid data

# Send a POST request using the client
response = self.client.post(reverse("orders:order_create"), invalid_data)

# Check that the response has a status code of 200
self.assertEqual(response.status_code, 200)

# Check if the correct template was used
self.assertTemplateUsed(response, "orders/create.html")
8 changes: 7 additions & 1 deletion orders/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,10 @@

app_name = "orders"

urlpatterns = [path("create", views.order_create, name="order_create")]
urlpatterns = [
path(
"create",
views.order_create,
name="order_create",
),
]

0 comments on commit 80e5d92

Please sign in to comment.