153 lines
7.2 KiB
Python
153 lines
7.2 KiB
Python
import json
|
|
|
|
from odoo import Command
|
|
from odoo.tools import file_open
|
|
from odoo.tests.common import HttpCase
|
|
from odoo.addons.spreadsheet_dashboard.tests.common import DashboardTestCommon
|
|
from odoo.addons.spreadsheet_edition.tests.spreadsheet_test_case import SpreadsheetTestCase
|
|
|
|
|
|
class TestSpreadsheetDashboard(DashboardTestCommon, SpreadsheetTestCase, HttpCase):
|
|
|
|
def test_join_new_dashboard_user(self):
|
|
self.authenticate(self.user.login, self.user.password)
|
|
dashboard_group = self.env["spreadsheet.dashboard.group"].create({
|
|
"name": "Dashboard group"
|
|
})
|
|
dashboard = self.env["spreadsheet.dashboard"].create(
|
|
{
|
|
"name": "a dashboard",
|
|
"spreadsheet_data": "{}",
|
|
"group_ids": [Command.set(self.group.ids)],
|
|
"dashboard_group_id": dashboard_group.id,
|
|
}
|
|
)
|
|
# only read access, no one ever joined this dashboard
|
|
response = self.url_open('/spreadsheet/data/spreadsheet.dashboard/%s' % dashboard.id)
|
|
result = response.json()
|
|
self.assertEqual(result["data"], {})
|
|
self.assertEqual(result["isReadonly"], True)
|
|
|
|
def test_join_published(self):
|
|
dashboard = self.create_dashboard().with_user(self.user)
|
|
self.authenticate(self.user.login, self.user.password)
|
|
response = self.url_open('/spreadsheet/data/spreadsheet.dashboard/%s' % dashboard.id)
|
|
self.assertTrue(response.json()["is_published"])
|
|
dashboard.sudo().is_published = False
|
|
response = self.url_open('/spreadsheet/data/spreadsheet.dashboard/%s' % dashboard.id)
|
|
self.assertFalse(response.json()["is_published"])
|
|
|
|
def test_load_with_user_locale(self):
|
|
dashboard = self.create_dashboard().with_user(self.user)
|
|
self.authenticate(self.user.login, self.user.password)
|
|
self.user.lang = "en_US"
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
snapshot = data["snapshot"]
|
|
snapshot_locale = snapshot["settings"]["locale"]
|
|
self.assertEqual(snapshot_locale["code"], "en_US")
|
|
revisions = data["revisions"]
|
|
self.assertEqual(len(revisions), 1)
|
|
locale_revision = revisions[-1]
|
|
self.assertEqual(locale_revision["serverRevisionId"], snapshot["revisionId"])
|
|
self.assertEqual(locale_revision["commands"][0]["type"], "UPDATE_LOCALE")
|
|
self.assertEqual(locale_revision["commands"][0]["locale"]["code"], "en_US")
|
|
self.assertEqual(locale_revision["commands"][0]["locale"]["weekStart"], 7)
|
|
|
|
self.env.ref("base.lang_fr").active = True
|
|
self.user.lang = "fr_FR"
|
|
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
snapshot = data["snapshot"]
|
|
snapshot_locale = snapshot["settings"]["locale"]
|
|
self.assertEqual(
|
|
snapshot_locale["code"], "en_US", "snapshot locale is not changed"
|
|
)
|
|
revisions = data["revisions"]
|
|
locale_revision = revisions[-1]
|
|
self.assertEqual(locale_revision["serverRevisionId"], snapshot["revisionId"])
|
|
self.assertEqual(locale_revision["commands"][0]["type"], "UPDATE_LOCALE")
|
|
self.assertEqual(locale_revision["commands"][0]["locale"]["code"], "fr_FR")
|
|
self.assertEqual(locale_revision["commands"][0]["locale"]["weekStart"], 1)
|
|
|
|
def test_load_with_company_currency(self):
|
|
self.authenticate(self.user.login, self.user.password)
|
|
dashboard = self.create_dashboard().with_user(self.user)
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
self.assertEqual(
|
|
data["default_currency"],
|
|
self.env["res.currency"].get_company_currency_for_spreadsheet()
|
|
)
|
|
|
|
def test_load_with_user_locale_existing_revisions(self):
|
|
self.authenticate(self.user.login, self.user.password)
|
|
dashboard = self.create_dashboard()
|
|
dashboard.dispatch_spreadsheet_message(self.new_revision_data(dashboard))
|
|
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
revisions = data["revisions"]
|
|
self.assertEqual(len(revisions), 2)
|
|
self.assertEqual(
|
|
revisions[-1]["serverRevisionId"],
|
|
revisions[-2]["nextRevisionId"],
|
|
"revisions ids are chained",
|
|
)
|
|
|
|
def test_translation_namespace(self):
|
|
dashboard = self.create_dashboard()
|
|
self.env['ir.model.data'].sudo().create({
|
|
'name': 'test_translation_namespace',
|
|
'module': 'spreadsheet_dashboard_edition',
|
|
'res_id': dashboard.id,
|
|
'model': dashboard._name,
|
|
})
|
|
self.authenticate(self.user.login, self.user.password)
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
self.assertEqual(data["translation_namespace"], "spreadsheet_dashboard_edition")
|
|
|
|
def test_load_sample_dashboard(self):
|
|
self.authenticate(self.user.login, self.user.password)
|
|
sample_dashboard_path = "spreadsheet_dashboard_edition/tests/data/sample_dashboard.json"
|
|
|
|
def get_sample_data():
|
|
with file_open(sample_dashboard_path, 'rb') as f:
|
|
return json.load(f)
|
|
dashboard = self.create_dashboard()
|
|
dashboard.main_data_model_ids = [(4, self.env.ref("base.model_res_bank").id)]
|
|
dashboard.sample_dashboard_file_path = sample_dashboard_path
|
|
|
|
# when no records are available for the main data model and no revisions, the sample data is loaded
|
|
self.env["res.bank"].search([]).action_archive()
|
|
self.env["spreadsheet.revision"].search([]).unlink()
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
self.assertTrue(data["is_sample"])
|
|
self.assertEqual(data["snapshot"], get_sample_data())
|
|
|
|
# when there are revisions, the sample data is not loaded
|
|
dashboard.dispatch_spreadsheet_message(self.new_revision_data(dashboard))
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
self.assertFalse(data.get("is_sample"))
|
|
self.assertNotEqual(data["snapshot"], get_sample_data())
|
|
|
|
# when no revisions, but we have records for the main data model, the sample data is not loaded
|
|
self.env["spreadsheet.revision"].search([]).unlink()
|
|
self.env["res.bank"].create({"name": "My bank"})
|
|
response = self.url_open('/spreadsheet/dashboard/data/%s' % dashboard.id)
|
|
data = response.json()
|
|
self.assertFalse(data.get("is_sample"))
|
|
self.assertNotEqual(data["snapshot"], get_sample_data())
|
|
|
|
def test_get_selector_spreadsheet_models(self):
|
|
result = self.env["spreadsheet.mixin"].with_user(self.user).get_selector_spreadsheet_models()
|
|
self.assertFalse(any(r["model"] == "spreadsheet.dashboard" for r in result))
|
|
|
|
self.user.group_ids |= self.env.ref("spreadsheet_dashboard.group_dashboard_manager")
|
|
result = self.env["spreadsheet.mixin"].with_user(self.user).get_selector_spreadsheet_models()
|
|
self.assertTrue(any(r["model"] == "spreadsheet.dashboard" for r in result))
|