Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[10.0][IMP] Use the technical user to recompute and export #515

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion shopinvader_search_engine/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
20 changes: 18 additions & 2 deletions shopinvader_search_engine/models/shopinvader_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"):
Expand Down
3 changes: 3 additions & 0 deletions shopinvader_search_engine/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Copyright 2019 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_shopinvader_backend
54 changes: 54 additions & 0 deletions shopinvader_search_engine/tests/test_shopinvader_backend.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
# Copyright 2019 ACSONE SA/NV (<http://acsone.eu>)
# 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