301 lines
8.8 KiB
Python
301 lines
8.8 KiB
Python
import os,sys
|
|
sys.path.append('../')
|
|
import context
|
|
import unittest
|
|
import unittest.mock
|
|
import time
|
|
from flask import current_app
|
|
from backend.data import db
|
|
from backend.data.data_models import RegisteringUser
|
|
from backend.data.data_models import User
|
|
from backend.data.data_models import DataError
|
|
|
|
import backend.data.dao_users as sut
|
|
|
|
class RegistrationTokenDAOTest(unittest.TestCase):
|
|
|
|
app = context.create_app(context.default_test_config)
|
|
|
|
def setUp(self):
|
|
with self.app.app_context():
|
|
db.init_db()
|
|
|
|
def tearDown(self):
|
|
with self.app.app_context():
|
|
db.close_db()
|
|
os.remove("testdb")
|
|
|
|
def test_empty_db_contains_no_user(self):
|
|
user_id = 1
|
|
|
|
with self.app.app_context():
|
|
actual = sut.get_user_by_id(user_id)
|
|
|
|
self.assertEqual(None, actual)
|
|
|
|
def test_user_inserted_can_be_found_by_id(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
expected = User(
|
|
id = 1,
|
|
name = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(inserted)
|
|
actual = sut.get_user_by_id(user_id)
|
|
|
|
self.assertEqual(expected.id, user_id)
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_deleted_user_cannot_be_found(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
expected = None
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(inserted)
|
|
sut.delete_user_by_id(user_id)
|
|
actual = sut.get_user_by_id(user_id)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_user_inserted_can_be_found_by_name(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
expected = User(
|
|
id = 1,
|
|
name = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(inserted)
|
|
actual = sut.get_user_by_name('admin')
|
|
|
|
self.assertEqual(expected.id, user_id)
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_2_user_inserted_can_be_found_by_id(self):
|
|
inserted1 = RegisteringUser(
|
|
name = "admin",
|
|
password = "pass",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
expected1 = User(
|
|
id = 1,
|
|
name = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
inserted2 = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
)
|
|
expected2 = User(
|
|
id = 2,
|
|
name = "admin2",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
was_otp_verified = False
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id1 = sut.insert_user(inserted1)
|
|
actual1 = sut.get_user_by_id(user_id1)
|
|
user_id2 = sut.insert_user(inserted2)
|
|
actual2 = sut.get_user_by_id(user_id2)
|
|
|
|
self.assertEqual(expected1.id, user_id1)
|
|
self.assertEqual(expected1, actual1)
|
|
self.assertEqual(expected2.id, user_id2)
|
|
self.assertEqual(expected2, actual2)
|
|
|
|
def test_2_user_inserted_can_be_get(self):
|
|
inserted1 = RegisteringUser(
|
|
name = "admin",
|
|
password = "pass",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
expected1 = User(
|
|
id = 1,
|
|
name = "admin",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = True
|
|
)
|
|
inserted2 = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
)
|
|
expected2 = User(
|
|
id = 2,
|
|
name = "admin2",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
was_otp_verified = False
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id1 = sut.insert_user(inserted1)
|
|
user_id2 = sut.insert_user(inserted2)
|
|
actual = sut.get_users()
|
|
|
|
self.assertEqual([expected1,expected2], list(actual))
|
|
|
|
|
|
def test_user_inserted_can_not_be_found_by_good_name_and_wrong_password(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
with self.app.app_context():
|
|
sut.insert_user(inserted)
|
|
actual = sut.get_user_by_name_and_password('admin', 'pass2')
|
|
|
|
self.assertEqual(None, actual)
|
|
|
|
def test_user_inserted_can_not_be_found_by_wrong_name_and_good_password(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
with self.app.app_context():
|
|
sut.insert_user(inserted)
|
|
actual = sut.get_user_by_name_and_password('admin2', 'pass')
|
|
|
|
self.assertEqual(None, actual)
|
|
|
|
|
|
def test_user_inserted_can_be_found_by_name_and_password(self):
|
|
inserted = RegisteringUser(
|
|
name = "admin",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
expected = User(
|
|
id = 1,
|
|
name = "admin",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
was_otp_verified = False
|
|
)
|
|
|
|
with self.app.app_context():
|
|
sut.insert_user(inserted)
|
|
actual = sut.get_user_by_name_and_password('admin', 'pass')
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_update_user_privilige(self):
|
|
user = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
expected = User(
|
|
id = 1,
|
|
name = "admin2",
|
|
otp_secret = "secret",
|
|
privileged = True,
|
|
was_otp_verified = False
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(user)
|
|
sut.update_user_privilige(user_id, True)
|
|
actual = sut.get_user_by_id(user_id)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_update_user_otp_verification(self):
|
|
user = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
expected = User(
|
|
id = 1,
|
|
name = "admin2",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
was_otp_verified = True
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(user)
|
|
sut.update_user_otp_verification(user_id, True)
|
|
actual = sut.get_user_by_id(user_id)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_insert_user_twice(self):
|
|
user = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
|
|
with self.app.app_context():
|
|
sut.insert_user(user)
|
|
actual = sut.insert_user(user)
|
|
|
|
self.assertEqual(DataError.USER_NAME_NOT_VALID, actual)
|
|
|
|
def test_update_user_password(self):
|
|
user = RegisteringUser(
|
|
name = "admin2",
|
|
password = "pass",
|
|
otp_secret = "secret"
|
|
)
|
|
expected_old = None
|
|
expected_new = User(
|
|
id = 1,
|
|
name = "admin2",
|
|
otp_secret = "secret",
|
|
privileged = False,
|
|
was_otp_verified = False
|
|
)
|
|
|
|
with self.app.app_context():
|
|
user_id = sut.insert_user(user)
|
|
sut.update_user_password(user_id = user_id, new_password = "alma")
|
|
actual_old = sut.get_user_by_name_and_password(user_name = "admin2", password = "pass")
|
|
actual_new = sut.get_user_by_name_and_password(user_name = "admin2", password = "alma")
|
|
|
|
self.assertEqual(expected_old, actual_old)
|
|
self.assertEqual(expected_new, actual_new)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(verbosity=2)
|