def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)

        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        self.usecase = CancelMeetingRoomUsecase(self.repository)
Exemplo n.º 2
0
    def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)
        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        domain_service = ReservationDomainService(self.repository)
        self.usecase = ChangeTimeRangeUsecase(self.repository, domain_service)
Exemplo n.º 3
0
def main():
    # 準備
    database_manager = DatabaseManager(DEV_DB_CONFIG)
    Model.set_connection_resolver(database_manager)

    reservation_repository = OratorReservationRepository()

    find_available_reservation_usecase = FindAvalibleReservationUsecase(reservation_repository)
    task_キャンセル対象 = Taskキャンセル対象(find_available_reservation_usecase)

    cancel_meeting_room_usecase = CancelMeetingRoomUsecase(reservation_repository)

    find_reservation_usecase = FindReservatnionUsecase()
    meeting_room_repository = OratorMeetingRoomRepository()
    meeting_room_domain_service = MeetingRoomDomainService(meeting_room_repository)
    find_meeting_room_usecase = FindMeetingRoomUseCase(meeting_room_repository, meeting_room_domain_service)

    message_builder = CliSuccessToCancelMessageBuilder(find_reservation_usecase=find_reservation_usecase,
                                                       find_meeting_room_usecase=find_meeting_room_usecase)

    coordinator = CancelMeetingCoordinator(task_キャンセル対象, cancel_meeting_room_usecase, message_builder)

    # 実行
    try:
        coordinator.cancel_meeting_room()
    except Exception as e:
        print('Internal Server Error')
        # TODO: logging
        print(e)
class TestOratorCancelMeetingRoomUsecase:
    def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)

        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        self.usecase = CancelMeetingRoomUsecase(self.repository)

    def test_指定した予約のみがキャンセルとなること(self):
        builder = DummyReservationBuilder()
        reservation_A = builder.with_meeting_room_id(MeetingRoomId('A')).build()
        reservation_B = builder.with_meeting_room_id(MeetingRoomId('B')).build()
        reservation_C = builder.with_meeting_room_id(MeetingRoomId('C')).build()

        self.repository.reserve_new_meeting_room(reservation_A)
        self.repository.reserve_new_meeting_room(reservation_B)
        self.repository.reserve_new_meeting_room(reservation_C)

        self.usecase.cancel_meeting_room(reservation_B.id)

        expected = [reservation_A,
                    dataclasses.replace(reservation_B, reservation_status=ReservationStatus.Canceled),
                    reservation_C]

        actual = [self.repository.find_by_id(reservation_A.id),
                  self.repository.find_by_id(reservation_B.id),
                  self.repository.find_by_id(reservation_C.id)]

        assert actual == expected
def 新規予約():
    database_manager = DatabaseManager(DEV_DB_CONFIG)
    Model.set_connection_resolver(database_manager)

    # TODO: ここのDIの仕方も、違うところでやるんだろう( Python Injectorとか?)
    reservation_repository = OratorReservationRepository()
    domain_service = ReservationDomainService(reservation_repository)
    usecase = ReserveMeetingRoomUsecase(reservation_repository, domain_service)

    # MeetingRoom に関する準備
    meeting_room_repository = OratorMeetingRoomRepository()
    meeting_room_domain_service = MeetingRoomDomainService(meeting_room_repository)
    find_meeting_room_usecase = FindMeetingRoomUseCase(meeting_room_repository, meeting_room_domain_service)

    # Employee に関する準備
    employee_repository = OratorEmployeeRepository()
    employee_domain_service = EmployeeDomainService(employee_repository)
    find_employee_usecase = FindEmployeeUseCase(employee_repository, employee_domain_service)

    success_message_builder = CliNewReservationSuccessMessageBuilder(find_meeting_room_usecase, find_employee_usecase)

    reservation_factory = ReservationFactory(meeting_room_repository, employee_repository)

    # ユーザー入力
    date = Task使用日().exe()
    start_time = Task開始時刻().exe()
    end_time = Task終了時刻().exe()
    meeting_room_id = Task会議室ID().exe()
    reserver_id = Task社員ID().exe()
    number_of_participants = Task使用人数().exe()

    try:
        reservation = reservation_factory.create(date,
                                                 start_time,
                                                 end_time,
                                                 meeting_room_id,
                                                 reserver_id,
                                                 number_of_participants)

    except (ReservationDomainObjectError, NotFoundMeetingRoomIdError, NotFoundEmployeeIdError) as e:
        print(e)
        exit()

    try:
        usecase.reserve_meeting_room(reservation)
    except ReservationUsecaseError as e:
        print(e)
        exit()

    success_message = success_message_builder.build(reservation)

    print(success_message)
    def test_find_available_reservations(self, past_reservation: Reservation):
        repository = OratorReservationRepository()
        usecase = FindAvailableReservationsUsecase(repository)

        builder = DummyReservationBuilder()
        available_reservation = builder.build()
        cancelled_reservation = builder.with_cancel().build()

        OratorReservationModel.to_orator_model(past_reservation).save()
        OratorReservationModel.to_orator_model(available_reservation).save()
        OratorReservationModel.to_orator_model(cancelled_reservation).save()

        assert usecase.find_available_reservations() == [available_reservation]
Exemplo n.º 7
0
class TestOratorReserveMeetingRoomUsecase:
    def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)
        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        domain_service = ReservationDomainService(self.repository)
        self.usecase = ReserveMeetingRoomUsecase(self.repository, domain_service)

    def test_予約ができること_正常系(self):
        reservation = DummyReservationBuilder().build()

        self.usecase.reserve_meeting_room(reservation)

        assert reservation == self.repository.find_by_id(reservation.id)
Exemplo n.º 8
0
class TestOratorChangeTimeRangeUsecase:
    def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)
        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        domain_service = ReservationDomainService(self.repository)
        self.usecase = ChangeTimeRangeUsecase(self.repository, domain_service)

    @freezegun.freeze_time('2020-4-1 10:00')
    def test_指定した予約の予約時間帯を変更できること(self):
        builder = DummyReservationBuilder()
        reservation_A = builder.with_meeting_room_id(
            MeetingRoomId('A')).build()
        reservation_B = builder.with_meeting_room_id(
            MeetingRoomId('B')).build()
        reservation_C = builder.with_meeting_room_id(
            MeetingRoomId('C')).build()

        self.repository.reserve_new_meeting_room(reservation_A)
        self.repository.reserve_new_meeting_room(reservation_B)
        self.repository.reserve_new_meeting_room(reservation_C)

        new_time_range_to_reserve = TimeRangeToReserve(
            使用日時(2020, 4, 9, 15, 00), 使用日時(2020, 4, 9, 17, 00))
        self.usecase.change_time_range(reservation_B.id,
                                       new_time_range_to_reserve)

        expected = [
            reservation_A,
            dataclasses.replace(
                reservation_B,
                time_range_to_reserve=new_time_range_to_reserve), reservation_C
        ]

        actual = [
            self.repository.find_by_id(reservation_A.id),
            self.repository.find_by_id(reservation_B.id),
            self.repository.find_by_id(reservation_C.id)
        ]

        assert actual == expected
class TestOratorChangeMeetingRoomUsecase:
    def setup(self):
        database_manager = DatabaseManager(TEST_DB_CONFIG)
        Model.set_connection_resolver(database_manager)

        migrate_in_memory(database_manager)

        self.repository = OratorReservationRepository()
        domain_service = ReservationDomainService(self.repository)
        self.usecase = ChangeMeetingRoomUseCase(self.repository,
                                                domain_service)

    def test_指定した予約の会議室を変更できること(self):
        builder = DummyReservationBuilder()
        reservation_A = builder.with_meeting_room_id(
            MeetingRoomId('A')).build()
        reservation_B = builder.with_meeting_room_id(
            MeetingRoomId('B')).build()
        reservation_C = builder.with_meeting_room_id(
            MeetingRoomId('C')).build()

        self.repository.reserve_new_meeting_room(reservation_A)
        self.repository.reserve_new_meeting_room(reservation_B)
        self.repository.reserve_new_meeting_room(reservation_C)

        meeting_room_id_Z = MeetingRoomId('Z')
        self.usecase.change_meeting_room(reservation_B.id, meeting_room_id_Z)

        expected = [
            reservation_A,
            dataclasses.replace(reservation_B,
                                meeting_room_id=meeting_room_id_Z),
            reservation_C
        ]

        actual = [
            self.repository.find_by_id(reservation_A.id),
            self.repository.find_by_id(reservation_B.id),
            self.repository.find_by_id(reservation_C.id)
        ]

        assert actual == expected