forked from Mapan/odoo17e
203 lines
9.5 KiB
Python
203 lines
9.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime
|
|
from freezegun import freeze_time
|
|
|
|
from odoo.exceptions import UserError
|
|
from odoo.tests.common import new_test_user
|
|
from odoo.addons.spreadsheet_edition.tests.spreadsheet_test_case import SpreadsheetTestCase
|
|
|
|
|
|
class SpreadsheetMixinTest(SpreadsheetTestCase):
|
|
|
|
|
|
def test_copy_revisions(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
copy = spreadsheet.copy()
|
|
self.assertEqual(
|
|
copy.spreadsheet_revision_ids.commands,
|
|
spreadsheet.spreadsheet_revision_ids.commands,
|
|
)
|
|
|
|
def test_dont_copy_revisions_if_provided(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
copy = spreadsheet.copy({"spreadsheet_revision_ids": []})
|
|
self.assertFalse(copy.spreadsheet_revision_ids)
|
|
|
|
def test_reset_spreadsheet_data(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
# one revision before the snapshot (it's archived by the snapshot)
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
self.snapshot(
|
|
spreadsheet,
|
|
spreadsheet.server_revision_id, "snapshot-revision-id", {"sheets": [], "revisionId": "snapshot-revision-id"},
|
|
)
|
|
# one revision after the snapshot
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
spreadsheet.spreadsheet_data = r"{}"
|
|
self.assertFalse(spreadsheet.spreadsheet_snapshot)
|
|
self.assertFalse(
|
|
spreadsheet.with_context(active_test=True).spreadsheet_revision_ids,
|
|
)
|
|
|
|
def test_save_spreadsheet_snapshot(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
server_revision_id = spreadsheet.server_revision_id
|
|
snapshot = {"sheets": [], "revisionId": spreadsheet.server_revision_id}
|
|
spreadsheet.save_spreadsheet_snapshot(snapshot)
|
|
self.assertNotEqual(spreadsheet.server_revision_id, server_revision_id)
|
|
self.assertEqual(
|
|
spreadsheet._get_spreadsheet_snapshot(),
|
|
dict(snapshot, revisionId=spreadsheet.server_revision_id),
|
|
)
|
|
|
|
def test_save_spreadsheet_snapshot_with_invalid_revision_id(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
snapshot = {"sheets": [], "revisionId": spreadsheet.server_revision_id}
|
|
|
|
# one revision is saved in the meantime (concurrently)
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
|
|
with self.assertRaises(UserError):
|
|
spreadsheet.save_spreadsheet_snapshot(snapshot)
|
|
|
|
def test_company_currency(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
company_eur = self.env["res.company"].create({"currency_id": self.env.ref("base.EUR").id, "name": "EUR"})
|
|
company_gbp = self.env["res.company"].create({"currency_id": self.env.ref("base.GBP").id, "name": "GBP"})
|
|
|
|
data = spreadsheet.with_company(company_eur).join_spreadsheet_session()
|
|
self.assertEqual(data["default_currency"]["code"], "EUR")
|
|
self.assertEqual(data["default_currency"]["symbol"], "€")
|
|
|
|
data = spreadsheet.with_company(company_gbp).join_spreadsheet_session()
|
|
self.assertEqual(data["default_currency"]["code"], "GBP")
|
|
self.assertEqual(data["default_currency"]["symbol"], "£")
|
|
|
|
def test_fork_history(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
rev1 = spreadsheet.spreadsheet_revision_ids[0]
|
|
action = spreadsheet.fork_history(rev1.id, {"test": "snapshot"})
|
|
self.assertTrue(isinstance(action, dict))
|
|
|
|
self.assertEqual(action["params"]["message"], "test spreadsheet created")
|
|
self.assertEqual(action["tag"], "display_notification")
|
|
self.assertEqual(action["type"], "ir.actions.client")
|
|
|
|
next_action = action["params"]["next"]
|
|
|
|
self.assertTrue(isinstance(next_action, dict))
|
|
copy_id = next_action["params"]["spreadsheet_id"]
|
|
spreadsheet_copy = self.env["spreadsheet.test"].browse(copy_id)
|
|
self.assertTrue(spreadsheet_copy.exists())
|
|
fork_revision = spreadsheet_copy.with_context(active_test=False).spreadsheet_revision_ids
|
|
self.assertEqual(len(fork_revision), 1)
|
|
self.assertEqual(fork_revision.commands, rev1.commands)
|
|
self.assertEqual(fork_revision.active, False)
|
|
|
|
def test_fork_history_before_snapshot(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
self.snapshot(
|
|
spreadsheet,
|
|
spreadsheet.server_revision_id,
|
|
"snapshot-revision-id",
|
|
{"sheets": [], "revisionId": "snapshot-revision-id"}
|
|
)
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
rev1 = spreadsheet.with_context(active_test=False).spreadsheet_revision_ids[0]
|
|
fork_snapshot = {"test": "snapshot"}
|
|
action = spreadsheet.fork_history(rev1.id, fork_snapshot)
|
|
fork_id = action["params"]["next"]["params"]["spreadsheet_id"]
|
|
spreadsheet_fork = self.env["spreadsheet.test"].browse(fork_id)
|
|
self.assertEqual(spreadsheet_fork._get_spreadsheet_snapshot(), fork_snapshot)
|
|
self.assertEqual(
|
|
spreadsheet_fork.with_context(active_test=False).spreadsheet_revision_ids.active,
|
|
False
|
|
)
|
|
|
|
def test_rename_revision(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
revision = spreadsheet.spreadsheet_revision_ids[0]
|
|
self.assertEqual(revision.name, False)
|
|
|
|
spreadsheet.rename_revision(revision.id, "new revision name")
|
|
self.assertEqual(revision.name, "new revision name")
|
|
|
|
def test_get_spreadsheet_history(self):
|
|
with freeze_time("2020-02-02"):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
self.snapshot(
|
|
spreadsheet,
|
|
spreadsheet.server_revision_id, "snapshot-revision-id", {"sheets": [], "revisionId": "snapshot-revision-id"},
|
|
)
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
user = spreadsheet.create_uid
|
|
data = spreadsheet.get_spreadsheet_history()
|
|
revisions = data["revisions"]
|
|
self.assertEqual(len(revisions), 3)
|
|
for revision in revisions:
|
|
self.assertEqual(revision["timestamp"], datetime(2020, 2, 2, 0, 0, 0))
|
|
self.assertEqual(revision["user"], (user.id, user.name))
|
|
|
|
# from snapshot
|
|
data = spreadsheet.get_spreadsheet_history(True)
|
|
revisions = data["revisions"]
|
|
self.assertEqual(len(revisions), 1)
|
|
self.assertEqual(revisions[0]["timestamp"], datetime(2020, 2, 2, 0, 0, 0))
|
|
self.assertEqual(revisions[0]["user"], (user.id, user.name))
|
|
|
|
def test_get_spreadsheet_base_user_access_right_history(self):
|
|
user = new_test_user(self.env, login="test", groups="base.group_user")
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.dispatch_spreadsheet_message(self.new_revision_data(spreadsheet))
|
|
spreadsheet.invalidate_recordset()
|
|
data = spreadsheet.with_user(user).get_spreadsheet_history()
|
|
self.assertEqual(len(data["revisions"]), 1)
|
|
|
|
def test_empty_spreadsheet_server_revision_id(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
self.assertEqual(spreadsheet.server_revision_id, "START_REVISION")
|
|
|
|
def test_no_data_server_revision_id(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
spreadsheet.spreadsheet_snapshot = False
|
|
spreadsheet.spreadsheet_data = False
|
|
self.assertEqual(spreadsheet.server_revision_id, False)
|
|
|
|
def test_last_revision_is_server_revision_id(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
|
|
revision_data = self.new_revision_data(spreadsheet)
|
|
next_revision_id = revision_data["nextRevisionId"]
|
|
spreadsheet.dispatch_spreadsheet_message(revision_data)
|
|
self.assertEqual(spreadsheet.server_revision_id, next_revision_id)
|
|
|
|
# dispatch new revision on top
|
|
revision_data = self.new_revision_data(spreadsheet)
|
|
next_revision_id = revision_data["nextRevisionId"]
|
|
spreadsheet.dispatch_spreadsheet_message(revision_data)
|
|
self.assertEqual(spreadsheet.server_revision_id, next_revision_id)
|
|
|
|
def test_snapshotted_server_revision_id(self):
|
|
spreadsheet = self.env["spreadsheet.test"].create({})
|
|
snapshot_revision_id = "snapshot-id"
|
|
self.snapshot(
|
|
spreadsheet,
|
|
spreadsheet.server_revision_id,
|
|
snapshot_revision_id,
|
|
{"revisionId": snapshot_revision_id},
|
|
)
|
|
self.assertEqual(spreadsheet.server_revision_id, snapshot_revision_id)
|
|
|
|
# dispatch revision after snapshot
|
|
revision_data = self.new_revision_data(spreadsheet)
|
|
next_revision_id = revision_data["nextRevisionId"]
|
|
spreadsheet.dispatch_spreadsheet_message(revision_data)
|
|
self.assertEqual(spreadsheet.server_revision_id, next_revision_id)
|