Select Git revision
config.py.example
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
tests.py 6.34 KiB
#!/usr/bin/env python3
import os
import unittest
import server
import flask
from flask import url_for
class VideoTestCase(unittest.TestCase):
@classmethod
def tearDownClass(cls):
os.unlink(server.app.config['SQLITE_DB'])
def setUp(self):
server.app.testing = True
self.app = server.app.test_client()
def login(self, c):
with c.session_transaction() as sess:
sess['user'] = {'name': 'videoag', '_csrf_token': 'asd', 'dbid': 72}
sess['_csrf_token'] = 'asd'
def test_index(self):
with self.app as c:
r = c.get('/')
assert r.status_code == 200
self.login(c)
r = c.get('/')
assert r.status_code == 200
def test_courses(self):
with self.app as c:
r = c.get('/courses')
assert r.status_code == 200
self.login(c)
r = c.get('/courses')
assert r.status_code == 200
def test_course(self):
with self.app as c:
# normal
r = c.get('/15ws-afi')
assert r.status_code == 200
# not listed
r = c.get('/15ws-bio')
assert r.status_code == 200
# not visible
r = c.get('/15ws-einfprog')
assert r.status_code == 404
self.login(c)
r = c.get('/15ws-afi')
assert r.status_code == 200
r = c.get('/15ws-einfprog')
assert r.status_code == 200
def test_timetable(self):
with self.app as c:
r = c.get('/internal/timetable')
assert r.status_code == 302
self.login(c)
r = c.get('internal/timetable')
assert r.status_code == 200
r = c.get('internal/timetable?date=2016-W05')
assert r.status_code == 200
assert 'AfI' in r.data.decode()
assert 'Progra' in r.data.decode()
assert 'Bio' in r.data.decode()
def test_faq(self):
r = self.app.get('/faq')
assert r.status_code == 200
def test_ical(self):
with self.app as c:
r = c.get('/internal/ical/all')
assert r.status_code == 401
self.login(c)
r = c.get('/internal/ical/all')
assert r.status_code == 200
assert 'Progra' in r.data.decode()
assert 'Vorlesung' in r.data.decode()
def test_sitemap(self):
r = self.app.get('/sitemap.xml')
assert r.status_code == 200
def test_chapters(self):
with self.app as c:
# wrong time format
r = c.post('/internal/newchapter/7011', data={'text':'testchapter A', 'time': 1234})
assert r.status_code == 400
# should be inserted as id 15
r = c.post('/internal/newchapter/7011', data={'text':'testchapter B', 'time': '00:10:00'})
assert r.status_code == 200
# not yet set visible
r = c.get('/internal/chapters/7011')
assert r.status_code == 404
# other lecture
r = c.get('/internal/chapters/7012')
assert r.status_code == 404
self.login(c)
r = c.post('/internal/edit', data={"chapters.15.visible":1,"_csrf_token":"asd"})
assert r.status_code == 200
r = c.get('/internal/chapters/7011')
assert 'testchapter B' in r.data.decode() and not 'testchapter A' in r.data.decode()
def test_search(self):
r = self.app.get('/search?q=Malo')
assert r.status_code == 200
assert 'Mathematische Logik II' in r.data.decode() and '4.1 Der Sequenzenkalkül' in r.data.decode()
r = self.app.get('/search?q=Afi+Stens')
assert r.status_code == 200
assert 'Analysis für Informatiker' in r.data.decode() and 'Höhere Mathematik I' in r.data.decode()
def test_login(self):
# test login page
r = self.app.get('/internal/login')
assert r.status_code == 200
# test successfull login
with self.app as c:
r = c.post('/internal/login', data={'user': 'videoag', 'password': 'videoag', 'ref': '/'})
assert flask.session['user']
assert r.status_code == 302
assert '<a href="/">' in r.data.decode()
# test unsuccessfull login
with self.app as c:
r = c.post('/internal/login', data={'user': 'videoag', 'password': 'asd', 'ref': '/'})
assert flask.session['user']
assert r.status_code == 403
assert 'Login fehlgeschlagen' in r.data.decode()
def test_logout(self):
with self.app as c:
with c.session_transaction() as sess:
sess['user'] = {'foo': 'bar'}
r = c.get('/internal/logout', data={'ref': '/'})
assert not flask.session.get('user')
assert r.status_code == 302
assert '<a href="/">' in r.data.decode()
def test_edit(self):
with self.app as c:
# test auth
r = c.get('/internal/new/courses', data={'title': 'Neue Vera14352345nstaltung totalyrandomcrap', 'responsible': 'foo', 'handle': '2r5sQ46z4w3DFCRT3<F4>DG', '_csrf_token': 'asd'})
assert r.status_code != 200
r = c.get('/internal/changelog')
assert r.status_code == 302
# all other tests are done logged in
self.login(c)
# add course
r = c.get('/internal/new/courses', data={'title': 'Neue Veranstaltung totalyrandomcrap', 'responsible': 'foo', 'handle': '2r5sQDFCRT3DG', '_csrf_token': 'asd'})
assert r.status_code == 200
r = self.app.get('/courses')
assert r.status_code == 200
assert 'Neue Veranstaltung totalyrandomcrap' in r.data.decode() and '2r5sQDFCRT3DG' in r.data.decode()
# rename lecture
r = c.get('internal/edit', data={"lectures.7353.title":"Testtitle","_csrf_token":"asd"})
assert r.status_code == 200
# test if the changelog is written
r = c.get('/internal/changelog')
assert r.status_code == 200
assert 'Testtitle' in r.data.decode() and 'lectures.7353.title' in r.data.decode()
def test_legacyurl(self):
with self.app as c:
r = self.app.get('/site/feed.php?newcourses')
assert r.status_code == 302
assert url_for('courses_feed') in r.data.decode()
r = self.app.get('/?view=faq')
assert r.status_code == 302
assert url_for('faq') in r.data.decode()
r = self.app.get('/site/feed.php?all')
assert r.status_code == 302
assert url_for('feed') in r.data.decode()
r = self.app.get('/?course=16ws-progra')
assert r.status_code == 302
assert url_for('course', handle='16ws-progra') in r.data.decode()
r = self.app.get('/?view=player&lectureid=7319')
assert r.status_code == 302
assert url_for('lecture', id='7319', course='16ws-progra') in r.data.decode()
r = self.app.get('/site/feed.php?16ws-afi')
assert r.status_code == 302
assert url_for('feed', handle='16ws-afi') in r.data.decode()
r = self.app.get('/site/embed.php?lecture=7319')
assert r.status_code == 302
assert url_for('embed', id='7319', course='16ws-progra') in r.data.decode()
r = self.app.get('/site/embed.php?vid=6088')
assert r.status_code == 302
assert url_for('embed', id='4105', course='14ws-ex3') in r.data.decode()
if __name__ == '__main__':
unittest.main()