Ejemplo n.º 1
0
def test_is_compare():
    """Ensures that `is` operator works correctly."""
    some_container = Some(1)

    assert Nothing.bind(lambda state: state) is Nothing
    assert some_container.rescue(lambda: Some('fix')) is some_container
    assert some_container is not Some(1)
Ejemplo n.º 2
0
def test_success(service: ShowPricesForm, house, reservation, user, rate_plan,
                 room_type, room):
    policy_1 = Policy(id=101, house_id=house.id, name='P1')
    policy_2 = Policy(id=102, house_id=house.id, name='P2')

    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(get=Mock(return_value=Some(reservation)))
    service._prices_repo = Mock(select_plans=Mock(return_value=[rate_plan]))
    service._roomtypes_repo = Mock(select=Mock(return_value=[room_type]))
    service._rooms_repo = Mock(select=Mock(return_value=[room]))
    service._policies_repo = Mock(select=Mock(
        return_value=[policy_1, policy_2]))

    result = service.execute(house.id, reservation.id, reservation.rooms[0].id,
                             user)
    assert is_successful(result)

    ctx = result.unwrap()
    assert isinstance(ctx, ReservationPricesUpdateContext)
    assert ctx.house == house
    assert ctx.reservation == reservation
    assert ctx.reservation_room == reservation.rooms[0]
    assert ctx.rate_plans == [rate_plan]
    assert ctx.room_types == [room_type]
    assert ctx.rooms == [room]
    assert ctx.policies == [policy_1, policy_2]
def test_success(service: UpdateRoomClose, context: Context, house, room,
                 reservation):
    _reservation = attr.evolve(reservation, is_verified=True)
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._rooms_repo = Mock(get=Mock(return_value=Some(room)))
    service._reservations_repo = Mock(
        accept=Mock(return_value=Some(_reservation)),
        get=Mock(return_value=Some(reservation)),
        is_room_busy=Mock(return_value=False),
        save=Mock(
            return_value=(Some(attr.evolve(reservation, is_verified=False)),
                          True)),
    )

    result = service.execute(
        '111-222-1',
        house.id,
        room.id,
        context.start_date,
        context.end_date,
        RoomCloseReasons.MAINTENANCE,
        context.user,
    )
    assert is_successful(result), result.failure()

    ctx = result.unwrap()
    assert isinstance(ctx, ReservationUpdateContext)
    assert ctx.reservation == _reservation
    assert ctx.start_date == datetime.date.today()
    assert ctx.end_date == datetime.date.today() + datetime.timedelta(days=2)
Ejemplo n.º 4
0
def test_equality():
    """Ensures that containers can be compared."""
    assert Nothing is Nothing  # noqa: WPS312
    assert Nothing == _Nothing() == _Nothing(None)
    assert Some(5) == Some(5)
    assert hash(Some(1))
    assert hash(Nothing)
Ejemplo n.º 5
0
def test_nonequality():
    """Ensures that containers are not compared to regular values."""
    assert Nothing is not None
    assert Nothing != None  # noqa: E711
    assert _Nothing(None) != None  # noqa: E711
    assert Some(5) != 5
    assert Some(3) is not Some(3)
def test_success(
    service: UpdateReservationPrices,
    context: Context,
    house,
    reservation,
    rate_plan,
    room_type,
    room,
    user,
    cancellation_policy,
):
    _reservation = attr.evolve(reservation, price_accepted=Decimal(3600))

    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._roomtypes_repo = Mock(select=Mock(return_value=[room_type]))
    service._rooms_repo = Mock(select=Mock(return_value=[room]))
    service._prices_repo = Mock(get_plan=Mock(return_value=Some(rate_plan)))
    service._reservations_repo = Mock(
        get=Mock(return_value=Some(reservation)),
        save=Mock(return_value=(Some(_reservation), True)))
    service._policies_repo = Mock(get=Mock(
        return_value=Some(cancellation_policy)))

    result = service.execute(house.id,
                             reservation.id,
                             reservation.rooms[0].id,
                             rate_plan.id,
                             user,
                             prices=context.prices)
    assert is_successful(result)
    assert result.unwrap() == _reservation
def test_success(service: CreateRoomClose, context: Context, house, room):
    reservation = Reservation(
        id=111,
        house_id=house.id,
        connection_id=None,
        source=ReservationSources.MANUAL,
        channel=None,
        channel_id="",
        checkin=context.start_date,
        checkout=context.end_date,
        booked_at=timezone.now(),
        status=ReservationStatuses.CLOSE,
        is_verified=True,
    )
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._rooms_repo = Mock(get=Mock(return_value=Some(room)))
    service._reservations_repo = Mock(
        save=Mock(
            return_value=(Some(attr.evolve(reservation, is_verified=False)),
                          True)),
        accept=Mock(return_value=Some(reservation)),
        is_room_busy=Mock(return_value=False),
    )

    result = service.execute(house.id, room.id, context.start_date,
                             context.end_date, RoomCloseReasons.MAINTENANCE,
                             context.user)
    assert is_successful(result), result.failure()
    assert result.unwrap() == attr.evolve(reservation, is_verified=True)
Ejemplo n.º 8
0
def test_bind_optional():
    """Ensures that bind_optional works correctly."""
    def factory(inner_value: int) -> Optional[int]:
        return inner_value if inner_value else None

    assert Some(1).bind_optional(factory) == Some(1)
    assert Some(0).bind_optional(factory) == Nothing
    assert Nothing.bind_optional(factory) == Nothing
Ejemplo n.º 9
0
def test_read(args: dict):
    config = MapReader(args).read

    assert config("a", int) == Some(1)
    assert config("b", str) == Some("B")

    assert config("c", str) == Nothing
    assert config("a", str) == Nothing
Ejemplo n.º 10
0
def test_rescue_some():
    """Ensures that rescue works for Some container."""
    def factory(_) -> Maybe[int]:
        return Some(10)

    bound = Some(5).rescue(factory)

    assert bound == Some(5)
Ejemplo n.º 11
0
    def test_hbox_layout(self):
        layout = HBoxLayout()

        container = Frame(self.context, layout)
        container.bounds = Bounds(5, 5, 90, 90)

        child1 = Panel(self.context)
        child1.preferred_size_override = Some(Dimension(20, 50))
        child1.set_color(StyleKeys.Background, RGBA(1, 0, 0, 1))

        container.add(child1)

        child2 = Panel(self.context)
        child2.preferred_size_override = Some(Dimension(15, 60))
        child2.minimum_size_override = Some(Dimension(15, 60))
        child2.set_color(StyleKeys.Background, RGBA(0, 1, 0, 1))

        container.add(child2)

        child3 = Panel(self.context)
        child3.preferred_size_override = Some(Dimension(30, 40))
        child3.minimum_size_override = Some(Dimension(10, 20))
        child3.set_color(StyleKeys.Background, RGBA(0, 0, 1, 1))

        container.add(child3)

        def test(direction: BoxDirection, spacing: float, padding: Insets, align: BoxAlign):
            container.bounds = Bounds(5, 5, 90, 90)

            layout.spacing = spacing
            layout.padding = padding
            layout.align = align

            self.assertEqual(True, container.layout_pending)
            self.context.process()
            self.assertEqual(False, container.layout_pending)

            (top, right, bottom, left) = padding.tuple

            prefix = f"hbox-{direction.name}-{spacing}-{top},{right},{bottom},{left}-{align.name}-"

            self.assertImage(prefix + "full-size", self.context)

            container.bounds = Bounds(5, 5, 45, 45)

            self.assertEqual(True, container.layout_pending)
            self.context.process()
            self.assertEqual(False, container.layout_pending)

            self.assertImage(prefix + "half-size", self.context)

        for d in BoxDirection:
            for s in [0, 10]:
                for p in [Insets(0, 0, 0, 0), Insets(15, 20, 10, 5)]:
                    for a in BoxAlign:
                        test(d, s, p, a)
Ejemplo n.º 12
0
    def test_on_style_change(self):
        lookup = StyleLookup()

        changes = []

        lookup.on_style_change.subscribe(changes.append)

        self.assertEqual([], changes)

        lookup.set_color("color1", RGBA(1, 0, 0, 1))
        lookup.set_color("color1",
                         RGBA(1, 0, 0,
                              1))  # Should ignore duplicated requests.

        self.assertEqual(
            [ColorChangeEvent(lookup, "color1", Some(RGBA(1, 0, 0, 1)))],
            changes)

        lookup.set_color("color2", RGBA(0, 1, 0, 1))

        self.assertEqual(
            [ColorChangeEvent(lookup, "color2", Some(RGBA(0, 1, 0, 1)))],
            changes[1:])

        lookup.set_color("color2", RGBA(0, 1, 1, 1))

        self.assertEqual(
            [ColorChangeEvent(lookup, "color2", Some(RGBA(0, 1, 1, 1)))],
            changes[2:])

        font = ToyFontFace("Sans")

        lookup.set_font("font1", font)

        self.assertEqual([FontChangeEvent(lookup, "font1", Some(font))],
                         changes[3:])

        lookup.clear_color("color1")
        lookup.clear_font("font1")

        self.assertEqual([ColorChangeEvent(lookup, "color1", Nothing)],
                         changes[4:5])
        self.assertEqual([FontChangeEvent(lookup, "font1", Nothing)],
                         changes[5:])

        padding = Insets(5, 5, 5, 5)

        lookup.set_insets("padding", padding)

        self.assertEqual([InsetsChangeEvent(lookup, "padding", Some(padding))],
                         changes[6:])

        lookup.clear_insets("padding")

        self.assertEqual([InsetsChangeEvent(lookup, "padding", Nothing)],
                         changes[7:])
Ejemplo n.º 13
0
def test_success_not_changed_quotation(service: UpdateReservationInOdoo, house,
                                       user, reservation, room_type):
    api = Mock(
        update_opportunity=Mock(return_value=None),
        get_quotation_items=Mock(return_value=[
            {
                'id': 1230,
                'product_id': [room_type.id, room_type.name],
                'item_date': datetime.date.today().strftime(DATE_FORMAT),
                'product_uom_qty': 1.0,
                'price_unit': 1120.0,
            },
            {
                'id':
                1231,
                'product_id': [room_type.id, room_type.name],
                'item_date': (
                    datetime.date.today() +
                    datetime.timedelta(days=1)).strftime(DATE_FORMAT),
                'product_uom_qty':
                1.0,
                'price_unit':
                1120.0,
            },
            {
                'id':
                1232,
                'product_id': [room_type.id, room_type.name],
                'item_date': (
                    datetime.date.today() +
                    datetime.timedelta(days=2)).strftime(DATE_FORMAT),
                'product_uom_qty':
                1.0,
                'price_unit':
                1120.0,
            },
        ]),
        get_quotation=Mock(return_value=Some(Mock(id=321, state='draft'))),
        unlock_quotation=Mock(return_value=None),
        confirm_quotation=Mock(return_value=None),
        update_quotation_items=Mock(return_value=None),
    )
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(get=Mock(return_value=Some(reservation)))
    service._members_repo = Mock(get_user_by_id=Mock(return_value=Some(user)))
    service.get_rpc_api = Mock(return_value=api)

    result = service.execute(house.id, reservation.id, user_id=user.id)
    assert is_successful(result)

    api.update_opportunity.assert_called_once()
    api.get_quotation_items.assert_called_once()
    api.get_quotation.assert_not_called()
    api.unlock_quotation.assert_not_called()
    api.update_quotation_items.assert_not_called()
    api.confirm_quotation.assert_not_called()
Ejemplo n.º 14
0
def test_success_for_canceled(service: CancelReservation, house, reservation,
                              user):
    _reservation = attr.evolve(reservation, status=ReservationStatuses.CANCEL)
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(get=Mock(
        return_value=Some(_reservation)))

    result = service.execute(house.id, reservation.id, user)
    assert is_successful(result)
    assert result.unwrap() == _reservation
def test_success(service: DeleteRoomClose, house, reservation, user):
    _reservation = attr.evolve(reservation, status=ReservationStatuses.CANCEL)
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(
        get=Mock(return_value=Some(reservation)),
        save=Mock(return_value=(Some(_reservation), True)))

    result = service.execute('111-222-1', house.id, user)
    assert is_successful(result), result.failure()
    assert result.unwrap() == _reservation
Ejemplo n.º 16
0
def test_success(service: CancelReservationInOdoo, house, reservation, user):
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(get=Mock(return_value=Some(reservation)))
    service._members_repo = Mock(get_user_by_id=Mock(return_value=Some(user)))
    service.get_rpc_api = Mock(
        return_value=Mock(cancel_opportunity=Mock(return_value=None),
                          cancel_quotation=Mock(return_value=None)))

    result = service.execute(house.id, reservation.id, user_id=user.id)
    assert is_successful(result)
    assert result.unwrap()
Ejemplo n.º 17
0
def test_success(service: UpdateReservationGuest, house, reservation):
    _reservation = attr.evolve(reservation, guest_name='John')
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(
        get=Mock(return_value=Some(reservation)),
        save=Mock(return_value=(Some(_reservation), True)))

    result = service.execute(house.id, reservation.id, 11, 'name',
                             'John Smith')
    assert is_successful(result)
    assert result.unwrap() == _reservation
Ejemplo n.º 18
0
def test_success(
    service: CalculateNewReservation,
    context: Context,
    house,
    room_type,
    rate_plan,
    rate,
    user,
    last_min_discount,
    availability_discount,
    los_discount,
):
    rates = [rate, attr.evolve(rate, id=101, occupancy=3)]
    period = [
        context.start_date, context.start_date + datetime.timedelta(days=1)
    ]

    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._roomtypes_repo = Mock(get=Mock(return_value=Some(room_type)))
    service._prices_repo = Mock(
        get_plan=Mock(return_value=Some(rate_plan)),
        select_rates=Mock(return_value=rates),
        select_prices=Mock(return_value={
            period[0]: Decimal(100),
            period[1]: Decimal(110)
        }),
        select_restrictions=Mock(return_value={
            period[0]: Decimal(80),
            period[1]: Decimal(80)
        }),
    )
    service._discounts_repo = Mock(select=Mock(
        return_value={
            DiscountTypes.LAST_MINUTE: [last_min_discount],
            DiscountTypes.AVAILABILITY: [availability_discount],
            DiscountTypes.LOS: [los_discount],
        }))
    service._occupancy_repo = Mock(get=Mock(return_value={
        period[0]: 3,
        period[1]: 1
    }))

    result = service.execute(house.id, room_type.id, rate_plan.id,
                             context.start_date, context.end_date, 2, user)
    assert is_successful(result), result.failure()

    ctx = result.unwrap()
    assert isinstance(ctx, ReservationCalcContext)
    assert ctx.room_type == room_type
    assert ctx.rate_plan == rate_plan
    assert ctx.rates == rates
    assert ctx.rate == rate
    assert ctx.prices == {period[0]: Decimal(80), period[1]: Decimal("93.50")}
def test_success_for_accepted(service: AcceptHoldReservation, house,
                              reservation, user):
    _reservation = attr.evolve(reservation, status=ReservationStatuses.NEW)
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(get=Mock(
        return_value=Some(_reservation)))
    service.get_rpc_api = Mock(return_value=Mock(confirm_quotation=Mock(
        return_value=None)))

    result = service.execute(house.id, reservation.id, user)
    assert is_successful(result)
    assert result.unwrap()
Ejemplo n.º 20
0
    def test_items(self):
        layout = BorderLayout()

        container = Frame(self.context, layout)

        child1 = Panel(self.context)
        child2 = Panel(self.context)
        child3 = Panel(self.context)
        child4 = Panel(self.context)
        child5 = Panel(self.context)

        container.add(child1)
        container.add(child2, Border.Left)
        container.add(child3, Border.Top, Insets(2, 2, 2, 2))
        container.add(child4, Border.Right, padding=Insets(5, 5, 5, 5))
        container.add(child5,
                      region=Border.Bottom,
                      padding=Insets(10, 10, 10, 10))

        def assert_item(item: BorderItem, child: Component, border: Border,
                        padding: Insets) -> None:
            self.assertEqual(child, item.component.unwrap())
            self.assertEqual(border, item.border)
            self.assertEqual(padding, item.padding)

        assert_item(layout.areas[Border.Center], child1, Border.Center,
                    Insets(0, 0, 0, 0))
        assert_item(layout.areas[Border.Top], child3, Border.Top,
                    Insets(2, 2, 2, 2))
        assert_item(layout.areas[Border.Right], child4, Border.Right,
                    Insets(5, 5, 5, 5))
        assert_item(layout.areas[Border.Bottom], child5, Border.Bottom,
                    Insets(10, 10, 10, 10))
        assert_item(layout.areas[Border.Left], child2, Border.Left,
                    Insets(0, 0, 0, 0))

        container.add(child1, Border.Right)
        container.remove(child2)
        container.remove(child3)

        assert_item(layout.areas[Border.Right], child1, Border.Right,
                    Insets(0, 0, 0, 0))

        # noinspection PyTypeChecker
        children = Fold.collect_all(
            map(lambda a: a.component, layout.areas.values()), Some(
                ())).unwrap()

        self.assertEqual({child5, child1}, set(children))
        self.assertEqual(Nothing, layout.areas[Border.Top].component)
        self.assertEqual(Some(child1), layout.areas[Border.Right].component)
        self.assertEqual(Some(child5), layout.areas[Border.Bottom].component)
        self.assertEqual(Nothing, layout.areas[Border.Left].component)
def test_success(service: AcceptReservationChanges, house, reservation, user):
    _reservation = attr.evolve(reservation, is_verified=True)
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(
        get=Mock(return_value=Some(reservation)),
        accept=Mock(return_value=Some(_reservation)))

    result = service.execute(house.id,
                             reservation.id,
                             user,
                             price_ids=[311, 313])
    assert is_successful(result)
    assert result.unwrap() == _reservation
def test_success(service: AttachContactToReservation, context: Context, house,
                 reservation):
    _reservation = attr.evolve(reservation,
                               guest_contact_id=200,
                               guest_contact_ids=[200])
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(
        get=Mock(return_value=Some(reservation)),
        save=Mock(return_value=(Some(_reservation), True)))

    result = service.execute(house.id, reservation.id, 200)
    assert is_successful(result)
    assert result.unwrap()
Ejemplo n.º 23
0
def test_immutability_success():
    """Ensures that Success container is immutable."""
    with pytest.raises(ImmutableStateError):
        Some(0)._inner_state = 1  # noqa: WPS437

    with pytest.raises(ImmutableStateError):
        Some(1).missing = 2

    with pytest.raises(ImmutableStateError):
        del Some(0)._inner_state  # type: ignore # noqa: WPS420, WPS437

    with pytest.raises(AttributeError):
        Some(1).missing  # type: ignore # noqa: WPS428
Ejemplo n.º 24
0
    def test_no_anchor(self):
        self.context.process()
        self.assertImage("no-anchor", self.context)

        self.child.preferred_size_override = Some(Dimension(120, 130))

        self.context.process()
        self.assertImage("no-anchor-over-sized", self.context)

        self.child.minimum_size_override = Some(Dimension(60, 40))
        self.container.bounds = Bounds(0, 0, 50, 50)

        self.context.process()
        self.assertImage("no-anchor-min-size", self.context)
def test_success(service: UpdateReservationCache, house, reservation,
                 rate_plan, user):
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))
    service._reservations_repo = Mock(select=Mock(return_value=[reservation]))
    service._cache_repo = Mock(save=Mock(return_value=True),
                               delete=Mock(return_value=None))
    service._prices_repo = Mock(select_plans=Mock(return_value=[rate_plan]))
    service._members_repo = Mock(get_bot_user=Mock(return_value=Some(user)))
    service.get_rpc_api = Mock(return_value=Mock(
        select_invoices_for_order=Mock(return_value=[
            Mock(id=987, amount_total=50.0, amount_residual=20.0)
        ])))

    result = service.execute(house_id=house.id)
    assert is_successful(result)
Ejemplo n.º 26
0
    def create(self, key: str) -> Maybe[BlenderImage]:
        if key is None:
            raise ValueError("Argument 'key' is required.")

        try:
            # noinspection PyTypeChecker
            return Some(BlenderImage(bpy.data.images[key]))
        except KeyError:
            if Path(bpy.path.abspath(key)).exists():
                images = cast(BlendDataImages, bpy.data.images)
                image = images.load(key, check_existing=False)

                return Some(BlenderImage(image))

        return Nothing
Ejemplo n.º 27
0
    def test_validation(self):
        canvas = Canvas(self.context)
        canvas.validate()

        self.assertEqual(True, canvas.valid)

        image = self.context.toolkit.images[FixturePath]

        canvas.image = Some(image)

        self.assertEqual(False, canvas.valid)

        canvas.validate()

        self.assertEqual(True, canvas.valid)

        def test_style(lookup: StyleLookup):
            canvas.validate()

            lookup.set_insets("NonExistentKey", Insets(10, 10, 10, 10))

            self.assertEqual(True, canvas.valid)

            canvas.validate()
            lookup.set_insets(StyleKeys.Padding, Insets(10, 10, 10, 10))

            self.assertEqual(False, canvas.valid)

        test_style(self.context.look_and_feel)
        test_style(canvas)
def test_select_reservation_ok(service: RegisterReservationInOdoo, context: Context, house, reservation):
    service._reservations_repo = Mock(get=Mock(return_value=Some(reservation)))
    context.house = house

    result = service.select_reservation(context)
    assert is_successful(result)
    assert result.unwrap().reservation == reservation
def test_select_house_ok(service: UpdateReservationPrices, context: Context,
                         house):
    service._houses_repo = Mock(get=Mock(return_value=Some(house)))

    result = service.select_house(context)
    assert is_successful(result)
    assert result.unwrap().house == house
def test_select_user_ok(service: RegisterReservationInOdoo, context: Context, house, user):
    service._members_repo = Mock(get_user_by_id=Mock(return_value=Some(user)))
    context.house = house

    result = service.select_user(context)
    assert is_successful(result)
    assert result.unwrap().user == user