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)
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)
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()
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é!')
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
def __init__(self): self.__voting_machine = VotingMachine('no')