Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unit tests #72

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions test/test_monitor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2019, Dag Wieers (@dagwieers) <[email protected]>
# GNU General Public License v2.0 (see COPYING or https://www.gnu.org/licenses/gpl-2.0.txt)

# pylint: disable=invalid-name,missing-docstring

from __future__ import absolute_import, division, print_function, unicode_literals
import binascii
import json
import unittest
from resources.lib.api import Api
from resources.lib.monitor import Monitor
from resources.lib.statichelper import to_unicode
from .testdata import episode1

xbmc = __import__('xbmc')
xbmcaddon = __import__('xbmcaddon')
xbmcgui = __import__('xbmcgui')
xbmcvfs = __import__('xbmcvfs')


class TestMonitor(unittest.TestCase):

addon = xbmcaddon.Addon()
api = Api()
monitor = Monitor()

# def test_run(self):
# self.monitor.run()

def test_notification(self):
self.monitor.onNotification('plugin.video.vrt.nu', 'upnext_data', json.dumps([to_unicode(binascii.hexlify(json.dumps(episode1).encode()))]))
episode1.update(id='plugin.video.vrt.nu_play_action')
self.assertEqual(self.api.data, episode1)

def test__invalid_notification(self):
self.monitor.onNotification('plugin.video.vrt.nu', 'foo_bar', {})


if __name__ == '__main__':
unittest.main()
20 changes: 0 additions & 20 deletions test/test_unicode.py

This file was deleted.

51 changes: 51 additions & 0 deletions test/testdata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2019, Dag Wieers (@dagwieers) <[email protected]>
# GNU General Public License v2.0 (see COPYING or https://www.gnu.org/licenses/gpl-2.0.txt)

# pylint: disable=invalid-name,missing-docstring

from __future__ import absolute_import, division, print_function, unicode_literals

episode1 = {
'art': {
'thumb': 'https://images.vrt.be/orig/2019/10/19/bb9be6d1-f29b-11e9-abcc-02b7b76bf47f.jpg',
'tvshow.clearart': None,
'tvshow.clearlogo': None,
'tvshow.fanart': 'https://images.vrt.be/orig/2017/01/10/f2fa63c8-d72b-11e6-b656-00163edf48dd.jpg',
'tvshow.landscape': 'https://images.vrt.be/orig/2019/10/19/bb9be6d1-f29b-11e9-abcc-02b7b76bf47f.jpg',
'tvshow.poster': 'https://images.vrt.be/orig/2019/10/19/bb9be6d1-f29b-11e9-abcc-02b7b76bf47f.jpg',
},
'episode': 180,
'episodeid': '695802385527',
'firstaired': '2019-10-19',
'playcount': 0,
'plot': '[COLOR blue][B]26 more days[/B] available[/COLOR]\n\nOpnieuw een straffe coup de th\xe9\xe2tre in het Britse parlement. Wat vandaag een memorabele Super Saturday had kunnen worden, eindigde in mineur, zonder stemming over het akkoord tussen Boris Johnson en de EU. We gaan live naar Lia van Bekhoven in Londen voor meer duiding. In de studio geeft Willem Van Mullem meer toelichting over de Europese reacties. En vicepremier Alexander De Croo reageert vanuit Washington D.C.\xa0\nGeen doorbraak vandaag in Londen, maar wel bij Groen. Daar hebben de leden Meyrem Almaci herverkozen als voorzitter. We gaan naar Pieterjan De Smedt op het ledencongres van de partij voor een interview met Almaci.\n\n[COLOR yellow]vrtnu.be/p.LRVK07N5Z[/COLOR]',
'rating': 0.0,
'runtime': 1623.0001220703125,
'season': 2019,
'showtitle': 'Terzake',
'title': 'Toch geen stemming over brexitakkoord',
'tvshowid': '244517398527',
}

episode2 = dict(
art={
'thumb': 'https://images.vrt.be/orig/2019/09/23/3bc3fa4e-de2b-11e9-abcc-02b7b76bf47f.jpg',
'tvshow.fanart': 'https://images.vrt.be/orig/2017/01/10/f2fa63c8-d72b-11e6-b656-00163edf48dd.jpg',
'tvshow.clearart': None,
'tvshow.landscape': 'https://images.vrt.be/orig/2019/09/23/3bc3fa4e-de2b-11e9-abcc-02b7b76bf47f.jpg',
'tvshow.poster': 'https://images.vrt.be/orig/2019/09/23/3bc3fa4e-de2b-11e9-abcc-02b7b76bf47f.jpg',
'tvshow.clearlogo': None,
},
episode=181,
episodeid='638033010527',
firstaired='2019-09-23',
playcount=None,
plot='[COLOR blue][B]20 more hours[/B] available[/COLOR]\n\nTouroperator Thomas Cook biedt miljoenen pakketreizen aan. Alles inbegrepen. Een formule die aanslaat. Of beter, aansloeg. Vannacht viel na bijna 180 jaar het doek over de oudste reisorganisatie ter wereld. Stein Falk schetst de rise and fall van Thomas Cook. En we gaan live naar Anne Saenen in Londen.\n\xa0\nTraditiegetrouw zouden we vanavond de Vlaamse minister-president te gast hebben voor tekst en uitleg bij de Septemberverklaring. Maar de start van het parlementaire jaar in Vlaanderen begon vanmiddag voor het eerst zonder regering en zonder regeerverklaring. Een valse start voor de toekomstige troepen van Jan Jambon? Analyse door Wetstraatwatchers Pieterjan De Smedt en Ivan De Vadder.\n\xa0\nNiets doen is niet langer een optie in de toenemende klimaatcrisis. De straat roept om actie, maar wat doen de wereldleiders op de klimaattop in New York? We blikken vooruit met Geert Fremout, klimaatexpert bij de FOD Leefmilieu, live in New York.\n\n[COLOR yellow]vrtnu.be/p.zeANBBzP7[/COLOR]',
rating=None,
runtime=1800,
season=2019,
showtitle='Terzake',
title='Een Septemberverklaring zonder regering',
tvshowid='244517398527',
)
15 changes: 6 additions & 9 deletions test/xbmcaddon.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@

from __future__ import absolute_import, division, print_function, unicode_literals
from xbmc import getLocalizedString
from xbmcextra import ADDON_INFO, ADDON_ID, addon_settings, global_settings, import_language

GLOBAL_SETTINGS = global_settings()
ADDON_SETTINGS = addon_settings()
PO = import_language(language=GLOBAL_SETTINGS.get('locale.language'))
from xbmcextra import ADDON_INFO, ADDON_ID, addon_settings


class Addon:
Expand All @@ -20,6 +16,7 @@ class Addon:
def __init__(self, id=ADDON_ID): # pylint: disable=redefined-builtin
''' A stub constructor for the xbmcaddon Addon class '''
self.id = id
self.settings = addon_settings()

def getAddonInfo(self, key):
''' A working implementation for the xbmcaddon Addon class getAddonInfo() method '''
Expand All @@ -35,17 +32,17 @@ def getLocalizedString(msgctxt):

def getSetting(self, key):
''' A working implementation for the xbmcaddon Addon class getSetting() method '''
return ADDON_SETTINGS.get(self.id, {}).get(key, '')
return self.settings.get(self.id, {}).get(key, '')

@staticmethod
def openSettings():
''' A stub implementation for the xbmcaddon Addon class openSettings() method '''

def setSetting(self, key, value):
''' A stub implementation for the xbmcaddon Addon class setSetting() method '''
if not ADDON_SETTINGS.get(self.id):
ADDON_SETTINGS[self.id] = dict()
ADDON_SETTINGS[self.id][key] = value
if not self.settings.get(self.id):
self.settings[self.id] = dict()
self.settings[self.id][key] = value
# NOTE: Disable actual writing as it is no longer needed for testing
# with open('test/userdata/addon_settings.json', 'w') as fd:
# json.dump(filtered_settings, fd, sort_keys=True, indent=4)