355 lines
13 KiB
Python
355 lines
13 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.addons.mail.tools.discuss import Store
|
|
from odoo.tests import tagged, TransactionCase
|
|
|
|
|
|
@tagged("post_install", "-at_install")
|
|
class TestDiscussTools(TransactionCase):
|
|
"""Test class for discuss tools."""
|
|
|
|
# 0xx generic tests (key not in ids_by_model)
|
|
|
|
def test_010_store_dict(self):
|
|
"""Test dict is present in result."""
|
|
store = Store()
|
|
store.add("key1", {"id": 1, "test": True})
|
|
self.assertEqual(store.get_result(), {"key1": [{"id": 1, "test": True}]})
|
|
|
|
def test_011_store_dict_update_same_id(self):
|
|
"""Test dict update same id."""
|
|
store = Store()
|
|
store.add("key1", {"id": 1, "test": True})
|
|
store.add("key1", {"id": 1, "test": False, "abc": 1})
|
|
self.assertEqual(store.get_result(), {"key1": [{"id": 1, "test": False, "abc": 1}]})
|
|
|
|
def test_012_store_dict_update_multiple_ids(self):
|
|
"""Test dict update multiple ids."""
|
|
store = Store()
|
|
store.add("key1", {"id": 1, "test": True})
|
|
store.add("key1", {"id": 2, "test": True})
|
|
store.add("key1", {"id": 2, "test": False, "abc": 1})
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{"key1": [{"id": 1, "test": True}, {"id": 2, "test": False, "abc": 1}]},
|
|
)
|
|
|
|
def test_014_store_dict_update_multiple_ids_list(self):
|
|
"""Test dict update multiple ids with a single list."""
|
|
store = Store()
|
|
store.add(
|
|
"key1",
|
|
[
|
|
{"id": 1, "test": True},
|
|
{"id": 2, "test": True},
|
|
{"id": 2, "test": True, "abc": 1},
|
|
{"id": 2, "test": False, "abc": 2},
|
|
{"id": 1, "test": False},
|
|
],
|
|
)
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"key1": [
|
|
{"id": 1, "test": False},
|
|
{"id": 2, "test": False, "abc": 2},
|
|
]
|
|
},
|
|
)
|
|
|
|
def test_020_store_list(self):
|
|
"""Test list is present in result."""
|
|
store = Store()
|
|
store.add("key2", [{"id": 1}, {"id": 2}])
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 1}, {"id": 2}]})
|
|
|
|
def test_021_store_list_append(self):
|
|
"""Test list append."""
|
|
store = Store()
|
|
store.add("key2", [{"id": 1}, {"id": 2}])
|
|
store.add("key2", [{"id": 4}, {"id": 5}])
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 1}, {"id": 2}, {"id": 4}, {"id": 5}]})
|
|
|
|
def test_030_store_add_key(self):
|
|
"""Test adding several keys."""
|
|
store = Store()
|
|
store.add("key1", {"id": 1, "test": True})
|
|
store.add("key2", [{"id": 4}, {"id": 5}])
|
|
self.assertEqual(
|
|
store.get_result(), {"key1": [{"id": 1, "test": True}], "key2": [{"id": 4}, {"id": 5}]}
|
|
)
|
|
|
|
def test_040_store_invalid(self):
|
|
"""Test adding invalid value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("key1", True)
|
|
|
|
def test_042_store_invalid_missing_id(self):
|
|
"""Test Thread adding invalid list value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("key1", {"test": True})
|
|
|
|
def test_050_store_dict_to_list(self):
|
|
"""Test adding dict to a list."""
|
|
store = Store()
|
|
store.add("key2", [{"id": 2}])
|
|
store.add("key2", {"id": 1})
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 2}, {"id": 1}]})
|
|
|
|
def test_051_store_list_to_dict(self):
|
|
"""Test adding list to a dict."""
|
|
store = Store()
|
|
store.add("key2", {"id": 1})
|
|
store.add("key2", [{"id": 2}])
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 1}, {"id": 2}]})
|
|
|
|
def test_060_store_data_empty_val(self):
|
|
"""Test empty values are not present in result."""
|
|
store = Store()
|
|
store.add("key1", {})
|
|
self.assertEqual(store.get_result(), {})
|
|
|
|
def test_061_store_data_empty_not_empty(self):
|
|
"""Test mixing empty and non-empty values."""
|
|
store = Store()
|
|
store.add("key1", {})
|
|
store.add("key2", {"id": 1})
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 1}]})
|
|
|
|
# 1xx Store specific tests (singleton in ids_by_model)
|
|
|
|
def test_110_store_store_singleton(self):
|
|
"""Test Store dict is present in result as a singleton."""
|
|
store = Store()
|
|
store.add({"test": True})
|
|
self.assertEqual(store.get_result(), {"Store": {"test": True}})
|
|
|
|
def test_111_store_store_dict_update(self):
|
|
"""Test Store dict update."""
|
|
store = Store()
|
|
store.add({"test": True})
|
|
store.add({"test": False, "abc": 1})
|
|
self.assertEqual(store.get_result(), {"Store": {"test": False, "abc": 1}})
|
|
|
|
def test_130_store_store_add_key(self):
|
|
"""Test Store adding several keys."""
|
|
store = Store()
|
|
store.add({"test": True})
|
|
store.add("key2", [{"id": 4}, {"id": 5}])
|
|
self.assertEqual(
|
|
store.get_result(), {"Store": {"test": True}, "key2": [{"id": 4}, {"id": 5}]}
|
|
)
|
|
|
|
def test_140_store_store_invalid_bool(self):
|
|
"""Test Store adding invalid value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add(True)
|
|
|
|
def test_141_store_store_invalid_list(self):
|
|
"""Test adding invalid value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add([{"test": True}])
|
|
|
|
def test_160_store_store_data_empty_val(self):
|
|
"""Test Store empty values are not present in result."""
|
|
store = Store()
|
|
store.add({})
|
|
self.assertEqual(store.get_result(), {})
|
|
|
|
def test_161_store_store_data_empty_not_empty(self):
|
|
"""Test Store mixing empty and non-empty values."""
|
|
store = Store()
|
|
store.add({})
|
|
store.add("key2", {"id": 1})
|
|
self.assertEqual(store.get_result(), {"key2": [{"id": 1}]})
|
|
|
|
# 2xx Thread specific tests (dual id in ids_by_model)
|
|
|
|
def test_210_store_thread_dict(self):
|
|
"""Test Thread dict is present in result."""
|
|
store = Store()
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": True})
|
|
self.assertEqual(
|
|
store.get_result(), {"mail.thread": [{"id": 1, "model": "res.partner", "test": True}]}
|
|
)
|
|
|
|
def test_211_store_thread_dict_update_same_id(self):
|
|
"""Test Thread dict update same id."""
|
|
store = Store()
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": True})
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": False, "abc": 1})
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{"mail.thread": [{"id": 1, "model": "res.partner", "test": False, "abc": 1}]},
|
|
)
|
|
|
|
def test_212_store_thread_dict_update_multiple_ids(self):
|
|
"""Test Thread dict update multiple ids."""
|
|
store = Store()
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": True})
|
|
store.add("mail.thread", {"id": 2, "model": "res.partner", "test": True})
|
|
store.add("mail.thread", {"id": 2, "model": "res.partner", "test": False, "abc": 1})
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"mail.thread": [
|
|
{"id": 1, "model": "res.partner", "test": True},
|
|
{"id": 2, "model": "res.partner", "test": False, "abc": 1},
|
|
]
|
|
},
|
|
)
|
|
|
|
def test_213_store_thread_dict_update_multiple_models(self):
|
|
"""Test Thread dict update multiple models."""
|
|
store = Store()
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": True})
|
|
store.add("mail.thread", {"id": 2, "model": "res.partner", "test": True})
|
|
store.add("mail.thread", {"id": 2, "model": "discuss.channel", "test": True, "abc": 1})
|
|
store.add("mail.thread", {"id": 2, "model": "discuss.channel", "test": False, "abc": 2})
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner", "test": False})
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"mail.thread": [
|
|
{"id": 1, "model": "res.partner", "test": False},
|
|
{"id": 2, "model": "res.partner", "test": True},
|
|
{"id": 2, "model": "discuss.channel", "test": False, "abc": 2},
|
|
]
|
|
},
|
|
)
|
|
|
|
def test_214_store_thread_dict_update_multiple_models_list(self):
|
|
"""Test Thread dict update multiple models with a single list."""
|
|
store = Store()
|
|
store.add(
|
|
"mail.thread",
|
|
[
|
|
{"id": 1, "model": "res.partner", "test": True},
|
|
{"id": 2, "model": "res.partner", "test": True},
|
|
{"id": 2, "model": "discuss.channel", "test": True, "abc": 1},
|
|
{"id": 2, "model": "discuss.channel", "test": False, "abc": 2},
|
|
{"id": 1, "model": "res.partner", "test": False},
|
|
],
|
|
)
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"mail.thread": [
|
|
{"id": 1, "model": "res.partner", "test": False},
|
|
{"id": 2, "model": "res.partner", "test": True},
|
|
{"id": 2, "model": "discuss.channel", "test": False, "abc": 2},
|
|
]
|
|
},
|
|
)
|
|
|
|
def test_220_store_thread_list(self):
|
|
"""Test Thread list is present in result."""
|
|
store = Store()
|
|
store.add(
|
|
"mail.thread", [{"id": 1, "model": "res.partner"}, {"id": 2, "model": "res.partner"}]
|
|
)
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{"mail.thread": [{"id": 1, "model": "res.partner"}, {"id": 2, "model": "res.partner"}]},
|
|
)
|
|
|
|
def test_221_store_thread_list_append(self):
|
|
"""Test Thread list append."""
|
|
store = Store()
|
|
store.add(
|
|
"mail.thread", [{"id": 1, "model": "res.partner"}, {"id": 2, "model": "res.partner"}]
|
|
)
|
|
store.add(
|
|
"mail.thread", [{"id": 4, "model": "res.partner"}, {"id": 5, "model": "res.partner"}]
|
|
)
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"mail.thread": [
|
|
{"id": 1, "model": "res.partner"},
|
|
{"id": 2, "model": "res.partner"},
|
|
{"id": 4, "model": "res.partner"},
|
|
{"id": 5, "model": "res.partner"},
|
|
]
|
|
},
|
|
)
|
|
|
|
def test_230_store_thread_add_key(self):
|
|
"""Test Thread adding several keys."""
|
|
store = Store()
|
|
store.add("key1", {"id": 1, "test": True})
|
|
store.add(
|
|
"mail.thread", [{"id": 4, "model": "res.partner"}, {"id": 5, "model": "res.partner"}]
|
|
)
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{
|
|
"key1": [{"id": 1, "test": True}],
|
|
"mail.thread": [
|
|
{"id": 4, "model": "res.partner"},
|
|
{"id": 5, "model": "res.partner"},
|
|
],
|
|
},
|
|
)
|
|
|
|
def test_240_store_thread_invalid_bool(self):
|
|
"""Test Thread adding invalid bool value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("mail.thread", True)
|
|
|
|
def test_241_store_thread_invalid_list(self):
|
|
"""Test Thread adding invalid list value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("mail.thread", [True])
|
|
|
|
def test_242_store_thread_invalid_missing_id(self):
|
|
"""Test Thread adding invalid list value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("mail.thread", {"model": "res.partner"})
|
|
|
|
def test_243_store_thread_invalid_missing_model(self):
|
|
"""Test Thread adding invalid list value."""
|
|
store = Store()
|
|
with self.assertRaises(AssertionError):
|
|
store.add("mail.thread", {"id": 1})
|
|
|
|
def test_250_store_thread_dict_to_list(self):
|
|
"""Test Thread adding dict to a list."""
|
|
store = Store()
|
|
store.add("mail.thread", [{"id": 2, "model": "res.partner"}])
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner"})
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{"mail.thread": [{"id": 2, "model": "res.partner"}, {"id": 1, "model": "res.partner"}]},
|
|
)
|
|
|
|
def test_251_store_thread_list_to_dict(self):
|
|
"""Test Thread adding list to a dict."""
|
|
store = Store()
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner"})
|
|
store.add("mail.thread", [{"id": 2, "model": "res.partner"}])
|
|
self.assertEqual(
|
|
store.get_result(),
|
|
{"mail.thread": [{"id": 1, "model": "res.partner"}, {"id": 2, "model": "res.partner"}]},
|
|
)
|
|
|
|
def test_260_store_thread_data_empty_val(self):
|
|
"""Test Thread empty values are not present in result."""
|
|
store = Store()
|
|
store.add("mail.thread", {})
|
|
self.assertEqual(store.get_result(), {})
|
|
|
|
def test_261_store_thread_data_empty_not_empty(self):
|
|
"""Test Thread mixing empty and non-empty values."""
|
|
store = Store()
|
|
store.add("key1", {})
|
|
store.add("mail.thread", {"id": 1, "model": "res.partner"})
|
|
self.assertEqual(store.get_result(), {"mail.thread": [{"id": 1, "model": "res.partner"}]})
|