diff --git a/conftest.py b/conftest.py index 07f76596..ad1b7de3 100644 --- a/conftest.py +++ b/conftest.py @@ -1063,6 +1063,10 @@ class Model: return val + # because it's difficult to discriminate between methods and fields + def _call(self, name, *args, **kwargs): + return self._env(self._model, name, self._ids, *args, **kwargs) + def __setattr__(self, fieldname, value): assert self._fields[fieldname]['type'] not in ('many2one', 'one2many', 'many2many') self._env(self._model, 'write', self._ids, {fieldname: value}) diff --git a/runbot_merge/models/res_partner.py b/runbot_merge/models/res_partner.py index 9896eeb6..ec11f920 100644 --- a/runbot_merge/models/res_partner.py +++ b/runbot_merge/models/res_partner.py @@ -31,6 +31,22 @@ class Partner(models.Model): email = '' partner.formatted_email = '%s <%s>' % (partner.name, email) +class PartnerMerge(models.TransientModel): + _inherit = 'base.partner.merge.automatic.wizard' + + @api.model + def _update_values(self, src_partners, dst_partner): + # sift down through src partners, removing all github_login and keeping + # the last one + new_login = None + for p in src_partners: + new_login = p.github_login or new_login + if new_login: + src_partners.write({'github_login': False}) + if new_login and not dst_partner.github_login: + dst_partner.github_login = new_login + super()._update_values(src_partners, dst_partner) + class ReviewRights(models.Model): _name = 'res.partner.review' _description = "mapping of review rights between partners and repos" diff --git a/runbot_merge/tests/test_oddities.py b/runbot_merge/tests/test_oddities.py new file mode 100644 index 00000000..d071be84 --- /dev/null +++ b/runbot_merge/tests/test_oddities.py @@ -0,0 +1,22 @@ +def test_partner_merge(env): + p_src = env['res.partner'].create({ + 'name': 'kfhsf', + 'github_login': 'tyu' + }) | env['res.partner'].create({ + 'name': "xxx", + 'github_login': 'xxx' + }) + # proper login with useful info + p_dest = env['res.partner'].create({ + 'name': 'Partner P. Partnersson', + 'github_login': '' + }) + + env['base.partner.merge.automatic.wizard'].create({ + 'state': 'selection', + 'partner_ids': (p_src + p_dest).ids, + 'dst_partner_id': p_dest.id, + })._call('action_merge') + assert not p_src.exists() + assert p_dest.name == 'Partner P. Partnersson' + assert p_dest.github_login == 'xxx'