# © 2016 Akretion Raphaël REVERDY # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from .common import CommonDataEncrypted from odoo.tools.config import config from odoo.exceptions import AccessError, ValidationError import logging _logger = logging.getLogger(__name__) try: from cryptography.fernet import Fernet except ImportError as err: # pragma: no cover _logger.debug(err) class TestDataEncrypted(CommonDataEncrypted): def test_store_data_no_superuser(self): # only superuser can use this model admin = self.env.ref('base.user_admin') with self.assertRaises(AccessError): self.encrypted_data.sudo(admin.id)._encrypted_store( self.crypted_data_name, "My config") def test_store_data_noenv_set(self): config.pop('running_env', None) with self.assertRaises(ValidationError): self.encrypted_data.sudo()._encrypted_store( self.crypted_data_name, "My config") def test_store_data_nokey_set(self): config.pop('encryption_key_test', None) with self.assertRaises(ValidationError): self.encrypted_data.sudo()._encrypted_store( self.crypted_data_name, "My config") def test_get_data_decrypted_and_cache(self): self.encrypted_data.sudo()._encrypted_store( 'test_model,1', "My config") data = self.encrypted_data.sudo()._encrypted_get( self.crypted_data_name) self.assertEqual(data, "My config") # Test cache really depends on user (super user) else any user could # access the data admin = self.env.ref('base.user_admin') with self.assertRaises(AccessError): self.encrypted_data.sudo(admin)._encrypted_get( self.crypted_data_name) # Change value should invalidate cache self.encrypted_data.sudo()._encrypted_store( 'test_model,1', "Other Config") new_data = self.encrypted_data.sudo()._encrypted_get( self.crypted_data_name) self.assertEqual(new_data, "Other Config") def test_get_data_wrong_key(self): self.encrypted_data.sudo()._encrypted_store( 'test_model,1', "My config") new_key = Fernet.generate_key() config['encryption_key_test'] = new_key.decode() with self.assertRaises(ValidationError): self.encrypted_data.sudo()._encrypted_get( self.crypted_data_name) def test_get_empty_data(self): empty_data = self.encrypted_data.sudo()._encrypted_get( self.crypted_data_name) self.assertEqual(empty_data, None) def test_get_wrong_json(self): self.encrypted_data.sudo()._encrypted_store( self.crypted_data_name, 'config') with self.assertRaises(ValidationError): self.encrypted_data.sudo()._encrypted_read_json( self.crypted_data_name) def test_get_good_json(self): self.encrypted_data.sudo()._encrypted_store_json( self.crypted_data_name, {'key': 'value'}) data = self.encrypted_data.sudo()._encrypted_read_json( self.crypted_data_name) self.assertEqual(data, {'key': 'value'}) def test_get_empty_json(self): data = self.encrypted_data.sudo()._encrypted_read_json( self.crypted_data_name) self.assertEqual(data, {}) def test_get_data_with_bin_size_context(self): self.encrypted_data.sudo()._encrypted_store( self.crypted_data_name, "test") data = self.encrypted_data.sudo().with_context(bin_size=True).\ _encrypted_get(self.crypted_data_name) self.assertEqual(data, "test")