Skip to content

Commit

Permalink
coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
rebkwok committed Jun 25, 2024
1 parent 2f6628a commit 6c701dd
Show file tree
Hide file tree
Showing 8 changed files with 133 additions and 27 deletions.
2 changes: 1 addition & 1 deletion booking/templatetags/bookingtags.py
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ def events_links(context, event_type):

if context["room_hires_exist"]:
event_types.update({"room_hires": ["booking:room_hires", "Room Hires"]})
if context["online_tutorials_exist"]:
if context["online_tutorials_exist"]: # pragma: no cover
event_types.update({"online_tutorials": ["booking:online_tutorials", "Online Tutorials"]})

del event_types[event_type]
Expand Down
8 changes: 8 additions & 0 deletions booking/tests/test_booking_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

from urllib.parse import urlsplit

import pytest

from django.conf import settings
from django.core import mail
from django.urls import reverse
Expand All @@ -25,6 +27,12 @@
from payments.helpers import create_booking_paypal_transaction


@pytest.mark.django_db
def test_permission_denied_page(client):
resp = client.get(reverse("booking:permission_denied"))
assert resp.status_code == 200


class BookingListViewTests(TestSetupMixin, TestCase):

@classmethod
Expand Down
23 changes: 23 additions & 0 deletions booking/tests/test_checkout_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,29 @@ def test_no_ticket_bookings(self, mock_payment_intent):
assert resp.status_code == 302
assert resp.url == reverse("booking:ticketed_events")

@patch("booking.views.checkout_views.stripe.PaymentIntent")
def test_ticket_bookings_total_none(self, mock_payment_intent):
mock_payment_intent_obj = self.get_mock_payment_intent(id="foo", amount=2000)
mock_payment_intent.create.return_value = mock_payment_intent_obj

ticket_booking = baker.make_recipe(
'booking.ticket_booking', ticketed_event__ticket_cost=5,
user=self.user, paid=False
)
baker.make("booking.Ticket", ticket_booking=ticket_booking, _quantity=2)

# no ticket bookings, redirects
resp = self.client.post(
self.url,
data={
"cart_ticket_booking_ref": ticket_booking.booking_reference,
"cart_ticket_bookings_total": ""
}
)
assert resp.status_code == 302
assert resp.url == reverse("booking:book_ticketed_event", args=(ticket_booking.ticketed_event.slug,))


@patch("booking.views.checkout_views.stripe.PaymentIntent")
def test_creates_invoice_and_applies_to_unpaid_gift_vouchers_anon_user(
self, mock_payment_intent
Expand Down
15 changes: 15 additions & 0 deletions booking/tests/test_event_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1148,6 +1148,21 @@ def test_room_hire_list_only_shows_open_bookings(self):
self.assertTrue(event1.id in booked_events)


class OnlineTutorialListViewTests(TestSetupMixin, TestCase):
"""
Test EventListView with room hires; reuses the event templates and context
data helpers
"""
@classmethod
def setUpTestData(cls):
super().setUpTestData()
baker.make_recipe('booking.future_OT', _quantity=4)

def test_online_tutorials(self):
resp = self.client.get(reverse('booking:online_tutorials'))
assert resp.context_data["events"].count() == 4


class LessonDetailViewTests(TestSetupMixin, TestCase):
"""
Test EventDetailView with lessons; reuses the event templates and
Expand Down
72 changes: 56 additions & 16 deletions booking/tests/test_membership_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,8 @@ def _setup_user_membership_and_bookings():
event = baker.make(Event, event_type=pc_event_type, date=datetime(2020, 3, 5, tzinfo=dt_tz.utc))
end_of_month_event = baker.make(Event, event_type=pc_event_type, date=datetime(2020, 3, 29, tzinfo=dt_tz.utc))
next_month_event = baker.make(Event, event_type=pc_event_type, date=datetime(2020, 4, 5, tzinfo=dt_tz.utc))
next_month_event1 = baker.make(Event, event_type=pc_event_type, date=datetime(2020, 4, 6, tzinfo=dt_tz.utc))
next_month_event2 = baker.make(Event, event_type=pc_event_type, date=datetime(2020, 4, 7, tzinfo=dt_tz.utc))

# active membership, no end date
user_membership = baker.make(
Expand Down Expand Up @@ -762,14 +764,31 @@ def _setup_user_membership_and_bookings():
event=next_month_event,
membership=user_membership,
)
return user_membership, booking, booking_end_of_month, booking_next
booking_next_cancelled = baker.make_recipe(
"booking.booking",
user=user_membership.user,
event=next_month_event1,
membership=user_membership,
status="CANCELLED",
)
booking_next_no_show = baker.make_recipe(
"booking.booking",
user=user_membership.user,
event=next_month_event2,
membership=user_membership,
status="OPEN",
no_show=True
)
return user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show


@pytest.mark.freeze_time("2020-03-21")
@patch("booking.models.membership_models.StripeConnector", MockConnector)
def test_reallocate_bookings(seller):
user_membership, booking, booking_end_of_month, booking_next = _setup_user_membership_and_bookings()
booking_set = {booking, booking_end_of_month, booking_next}
user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show = (
_setup_user_membership_and_bookings()
)
booking_set = {booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show }

# active membership, reallocating does nothing
user_membership.reallocate_bookings()
Expand All @@ -783,8 +802,10 @@ def test_reallocate_bookings(seller):
@pytest.mark.freeze_time("2020-03-21")
@patch("booking.models.membership_models.StripeConnector", MockConnector)
def test_reallocate_bookings_after_cancel(seller):
user_membership, booking, booking_end_of_month, booking_next = _setup_user_membership_and_bookings()
booking_set = {booking, booking_end_of_month, booking_next}
user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show = (
_setup_user_membership_and_bookings()
)
booking_set = {booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show}

# change status to cancelled
user_membership.subscription_status = "canceled"
Expand All @@ -798,15 +819,18 @@ def test_reallocate_bookings_after_cancel(seller):

# next months booking has been removed
assert set(user_membership.bookings.all()) == {booking, booking_end_of_month}
assert booking_next.membership == None
assert not booking_next.paid
for booking in [booking_next, booking_next_cancelled, booking_next_no_show]:
assert booking.membership is None
assert not booking.paid


@pytest.mark.freeze_time("2020-03-21")
@patch("booking.models.membership_models.StripeConnector", MockConnector)
def test_reallocate_bookings_after_cancel_with_other_membership_inactive(seller):
user_membership, booking, booking_end_of_month, booking_next = _setup_user_membership_and_bookings()
booking_set = {booking, booking_end_of_month, booking_next}
user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show = (
_setup_user_membership_and_bookings()
)
booking_set = {booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show}

# change status to cancelled
user_membership.subscription_status = "canceled"
Expand All @@ -832,15 +856,19 @@ def test_reallocate_bookings_after_cancel_with_other_membership_inactive(seller)
assert set(user_membership.bookings.all()) == {booking, booking_end_of_month}
# not allocated to next membership
assert set(next_user_membership.bookings.all()) == set()
assert booking_next.membership == None
assert not booking_next.paid
assert set(user_membership.bookings.all()) == {booking, booking_end_of_month}
for booking in [booking_next, booking_next_cancelled, booking_next_no_show]:
assert booking.membership == None
assert not booking.paid


@pytest.mark.freeze_time("2020-03-21")
@patch("booking.models.membership_models.StripeConnector", MockConnector)
def test_reallocate_bookings_after_cancel_with_other_membership_active(seller):
user_membership, booking, booking_end_of_month, booking_next = _setup_user_membership_and_bookings()
booking_set = {booking, booking_end_of_month, booking_next}
user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show = (
_setup_user_membership_and_bookings()
)
booking_set = {booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show}

# change status to cancelled
user_membership.subscription_status = "canceled"
Expand Down Expand Up @@ -869,12 +897,19 @@ def test_reallocate_bookings_after_cancel_with_other_membership_active(seller):
assert booking_next.membership == next_user_membership
assert booking_next.paid

for booking in [booking_next_cancelled, booking_next_no_show]:
assert booking.membership is None
assert not booking.paid
assert not booking.payment_confirmed


@pytest.mark.freeze_time("2020-03-21")
@patch("booking.models.membership_models.StripeConnector", MockConnector)
def test_reallocate_bookings_after_cancel_with_active_block(seller):
user_membership, booking, booking_end_of_month, booking_next = _setup_user_membership_and_bookings()
booking_set = {booking, booking_end_of_month, booking_next}
user_membership, booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show = (
_setup_user_membership_and_bookings()
)
booking_set = {booking, booking_end_of_month, booking_next, booking_next_cancelled, booking_next_no_show}

# make a valid block
block = baker.make_recipe(
Expand All @@ -901,4 +936,9 @@ def test_reallocate_bookings_after_cancel_with_active_block(seller):
# allocated to next membership
assert booking_next.membership is None
assert booking_next.block == block
assert booking_next.paid
assert booking_next.paid

for booking in [booking_next_cancelled, booking_next_no_show]:
assert booking.membership is None
assert not booking.paid
assert not booking.payment_confirmed
16 changes: 13 additions & 3 deletions booking/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class EventTests(TestCase):
def setUpTestData(cls):
cls.event = baker.make_recipe('booking.future_EV')

def test_location_index(self):
assert self.event.location_index == 1

def test_bookable_booking_not_open(self):
"""
Test that event bookable logic returns correctly
Expand Down Expand Up @@ -168,11 +171,18 @@ def test_online_class_show_video_link(self):

def test_allowed_group(self):
pp_et = baker.make_recipe("booking.event_type_PP")
pp = baker.make_recipe('booking.future_PP', event_type=pp_et, allowed_group_override=None)
assert pp.allowed_group_for_event() == pp_et.allowed_group
assert pp.allowed_group_description == pp_et.allowed_group.description
allowed_group = baker.make(AllowedGroup, description="test", group__name="test")
pp = baker.make_recipe('booking.future_PP', event_type=pp_et, allowed_group_override=allowed_group)
pp1 = baker.make_recipe('booking.future_PP', event_type=pp_et, allowed_group_override=None)

assert pp.allowed_group_for_event() == allowed_group
assert pp_et.allowed_group_description == pp_et.allowed_group.description
assert pp.allowed_group_description == "test"
assert pp1.allowed_group_description == "regular student only"


assert self.event.allowed_group == AllowedGroup.default_group()
assert self.event.allowed_group_description == "default group; open to all"


class BookingTests(PatchRequestMixin, TestCase):
Expand Down
10 changes: 10 additions & 0 deletions booking/tests/test_shopping_basket_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -819,6 +819,16 @@ def test_paypal_cart_items_unpaid_bookings(self):
booking_ids = ','.join(str(booking.id) for booking in self.user.bookings.all().order_by("id"))
assert self.client.session["cart_items"] == f"obj=booking ids={booking_ids} usr={self.user.email}"

@override_settings(PAYMENT_METHOD="paypal")
def test_paypal_cart_items_unpaid_bookings_overridden(self):
session = self.client.session
session["cart_items"] = f"obj=booking ids=3,4,5 [email protected]"
session.save()
resp = self.client.get(self.url)
self.assertEqual(len(resp.context['unpaid_bookings']), 6)
booking_ids = ','.join(str(booking.id) for booking in self.user.bookings.all().order_by("id"))
assert self.client.session["cart_items"] == f"obj=booking ids={booking_ids} usr={self.user.email}"

@override_settings(PAYMENT_METHOD="paypal")
def test_paypal_cart_items_unpaid_blocks(self):
# If we only have unpaid blocks, add the cart items to the session
Expand Down
14 changes: 7 additions & 7 deletions studioadmin/tests/test_views/test_activity_log_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,13 @@ def test_search_date_and_text_with_pagination(self):
timestamp=datetime(2015, 1, 1, 15, 10, tzinfo=dt_timezone.utc),
_quantity=25
)
resp = self._get_response(
self.staff_user, {
'search_submitted': 'Search',
'search_date': '01-Jan-2015',
}
)
self.assertEqual(len(resp.context_data['logs']), 20)
self.client.force_login(self.staff_user)
url = reverse('studioadmin:activitylog') + f"?search_submitted=Search&search_date='01-Jan-2015"
resp = self.client.get(url)
assert len(resp.context_data['logs']) == 20

resp = self.client.get(url + "&page=2")
assert len(resp.context_data['logs']) == ActivityLog.objects.count() - 20

def test_search_multiple_terms(self):
"""
Expand Down

0 comments on commit 6c701dd

Please sign in to comment.