[ADD] pms: add product.template tests

This commit is contained in:
miguelpadin
2021-06-15 21:34:35 +02:00
parent 0afeba30c8
commit 86876407cf
2 changed files with 305 additions and 0 deletions

View File

@@ -40,3 +40,4 @@ from . import test_pms_board_service_room_type_line
from . import test_pms_folio_invoice
from . import test_pms_folio_sale_line
from . import test_pms_wizard_split_join_swap_reservation
from . import test_product_template

View File

@@ -0,0 +1,304 @@
import datetime
from odoo import fields
from odoo.exceptions import ValidationError
from .common import TestPms
class TestProductTemplate(TestPms):
def setUp(self):
super().setUp()
self.room_type = self.env["pms.room.type"].create(
{
"name": "Room type test",
"default_code": "DBL_Test",
"class_id": self.room_type_class1.id,
}
)
self.room = self.env["pms.room"].create(
{
"pms_property_id": self.pms_property1.id,
"name": "Room test",
"room_type_id": self.room_type.id,
"capacity": 2,
}
)
self.partner = self.env["res.partner"].create({"name": "partner1"})
self.board_service = self.env["pms.board.service"].create(
{
"name": "Board service test",
"default_code": "BST",
}
)
def test_bs_consumed_on_after(self):
"""
Create a one day reservation with a board service configured to
consume after reservation night.
Date of service line with consumed on 'after' should match checkout date.
"""
# ARRANGE
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"consumed_on": "after",
}
)
self.env["pms.board.service.line"].create(
{
"product_id": product.id,
"pms_board_service_id": self.board_service.id,
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_room_type_id": self.room_type.id,
"pms_board_service_id": self.board_service.id,
}
)
date_checkin = fields.date.today()
date_checkout = fields.date.today() + datetime.timedelta(days=1)
# ACT
reservation = self.env["pms.reservation"].create(
{
"checkin": date_checkin,
"checkout": date_checkout,
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
}
)
# ASSERT
self.assertEqual(
reservation.service_ids.service_line_ids.date,
date_checkout,
"Date of service line with consumed on 'after' should match checkout date.",
)
def test_bs_consumed_on_before(self):
"""
Create a one day reservation with a board service configured to
consume before reservation night.
Date of service line with consumed on 'before' should match checkin date.
"""
# ARRANGE
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"consumed_on": "before",
}
)
self.env["pms.board.service.line"].create(
{
"product_id": product.id,
"pms_board_service_id": self.board_service.id,
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_room_type_id": self.room_type.id,
"pms_board_service_id": self.board_service.id,
}
)
date_checkin = fields.date.today()
date_checkout = fields.date.today() + datetime.timedelta(days=1)
# ACT
reservation = self.env["pms.reservation"].create(
{
"checkin": date_checkin,
"checkout": date_checkout,
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
}
)
# ASSERT
self.assertEqual(
reservation.service_ids.service_line_ids.date,
date_checkin,
"Date of service line with consumed on 'before' should match checkin date.",
)
def test_bs_daily_limit_equal(self):
"""
Create a one day reservation with a board service configured with
daily limit = 2 and capacity = 2
Reservation should created succesfully.
"""
# ARRANGE
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"daily_limit": 2,
"per_person": True,
}
)
self.env["pms.board.service.line"].create(
{
"product_id": product.id,
"pms_board_service_id": self.board_service.id,
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_room_type_id": self.room_type.id,
"pms_board_service_id": self.board_service.id,
}
)
date_checkin = fields.date.today()
date_checkout = fields.date.today() + datetime.timedelta(days=1)
# ACT
reservation = self.env["pms.reservation"].create(
{
"checkin": date_checkin,
"checkout": date_checkout,
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
}
)
# ASSERT
self.assertEqual(
reservation.service_ids.service_line_ids.day_qty,
self.room.capacity,
"The reservation should have been created.",
)
def test_bs_daily_limit_lower(self):
"""
Create a one day reservation with a board service configured with
daily limit = 2 and capacity = 1
Reservation should created succesfully.
"""
# ARRANGE
self.room.capacity = 1
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"daily_limit": 2,
"per_person": True,
}
)
self.env["pms.board.service.line"].create(
{
"product_id": product.id,
"pms_board_service_id": self.board_service.id,
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_room_type_id": self.room_type.id,
"pms_board_service_id": self.board_service.id,
}
)
date_checkin = fields.date.today()
date_checkout = fields.date.today() + datetime.timedelta(days=1)
# ACT
reservation = self.env["pms.reservation"].create(
{
"checkin": date_checkin,
"checkout": date_checkout,
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
}
)
# ASSERT
# self.assertTrue(reservation, "The reservation should have been created.")
# ASSERT
self.assertEqual(
reservation.service_ids.service_line_ids.day_qty,
self.room.capacity,
"The reservation should have been created.",
)
def test_bs_daily_limit_greater(self):
"""
Create a one day reservation with a board service configured with
daily limit = 1 and capacity = 2
Reservation creation should fail.
"""
# ARRANGE
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"type": "service",
"daily_limit": 1,
"list_price": 15.0,
"per_person": True,
}
)
self.env["pms.board.service.line"].create(
{
"product_id": product.id,
"pms_board_service_id": self.board_service.id,
}
)
board_service_room_type = self.env["pms.board.service.room.type"].create(
{
"pms_room_type_id": self.room_type.id,
"pms_board_service_id": self.board_service.id,
}
)
date_checkin = fields.date.today()
date_checkout = fields.date.today() + datetime.timedelta(days=1)
# ACT & ASSERT
with self.assertRaises(
ValidationError, msg="Reservation created but it shouldn't"
):
self.env["pms.reservation"].create(
{
"checkin": date_checkin,
"checkout": date_checkout,
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"adults": 2,
}
)
# TODO: Review this test
def _test_bs_is_extra_bed(self):
# ARRANGE
product = self.env["product.product"].create(
{
"name": "Product test",
"per_day": True,
"consumed_on": "after",
"is_extra_bed": True,
}
)
self.room.capacity = 1
extra_bed_service = self.env["pms.service"].create(
{
"is_board_service": False,
"product_id": product.id,
}
)
self.room.extra_beds_allowed = 1
# ACT
reservation = self.env["pms.reservation"].create(
{
"checkin": fields.date.today(),
"checkout": fields.date.today() + datetime.timedelta(days=1),
"room_type_id": self.room_type.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"service_ids": [extra_bed_service.id],
}
)
reservation._check_adults()
reservation.flush()
# TODO: pending tests (need review) -> per_day, per_person (with board service?)