From acc37cf660bf0c19719fbe7fa0dcfa7b583cdb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Honor=C3=A9?= Date: Mon, 18 Nov 2019 09:06:21 +0100 Subject: [PATCH] [10.0][IMP] Use the technical user to recompute and export (buttons on shopinvader backend view) [ADD] Add unit tests --- shopinvader_search_engine/__manifest__.py | 6 ++- .../models/shopinvader_backend.py | 20 ++++++- shopinvader_search_engine/tests/__init__.py | 3 ++ .../tests/test_shopinvader_backend.py | 54 +++++++++++++++++++ 4 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 shopinvader_search_engine/tests/__init__.py create mode 100644 shopinvader_search_engine/tests/test_shopinvader_backend.py diff --git a/shopinvader_search_engine/__manifest__.py b/shopinvader_search_engine/__manifest__.py index add29e0f5e..8a4f27e1e5 100644 --- a/shopinvader_search_engine/__manifest__.py +++ b/shopinvader_search_engine/__manifest__.py @@ -11,7 +11,11 @@ "website": "www.akretion.com", "license": "AGPL-3", "category": "Generic Modules", - "depends": ["shopinvader", "connector_search_engine"], + "depends": [ + "shopinvader", + "connector_search_engine", + "base_technical_user", + ], "data": [ "views/shopinvader_backend_view.xml", "views/product_view.xml", diff --git a/shopinvader_search_engine/models/shopinvader_backend.py b/shopinvader_search_engine/models/shopinvader_backend.py index 026ddb8d70..55f3d3ba38 100644 --- a/shopinvader_search_engine/models/shopinvader_backend.py +++ b/shopinvader_search_engine/models/shopinvader_backend.py @@ -19,15 +19,31 @@ def _get_default_models(self): @api.multi def force_recompute_all_binding_index(self): - self.mapped("se_backend_id.index_ids").force_recompute_all_binding() + self_sudoer = self._use_technical_user_if_set() + self_sudoer.mapped( + "se_backend_id.index_ids" + ).force_recompute_all_binding() return True @api.multi def force_batch_export_index(self): - for index in self.mapped("se_backend_id.index_ids"): + self_sudoer = self._use_technical_user_if_set() + for index in self_sudoer.mapped("se_backend_id.index_ids"): index.force_batch_export() return True + def _use_technical_user_if_set(self): + """ + Change the current user by the technical user if it's set on the + current user's company. + :return: self + """ + self_sudoer = self + tech_user = self.env.user.company_id.user_tech_id + if tech_user: + self_sudoer = self.sudo(tech_user.id) + return self_sudoer + @api.multi def clear_index(self): for index in self.mapped("se_backend_id.index_ids"): diff --git a/shopinvader_search_engine/tests/__init__.py b/shopinvader_search_engine/tests/__init__.py new file mode 100644 index 0000000000..e09f597fae --- /dev/null +++ b/shopinvader_search_engine/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2019 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_shopinvader_backend diff --git a/shopinvader_search_engine/tests/test_shopinvader_backend.py b/shopinvader_search_engine/tests/test_shopinvader_backend.py new file mode 100644 index 0000000000..e782cec792 --- /dev/null +++ b/shopinvader_search_engine/tests/test_shopinvader_backend.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Copyright 2019 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from uuid import uuid4 + +from odoo.addons.shopinvader.tests.common import CommonCase + + +class TestShopinvaderBackend(CommonCase): + """ + Tests for shopinvader.backend + """ + + def _create_technical_user(self): + """ + + :return: + """ + return self.env["res.users"].create( + {"name": "Super awesome technical user", "login": str(uuid4())} + ) + + def test_use_technical_user_if_set(self): + """ + Check if the _use_technical_user_if_set change the current user (sudo) + correctly. + :return: + """ + # For this case, disable the user_tech_id. So it should take current + # user. + user = self.env.user + self.env.user.company_id.write({"user_tech_id": False}) + self.assertEqual( + user, self.backend._use_technical_user_if_set().env.user + ) + # Now create a technical user and assign it on the company + user = self._create_technical_user() + self.env.user.company_id.write({"user_tech_id": user.id}) + self.assertEqual( + user, self.backend._use_technical_user_if_set().env.user + ) + # Try with another technical user + user = self._create_technical_user() + self.env.user.company_id.write({"user_tech_id": user.id}) + self.assertEqual( + user, self.backend._use_technical_user_if_set().env.user + ) + # Finally remove the technical user + self.env.user.company_id.write({"user_tech_id": False}) + user = self.env.user + self.assertEqual( + user, self.backend._use_technical_user_if_set().env.user + ) + return