Example #1
0
File: ro.py Project: jqbx-bot/bot
class RockOutCommandProcessor(AbstractCommandProcessor):
    def __init__(self, room_state: AbstractRoomState = RoomState.get_instance(),
                 data_service: AbstractDataService = DataService()):
        self.__voting_machine = VotingMachine('row')
        self.__room_state = room_state
        self.__data_service = data_service

    @property
    def keyword(self) -> str:
        return 'ro'

    @property
    def help(self) -> str:
        return '''
            Votes for the bot to rock out (dope) a song. Requires 3 people.
        '''

    def process(self, user_id: str, payload: Optional[str] = None) -> None:
        self.__voting_machine.vote(user_id, self.__dope_and_add_to_playlist)

    def __dope_and_add_to_playlist(self, bot_controller: AbstractBotController) -> None:
        bot_controller.dope()
        bot_controller.chat('row, row, row your :canoe: gently down the stream!')
        playlist_id = self.__data_service.add_to_favorites_playlist(self.__room_state.current_track['id'])
        bot_controller.chat('This track has been added to https://open.spotify.com/playlist/%s' % playlist_id)
Example #2
0
class VotingMachineTest(TestCase):
    def setUp(self) -> None:
        self.__bot_controller = FakeBotController()
        self.__room_state = RoomState.get_instance(self.__bot_controller)
        self.__voting_machine = VotingMachine('row', self.__bot_controller,
                                              self.__room_state)
        self.__room_state.set_current_track(create_random_id_object())
        self.__mo = create_random_string()
        self.__curly = create_random_string()
        self.__joe = create_random_string()

    def test_ro(self) -> None:
        self.__do_vote(self.__mo)
        self.__dequeue_and_assert_chats(['row'])

    def test_ro_twice_same_user(self) -> None:
        self.__do_vote(self.__mo)
        self.__do_vote(self.__mo)
        self.__dequeue_and_assert_chats(['row', 'You\'ve already voted'])
        self.assertFalse(self.__bot_controller.doped)

    def test_ro_two_different_songs(self) -> None:
        self.__do_vote(self.__mo)
        self.__room_state.set_current_track(create_random_id_object())
        self.__do_vote(self.__mo)
        self.__dequeue_and_assert_chats(['row', 'row'])
        self.assertFalse(self.__bot_controller.doped)

    def test_ro_ro(self) -> None:
        self.__do_vote(self.__mo)
        self.__do_vote(self.__curly)
        self.__dequeue_and_assert_chats(['row', 'row, row'])
        self.assertFalse(self.__bot_controller.doped)

    def test_ro_ro_ro(self) -> None:
        self.__do_vote(self.__mo)
        self.__do_vote(self.__curly)
        self.__do_vote(self.__joe)
        self.__dequeue_and_assert_chats(['row', 'row, row'])
        self.assertTrue(self.__bot_controller.doped)

    def test_already_bopping(self) -> None:
        self.__bot_controller.dope()
        self.__do_vote(self.__mo)
        self.__dequeue_and_assert_chats(['I\'m already bopping to this'])

    def test_already_hating(self) -> None:
        self.__bot_controller.nope()
        self.__do_vote(self.__mo)
        self.__dequeue_and_assert_chats(['I\'m already hating this'])

    def __do_vote(self, user_id: str) -> None:
        self.__voting_machine.vote(user_id, lambda x: x.dope())

    def __dequeue_and_assert_chats(self, expected_chats: List[str]) -> None:
        chats = self.__bot_controller.dequeue_chats()
        self.assertEqual(expected_chats, chats)
Example #3
0
 def setUp(self) -> None:
     self.__bot_controller = FakeBotController()
     self.__room_state = RoomState.get_instance(self.__bot_controller)
     self.__voting_machine = VotingMachine('row', self.__bot_controller,
                                           self.__room_state)
     self.__room_state.set_current_track(create_random_id_object())
     self.__mo = create_random_string()
     self.__curly = create_random_string()
     self.__joe = create_random_string()
Example #4
0
class NockOutCommandProcessor(AbstractCommandProcessor):
    def __init__(self):
        self.__voting_machine = VotingMachine('no')

    @property
    def keyword(self) -> str:
        return 'no'

    @property
    def help(self) -> str:
        return '''
            Votes for the bot to downvote (nope) a song. Requires 3 people.
        '''

    def process(self, user_id: str, payload: Optional[str] = None) -> None:
        self.__voting_machine.vote(user_id, self.__nope)

    def __nope(self, bot_controller: AbstractBotController) -> None:
        bot_controller.nope()
        bot_controller.chat('no, no, no :-1: no way José!')
Example #5
0
File: ro.py Project: jqbx-bot/bot
 def __init__(self, room_state: AbstractRoomState = RoomState.get_instance(),
              data_service: AbstractDataService = DataService()):
     self.__voting_machine = VotingMachine('row')
     self.__room_state = room_state
     self.__data_service = data_service
Example #6
0
 def __init__(self):
     self.__voting_machine = VotingMachine('no')