forked from enyone/elisaviihde
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.py
149 lines (129 loc) · 5.47 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Elisa Viihde API Python implementation tests
# License: GPLv3
# Author: Juho Tykkala
import elisaviihde
from nose.tools import *
from httmock import urlmatch, HTTMock
# Mocks
@urlmatch(netloc=r'(.*\.)?elisaviihde\.fi$')
def elisaviihde_api_mock(url, request):
if url.path == "/":
return {'status_code': 200, 'content': '<html></html>'}
elif url.path == "/api/sso/authcode":
return {'status_code': 200, 'content': '{"code":"dummy-token"}'}
elif url.path == "/api/user":
return {'status_code': 200, 'content': '{"username":"dummy-user"}'}
elif url.path == "/api/user/logout":
return {'status_code': 200, 'content': '{}'}
elif url.path == "/tallenteet/api/folders":
return {'status_code': 200, 'content': '{"folders":[{"id":0,"folders":[{"id":1,"name":"dummy-folder"}]}]}'}
elif url.path == "/tallenteet/api/folder/0":
return {'status_code': 200, 'content': '{"recordingsCount":1}'}
elif url.path == "/tallenteet/api/recordings/0":
return {'status_code': 200, 'content': '[{"name":"dummy-recording"}]'}
elif url.path == "/tallenteet/katso/0":
return {'status_code': 200, 'content': 'new Player http://test.com/test'}
elif url.path == "/ohjelmaopas/ohjelma/1234":
return {'status_code': 200, 'content': '\n<p itemprop="name">dummy-channel-name</p>\n'
+ '<p itemprop="description">dummy-service-description</p>\n'
+ '<span itemprop="startDate">01.02.2014 13:14</span>\n'
+ '<h3 itemprop="name" id="data-programid">dummy-service-name</h3>\n'}
elif url.path == "/ohjelmaopas/ohjelma/1239":
return {'status_code': 200, 'content': '\n<p itemprop="name">dummy-channel-name</p>\n'
+ '<p itemprop="description">dummy-service-description</p>\n'
+ '<span itemprop="startDate">01.02.2014a 13:14</span>\n'
+ '<h3 itemprop="name" id="data-programid">dummy-service-name</h3>\n'}
else:
return {'status_code': 500}
@urlmatch(netloc=r'(.*\.)?elisaviihde\.fi$')
def elisaviihde_api_mock_asshole(url, request):
return {'status_code': 500}
@urlmatch(netloc=r'(.*\.)?elisaviihde\.fi$')
def elisaviihde_api_mock_badjson(url, request):
return {'status_code': 200, 'content': '{"rew. ""ssdfg} s'}
@urlmatch(netloc=r'(.*\.)?elisa\.fi$')
def elisaviihde_sso_mock(url, request):
if url.path == "/sso/login":
return {'status_code': 200}
else:
return {'status_code': 500}
@urlmatch(netloc=r'(.*\.)?elisa\.fi$')
def elisaviihde_sso_mock_asshole(url, request):
return {'status_code': 500}
# Tests
def test_elisa_init_ok():
with HTTMock(elisaviihde_api_mock):
elisa = elisaviihde.elisaviihde(False)
assert elisa.islogged() == False
@raises(Exception)
def test_elisa_init_fail():
with HTTMock(elisaviihde_api_mock_asshole):
elisa = elisaviihde.elisaviihde(False)
def test_elisa_login_ok():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
assert elisa.islogged() == True
assert elisa.gettoken() == "dummy-token"
@raises(Exception)
def test_elisa_login_fail():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock_asshole):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
@raises(Exception)
def test_elisa_login_fail2():
with HTTMock(elisaviihde_api_mock_badjson, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
def test_elisa_logout_ok():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
elisa.close()
assert elisa.gettoken() == None
def test_elisa_user():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
user = elisa.getuser()
assert user["username"] == "dummy-user"
def test_elisa_sessions():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
elisa.setsession({"foo":"123"})
assert elisa.getsession() == {"foo":"123"}
def test_elisa_folders():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
folders = elisa.getfolders()
assert folders[0]["name"] == "dummy-folder"
def test_elisa_recordings():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
recordings = elisa.getrecordings(0)
assert recordings[0]["name"] == "dummy-recording"
def test_elisa_program():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
program = elisa.getprogram(1234)
assert program["serviceName"] == "dummy-channel-name"
assert program["name"] == "dummy-service-name"
assert program["startTimeUTC"] > 1300000000000
assert program["description"] == "dummy-service-description"
def test_elisa_program_fail():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
program = elisa.getprogram(1239)
assert program["serviceName"] == "dummy-channel-name"
assert program["description"] == "dummy-service-description"
def test_elisa_streamuri():
with HTTMock(elisaviihde_api_mock, elisaviihde_sso_mock):
elisa = elisaviihde.elisaviihde(False)
elisa.login("foo", "bar")
streamuri = elisa.getstreamuri(0)
assert streamuri == "http://test.com/test"