def test_get_episode(self): ''' Tests getting episode from video's field. ''' configure_for_unittest() from model import Video, Show, Season, Episode show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010, 1, 1)).save() episode2 = Episode(season=season1, number=2).save() episode3 = Episode(season=season2, number=1).save() video = Video(link='vk.com').save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) season2.episodes.connect(episode3) episode1.videos.connect(video) video.refresh() self.assertEqual(video.episode.get().number, 1)
def test_subscriptions(self): ''' Tests responses on subscriptions request. ''' configure_for_unittest() from command import subscriptions from model import Show, Chat show1 = Show(title=u'House of Cards').save() show2 = Show(title=u'Teacher Gym').save() chat = Chat(id=1).save() bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # if there is at least one subscription chat.subscriptions.connect(show1) subscriptions(bot, upd) lines = (u'Active subscriptions:\n', u'▪ House of Cards') self.assertEqual(bot.sended_message['text'], '\n'.join(lines)) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # if no subscriptions chat.subscriptions.disconnect(show1) subscriptions(bot, upd) self.assertEqual(bot.sended_message['text'], _('You are not subscribed to any of the series.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)
def test_database_access(self): from util import configure_for_unittest configure_for_unittest() graph = Graph(environ['NEO4J_REST_URL']) cypher = graph.cypher
def test_showlist(self): ''' Tests response on showlist request. ''' configure_for_unittest() from command import showlist from model import Show, Chat show1 = Show(title=u'House of Cards').save() show2 = Show(title=u'Физрук').save() chat = Chat(id=1).save() chat.subscriptions.connect(show1) bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) showlist(bot, upd) lines = (u'Available TV shows:\n', u'▪ House of Cards', u'▫ Физрук') print bot.sended_message['text'] self.assertEqual(bot.sended_message['text'], u'\n'.join(lines)) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)
def test_nonexistent(self): ''' Tests raise exception with trying to access the non-existent object. ''' configure_for_unittest() from model import Show from neomodel import DoesNotExist with self.assertRaises(DoesNotExist): Show.nodes.get(title_lower='nonexistent serial')
def test_nonexistent(self): ''' Tests raise exception with trying to access the non-existent object. ''' configure_for_unittest() from model import Chat from neomodel import DoesNotExist with self.assertRaises(DoesNotExist): Chat.nodes.get(id=-1)
def test_get_or_create(self): ''' Tests the creation of the object, if necessary. ''' configure_for_unittest() from model import Chat Chat(id=1).save() chat1 = Chat.get_or_create(id=1) chat2 = Chat.get_or_create(id=2)
def test_create_duplicates(self): ''' Tests raise exception with trying to create duplicates. ''' configure_for_unittest() from model import Video from neomodel import UniqueProperty video1 = Video(link='https://vk.com/blablabla').save() video2 = Video(link='vk.com/blablabla') with self.assertRaises(UniqueProperty): video2.save()
def test_create_duplicates(self): ''' Tests raise exception with trying to create duplicates. ''' configure_for_unittest() from model import Show from neomodel import UniqueProperty show1 = Show(title='House of Cards').save() show2 = Show(title='House of Cards') with self.assertRaises(UniqueProperty): show2.save()
def test_multiple_returned(self): ''' Tests raise exception with trying to access multiple returned objects with .get(). ''' configure_for_unittest() from model import Show from neomodel import MultipleNodesReturned Show(title='House of Cards').save() Show(title='Teacher Gym').save() with self.assertRaises(MultipleNodesReturned): Show.nodes.get(title__ne='Kitchen')
def test_multiple_returned(self): ''' Tests raise exception with trying to access multiple returned objects with .get(). ''' configure_for_unittest() from model import Chat from neomodel import MultipleNodesReturned Chat(id=1).save() Chat(id=2).save() with self.assertRaises(MultipleNodesReturned): Chat.nodes.get(id__lt=10)
def test_start(self): ''' Tests response on start request. ''' configure_for_unittest() from command import start bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) start(bot, upd) self.assertTrue('You can control' in bot.sended_message['text']) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)
def test_unsubscribe(self): ''' Tests responses on unsubscirbe request. ''' configure_for_unittest() from command import unsubscribe from model import Show, Chat show1 = Show(title='House of Cards').save() show2 = Show(title='Teacher Gym').save() chat = Chat(id=1).save() chat.subscriptions.connect(show1) bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # valid request upd.message.text = '/unsubscribe house of cards' unsubscribe(bot, upd) self.assertFalse(chat in show1.subscribers.all()) self.assertEqual(bot.sended_message['text'], _('You have unsubscribed from the show.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to cancel non-existent subscription upd.message.text = '/unsubscribe house of cards' unsubscribe(bot, upd) self.assertEqual(bot.sended_message['text'], _('You are not subscribed to the show.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to unsubscript for non-existent TV show upd.message.text = '/unsubscribe kitchen' unsubscribe(bot, upd) self.assertEqual(bot.sended_message['text'], _('Specified series is not on my list.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)
def test_availability(self): ''' Tests availabity properties of object. ''' configure_for_unittest() from model import Show, Season, Episode show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010,1,1)).save() episode2 = Episode(season=season1, number=2).save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) self.assertEqual(season1.available_episodes[0], episode1) self.assertEqual(season1.unavailable_episodes[0], episode2)
def test_setlanguage(self): ''' Tests responses on setlanguage request. ''' configure_for_unittest() from command import setlanguage from model import Chat chat = Chat(id=1).save() bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # valid request upd.message.text = '/setlanguage ru' setlanguage(bot, upd) chat.refresh() self.assertEqual(chat.language, 'ru') self.assertEqual(bot.sended_message['text'], _('The language has changed!')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to set non-existent language upd.message.text = '/setlanguage de' setlanguage(bot, upd) self.assertEqual(bot.sended_message['text'], _('Unknown language!')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to set same language upd.message.text = '/setlanguage ru' setlanguage(bot, upd) self.assertEqual(bot.sended_message['text'], _('You are already using this language!')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)
def test_availability(self): ''' Tests availabity properties of object. ''' configure_for_unittest() from model import Show, Season, Episode show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010, 1, 1)).save() episode2 = Episode(season=season1, number=2).save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) self.assertEqual(season1.available_episodes[0], episode1) self.assertEqual(season1.unavailable_episodes[0], episode2)
def test_get_episode(self): ''' Tests getting episode from video's field. ''' configure_for_unittest() from model import Video, Show, Season, Episode show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010,1,1)).save() episode2 = Episode(season=season1, number=2).save() episode3 = Episode(season=season2, number=1).save() video = Video(link='vk.com').save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) season2.episodes.connect(episode3) episode1.videos.connect(video) video.refresh() self.assertEqual(video.episode.get().number, 1)
def test_default(self): ''' Tests responses on messages that are not commands. ''' configure_for_unittest() from command import default, subscribe, unsubscribe, setlanguage, watch from model import Chat, Show, Season, Episode, Video chat = Chat(id=1).save() show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010, 1, 1)).save() episode2 = Episode(season=season1, number=2).save() episode3 = Episode(season=season2, number=1).save() video1 = Video(link='link to video').save() video2 = Video(link='one more link').save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) season2.episodes.connect(episode3) episode1.videos.connect(video1) episode1.videos.connect(video2) chat.rated_videos.connect(video1, {'value': 1}) bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # random input upd.message.text = 'random input' default(bot, upd) self.assertTrue('You can control' in bot.sended_message['text']) # subscribe in 2 steps upd.message.text = '/subscribe' subscribe(bot, upd) upd.message.text = 'house of cards' default(bot, upd) self.assertEqual(bot.sended_message['text'], _('You have subscribed to the show.')) # unsubscribe in 2 steps upd.message.text = '/unsubscribe' unsubscribe(bot, upd) upd.message.text = 'house of cards' default(bot, upd) self.assertEqual(bot.sended_message['text'], _('You have unsubscribed from the show.')) # setlanguage in 2 steps upd.message.text = '/setlanguage' setlanguage(bot, upd) upd.message.text = 'en' default(bot, upd) self.assertEqual(bot.sended_message['text'], _('You are already using this language!')) # watch in 4 steps upd.message.text = '/watch' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('Which TV show would you like to see?')) upd.message.text = 'house of cards' default(bot, upd) self.assertEqual(bot.sended_message['text'], _('Which season would you like to see?')) upd.message.text = '1' default(bot, upd) self.assertEqual(bot.sended_message['text'], _('Which episode would you like to see?')) upd.message.text = '1' default(bot, upd) self.assertEqual(bot.sended_message['text'], 'link to video') chat.referer = '' chat.save() # positive review - say 'thank you' upd.message.text = '/watch house of cards s1 e1' watch(bot, upd) upd.message.text = Emoji.THUMBS_UP_SIGN default(bot, upd) self.assertEqual(bot.sended_message['text'], _('Thanks for the feedback!'))
def test_rate(self): ''' Tests rating of video. ''' configure_for_unittest() from command import rate from model import Chat, Show, Season, Episode, Video chat = Chat(id=1).save() show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010, 1, 1)).save() episode2 = Episode(season=season1, number=2).save() episode3 = Episode(season=season2, number=1).save() video1 = Video(link='link to video').save() video2 = Video(link='one more link').save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) season2.episodes.connect(episode3) episode1.videos.connect(video1) episode1.videos.connect(video2) chat.rated_videos.connect(video1, {'value': 1}) bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # positive review upd.message.text = ' '.join( ['/rate link to video', unicode(Emoji.THUMBS_UP_SIGN, 'utf-8')]) rate(bot, upd) self.assertEqual(bot.sended_message['text'], _('Thanks for the feedback!')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # negative review upd.message.text = ' '.join( ['/rate link to video', unicode(Emoji.THUMBS_DOWN_SIGN, 'utf-8')]) rate(bot, upd) self.assertEqual(bot.sended_message['text'], 'one more link') self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [[Emoji.THUMBS_UP_SIGN, Emoji.THUMBS_DOWN_SIGN]]) # unknown review upd.message.text = ' '.join(['/rate link to video', 'unknown']) rate(bot, upd) self.assertEqual(bot.sended_message['text'], _('Please rate the video.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [[Emoji.THUMBS_UP_SIGN, Emoji.THUMBS_DOWN_SIGN]]) chat.referer = '' chat.save()
def test_watch(self): ''' Tests responses on watch request. ''' configure_for_unittest() from command import watch from model import Chat, Show, Season, Episode, Video chat = Chat(id=1).save() show = Show(title='House of Cards').save() season1 = Season(show=show, number=1).save() season2 = Season(show=show, number=2).save() episode1 = Episode(season=season1, number=1, release_date=dt(2010, 1, 1)).save() episode2 = Episode(season=season1, number=2).save() episode3 = Episode(season=season2, number=1).save() video1 = Video(link='link to video').save() video2 = Video(link='one more link').save() show.seasons.connect(season1) show.seasons.connect(season2) season1.episodes.connect(episode1) season1.episodes.connect(episode2) season2.episodes.connect(episode3) episode1.videos.connect(video1) episode1.videos.connect(video2) chat.rated_videos.connect(video1, {'value': 1}) bot = FakeBot() upd = FakeUpdate(message=FakeMessage(chat=FakeChat(id=1))) # valid request upd.message.text = '/watch house of cards s1 e1' watch(bot, upd) self.assertEqual(bot.sended_message['text'], 'link to video') self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [[Emoji.THUMBS_UP_SIGN, Emoji.THUMBS_DOWN_SIGN]]) chat.referer = '' # bot is waiting for feedback chat.save() # valid request - without arguments upd.message.text = '/watch' watch(bot, upd) chat.refresh() self.assertEqual('/watch', chat.referer) self.assertEqual(bot.sended_message['text'], _('Which TV show would you like to see?')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # valid request - continue with show_title upd.message.text = ' '.join([chat.referer, 'house of cards']) watch(bot, upd) chat.refresh() self.assertEqual(chat.referer, '/watch house of cards') self.assertEqual(bot.sended_message['text'], _('Which season would you like to see?')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [['1']]) # valid request - continue with seasons number upd.message.text = ' '.join([chat.referer, 's1']) watch(bot, upd) chat.refresh() self.assertEqual(chat.referer, '/watch house of cards s1') self.assertEqual(bot.sended_message['text'], _('Which episode would you like to see?')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [['1']]) # valid request - continue with episode number upd.message.text = ' '.join([chat.referer, 'e1']) watch(bot, upd) chat.refresh() self.assertEqual(chat.referer, '/rate link to video') self.assertEqual(bot.sended_message['text'], 'link to video') self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardMarkup) self.assertEqual(bot.sended_message['reply_markup'].keyboard, [[Emoji.THUMBS_UP_SIGN, Emoji.THUMBS_DOWN_SIGN]]) chat.referer = '' chat.save() # trying to watch non-existent TV show upd.message.text = '/watch kitchen' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('This TV show is not available.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to watch non-existent season upd.message.text = '/watch house of cards s5' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('This season is not available.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to watch unavailable season upd.message.text = '/watch house of cards s2 e1' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('This season is not available.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to watch non-existent episode upd.message.text = '/watch house of cards s1 e5' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('This episode is not available.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide) # trying to watch unavailable episode upd.message.text = '/watch house of cards s1 e2' watch(bot, upd) self.assertEqual(bot.sended_message['text'], _('This episode is not available.')) self.assertEqual(bot.sended_message['chat_id'], 1) self.assertEqual(type(bot.sended_message['reply_markup']), ReplyKeyboardHide)