You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.4 KiB
124 lines
4.4 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 LasLabs Inc.
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
|
|
|
|
from mock import patch
|
|
import os
|
|
import sys
|
|
from odoo.modules.module import get_module_path
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
module_path = get_module_path('auth_totp')
|
|
migration_path = os.path.join(module_path, 'migrations', '10.0.2.0.0')
|
|
sys.path.insert(0, migration_path)
|
|
sys.modules.pop('auth_totp', None)
|
|
post_migrate = __import__('post-migrate')
|
|
migrate = post_migrate.migrate
|
|
|
|
HELPER_PATH = 'odoo.addons.base.ir.ir_model.IrModelFields._prepare_update'
|
|
|
|
|
|
@patch(HELPER_PATH, autospec=True)
|
|
class TestPostMigrate(TransactionCase):
|
|
def setUp(self):
|
|
super(TestPostMigrate, self).setUp()
|
|
|
|
self.test_user = self.env['res.users'].create({
|
|
'name': 'Test User',
|
|
'login': 'test_user',
|
|
})
|
|
self.env['res.users.authenticator'].create({
|
|
'name': 'Test Name',
|
|
'secret_key': 'Test Key',
|
|
'user_id': self.test_user.id,
|
|
})
|
|
self.test_user.mfa_enabled = True
|
|
self.test_user.active = False
|
|
|
|
self.test_user_2 = self.env['res.users'].create({
|
|
'name': 'Test User 2',
|
|
'login': 'test_user_2',
|
|
})
|
|
|
|
self.test_device_model = self.env['ir.model'].create({
|
|
'name': 'Test Device Model',
|
|
'model': 'res.users.device',
|
|
'state': 'base',
|
|
})
|
|
|
|
def test_migrate_mfa_enabled(self, helper_mock):
|
|
"""It should give users with MFA enabled a new key"""
|
|
old_key = self.test_user.trusted_device_cookie_key
|
|
migrate(self.env.cr, None)
|
|
|
|
self.assertTrue(self.test_user.trusted_device_cookie_key)
|
|
self.assertNotEqual(self.test_user.trusted_device_cookie_key, old_key)
|
|
|
|
def test_migrate_mfa_disabled(self, helper_mock):
|
|
"""It should leave users with MFA disabled without a key"""
|
|
migrate(self.env.cr, None)
|
|
|
|
self.assertFalse(self.test_user_2.trusted_device_cookie_key)
|
|
|
|
def test_migrate_call_field_helper(self, helper_mock):
|
|
"""It should call update helper on all device model field records"""
|
|
test_field = self.test_device_model.field_id
|
|
test_field_2 = self.env['ir.model.fields'].create({
|
|
'name': 'test_field_2',
|
|
'model': self.test_device_model.model,
|
|
'model_id': self.test_device_model.id,
|
|
'ttype': 'char',
|
|
'state': 'base',
|
|
})
|
|
test_field_set = test_field + test_field_2
|
|
migrate(self.env.cr, None)
|
|
|
|
helper_mock.assert_called_once_with(test_field_set)
|
|
|
|
def test_migrate_clean_up_constraints(self, helper_mock):
|
|
"""It should clean up all constraints associated with device model"""
|
|
test_module_record = self.env['ir.module.module'].search([], limit=1)
|
|
self.env['ir.model.constraint'].create({
|
|
'name': 'Test Constraint',
|
|
'model': self.test_device_model.id,
|
|
'module': test_module_record.id,
|
|
'type': 'u',
|
|
})
|
|
self.env['ir.model.constraint'].create({
|
|
'name': 'Test Constraint 2',
|
|
'model': self.test_device_model.id,
|
|
'module': test_module_record.id,
|
|
'type': 'u',
|
|
})
|
|
migrate(self.env.cr, None)
|
|
|
|
resulting_constraints = self.env['ir.model.constraint'].search([
|
|
('model', '=', self.test_device_model.id),
|
|
])
|
|
self.assertFalse(resulting_constraints)
|
|
|
|
def test_migrate_clean_up_xml_ids(self, helper_mock):
|
|
"""It should clean up XML IDs tied to device model"""
|
|
self.env['ir.model.data'].create({
|
|
'name': 'Test XML ID',
|
|
'model': 'ir.model',
|
|
'res_id': self.test_device_model.id,
|
|
})
|
|
self.env['ir.model.data'].create({
|
|
'name': 'Test XML ID 2',
|
|
'model': 'ir.model',
|
|
'res_id': self.test_device_model.id,
|
|
})
|
|
migrate(self.env.cr, None)
|
|
|
|
resulting_xml_ids = self.env['ir.model.data'].search([
|
|
('model', '=', 'ir.model'),
|
|
('res_id', '=', self.test_device_model.id),
|
|
])
|
|
self.assertFalse(resulting_xml_ids)
|
|
|
|
def test_migrate_clean_up_ir_record(self, helper_mock):
|
|
"""It should clean up device model ir.model record"""
|
|
migrate(self.env.cr, None)
|
|
|
|
self.assertFalse(self.test_device_model.exists())
|