Mixonomer/tests/test_decorators.py
2021-02-07 18:32:07 +00:00

192 lines
5.7 KiB
Python

import os
import unittest
from unittest.mock import Mock
import flask
from music.music import create_app
from music.api.decorators import is_logged_in, admin_required, spotify_link_required, lastfm_username_required, check_dict, validate_json
class TestDecorators(unittest.TestCase):
def setUp(self):
self.app = create_app()
self.app.testing = True
self.test_app = self.app.test_client()
### LOGGED IN ###
def test_is_logged_in_default_session(self):
with self.app.test_request_context('/'):
self.assertFalse('username' in flask.session)
self.assertFalse(is_logged_in())
def test_is_logged_in(self):
with self.app.test_request_context('/'):
flask.session['username'] = 'test'
self.assertTrue('username' in flask.session)
self.assertTrue(is_logged_in())
### ADMIN ###
def test_admin_required(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
wrapped = admin_required(func)
user_mock = Mock()
user_mock.type = 'admin'
resp = wrapped(user=user_mock)
self.assertEqual(resp, 5)
def test_admin_required_no_user(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = admin_required(func)
resp = wrapped()
self.assertEqual(resp[1], 401)
def test_admin_required_not_permitted(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = admin_required(func)
user_mock = Mock()
user_mock.type = 'user'
resp = wrapped(user=user_mock)
self.assertEqual(resp[1], 401)
### SPOTIFY ###
def test_spotify_required(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
wrapped = spotify_link_required(func)
user_mock = Mock()
user_mock.spotify_linked = True
resp = wrapped(user=user_mock)
self.assertEqual(resp, 5)
def test_spotify_required_no_user(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = spotify_link_required(func)
resp = wrapped()
self.assertEqual(resp[1], 401)
def test_spotify_required_not_linked(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = spotify_link_required(func)
user_mock = Mock()
user_mock.spotify_linked = False
resp = wrapped(user=user_mock)
self.assertEqual(resp[1], 401)
### LAST.FM ###
def test_lastfm_required(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
wrapped = lastfm_username_required(func)
user_mock = Mock()
user_mock.lastfm_username = 'test_username'
resp = wrapped(user=user_mock)
self.assertEqual(resp, 5)
def test_lastfm_required_no_user(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = lastfm_username_required(func)
resp = wrapped()
self.assertEqual(resp[1], 401)
def test_lastfm_required_zero_length(self):
with self.app.test_request_context('/'):
func = Mock()
wrapped = lastfm_username_required(func)
user_mock = Mock()
user_mock.lastfm_username = ''
resp = wrapped(user=user_mock)
self.assertEqual(resp[1], 401)
### CHECK_DICT ###
def test_check_dict(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
resp = check_dict(
request_params=["test1", "test2", "test3"],
expected_args=["test1", "test2", "test3"],
func=func,
args=[],
kwargs={}
)
self.assertEqual(resp, 5)
def test_check_dict_missing_required(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
resp = check_dict(
request_params=["test1", "test2"],
expected_args=["test1", "test2", "test3"],
func=func,
args=[],
kwargs={}
)
self.assertEqual(resp[1], 400)
def test_check_dict_tuples(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
resp = check_dict(
request_params={"test1": 'hello world', "test2": 10, "test3": True},
expected_args=[("test1", str), ("test2", int), ("test3", bool)],
func=func,
args=[],
kwargs={}
)
self.assertEqual(resp, 5)
def test_check_dict_tuples_wrong_type(self):
with self.app.test_request_context('/'):
func = Mock()
func.return_value = 5 # a known value to test for
resp = check_dict(
request_params={"test1": 'hello world', "test2": "hello world", "test3": True},
expected_args=[("test1", str), ("test2", int), ("test3", bool)],
func=func,
args=[],
kwargs={}
)
self.assertEqual(resp[1], 400)