[IMP] runbot_merge: move read_tracking_value to utils

And use it in test_trivial_flow instead of the kinda half-assed manual
version.
This commit is contained in:
Xavier Morel 2024-10-07 08:06:03 +02:00
parent a45db1e089
commit 4215be770d
3 changed files with 30 additions and 32 deletions

View File

@ -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}"]

View File

@ -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'], '<p>Pull Request created</p>', []),
(users['user'], '', [(c1, c2)]),
('OdooBot', f'<p>statuses changed on {c2}</p>', [('Opened', 'Validated')]),
(users['user'], '', [('head', c1, c2)]),
('OdooBot', f'<p>statuses changed on {c2}</p>', [('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'<p>staging {st.id} succeeded</p>', [
# set merge date
(False, pr_id.merge_date + 'Z'),
('merge_date', False, pr_id.merge_date),
# updated state
('Ready', 'Merged'),
('state', 'Ready', 'Merged'),
]),
]

View File

@ -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):