diff --git a/mergebot_test_utils/utils.py b/mergebot_test_utils/utils.py index e5c24fbd..3baa3102 100644 --- a/mergebot_test_utils/utils.py +++ b/mergebot_test_utils/utils.py @@ -3,6 +3,7 @@ import contextlib import itertools import re import time +import typing from lxml import html @@ -214,3 +215,17 @@ def prevent_unstaging(st) -> None: yield finally: st.active = True + + +TYPE_MAPPING = { + 'boolean': 'integer', + 'date': 'datetime', + 'monetary': 'float', + 'selection': 'char', + 'many2one': 'char', +} +def read_tracking_value(tv) -> tuple[str, typing.Any, typing.Any]: + field_id = tv.field_id if 'field_id' in tv else tv.field + field_type = field_id.field_type if 'field_type' in field_id else field_id.ttype + t = TYPE_MAPPING.get(field_type) or field_type + return field_id.name, tv[f"old_value_{t}"], tv[f"new_value_{t}"] diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index 440518e6..afbc491f 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -11,7 +11,8 @@ import requests from lxml import html import odoo -from utils import _simple_init, seen, matches, get_partner, Commit, pr_page, to_pr, part_of, ensure_one +from utils import _simple_init, seen, matches, get_partner, Commit, pr_page, to_pr, part_of, ensure_one, read_tracking_value + @pytest.fixture(autouse=True) def _configure_statuses(request, project, repo): @@ -157,31 +158,29 @@ def test_trivial_flow(env, repo, page, users, config): # reverse because the messages are in newest-to-oldest by default # (as that's how you want to read them) - messages = reversed([ - (m.author_id.display_name, m.body, list(zip( - m.tracking_value_ids.get_old_display_value(), - m.tracking_value_ids.get_new_display_value(), - ))) - for m in pr_id.message_ids - ]) + messages = pr_id.message_ids[::-1].mapped(lambda m: ( + m.author_id.display_name, + m.body, + list(map(read_tracking_value, m.tracking_value_ids)), + )) assert list(messages) == [ (users['user'], '
Pull Request created
', []), - (users['user'], '', [(c1, c2)]), - ('OdooBot', f'statuses changed on {c2}
', [('Opened', 'Validated')]), + (users['user'], '', [('head', c1, c2)]), + ('OdooBot', f'statuses changed on {c2}
', [('state', 'Opened', 'Validated')]), # reviewer approved changing the state and setting reviewer as reviewer # plus set merge method ('Reviewer', '', [ - ('Validated', 'Ready'), - ('', 'rebase and merge, using the PR as merge commit message'), - ('', 'Reviewer'), + ('state', 'Validated', 'Ready'), + ('merge_method', '', 'rebase and merge, using the PR as merge commit message'), + ('reviewed_by', '', 'Reviewer'), ]), # staging succeeded (matches('$$'), f'staging {st.id} succeeded
', [ # set merge date - (False, pr_id.merge_date + 'Z'), + ('merge_date', False, pr_id.merge_date), # updated state - ('Ready', 'Merged'), + ('state', 'Ready', 'Merged'), ]), ] diff --git a/runbot_merge/tests/test_patching.py b/runbot_merge/tests/test_patching.py index aa76f8e0..2774599a 100644 --- a/runbot_merge/tests/test_patching.py +++ b/runbot_merge/tests/test_patching.py @@ -2,7 +2,7 @@ import xmlrpc.client import pytest -from utils import Commit +from utils import Commit, read_tracking_value # basic udiff / show style patch, updates `b` from `1` to `2` BASIC_UDIFF = """\ @@ -23,22 +23,6 @@ index 000000000000..000000000000 100644 +2 """ -FIELD_MAPPING = { - 'boolean': ('old_value_integer', 'new_value_integer'), - 'date': ('old_value_datetime', 'new_value_datetime'), - 'datetime': ('old_value_datetime', 'new_value_datetime'), - 'char': ('old_value_char', 'new_value_char'), - 'float': ('old_value_float', 'new_value_float'), - 'integer': ('old_value_integer', 'new_value_integer'), - 'monetary': ('old_value_float', 'new_value_float'), - 'text': ('old_value_text', 'new_value_text'), -} -def read_tracking_value(tv): - field_id = tv.field_id if 'field_id' in tv else tv.field - field_type = field_id.field_type if 'field_type' in field_id else field_id.ttype - old_field_name, new_field_name = FIELD_MAPPING[field_type] - return field_id.name, tv[old_field_name], tv[new_field_name] - @pytest.fixture(autouse=True) def _setup(repo):