Skip to content

Commit 45a8172

Browse files
assignment fixes
1 parent c164aa0 commit 45a8172

2 files changed

Lines changed: 46 additions & 28 deletions

File tree

sync2jira/downstream_issue.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,7 +1230,7 @@ def _update_assignee(client, existing, issue, overwrite):
12301230
"""
12311231

12321232
us_exists = bool(
1233-
issue.assignee and issue.assignee[0] and issue.assignee[0].get("fullname")
1233+
issue.assignee and issue.assignee[0] and issue.assignee[0].get("login")
12341234
)
12351235
assignee = existing.fields.assignee
12361236
ds_exists = bool(assignee) and _jira_user_display_label(assignee) is not None
@@ -1239,14 +1239,19 @@ def _update_assignee(client, existing, issue, overwrite):
12391239
# Let assign_user() figure out what to do.
12401240
update = True
12411241
elif us_exists:
1242-
# Overwrite the downstream assignment only if it is different from
1243-
# the upstream one.
1244-
un = issue.assignee[0]["fullname"]
1245-
dn = _jira_user_display_label(assignee)
1246-
update = un != dn and remove_diacritics(un) != dn
1242+
un = issue.assignee[0].get("fullname")
1243+
if un:
1244+
# Overwrite the downstream assignment only if it is different
1245+
# from the upstream one.
1246+
dn = _jira_user_display_label(assignee)
1247+
update = un != dn and remove_diacritics(un) != dn
1248+
else:
1249+
# Upstream assignee has no fullname; let assign_user() resolve
1250+
# via LDAP/email lookup using the login.
1251+
update = True
12471252
else:
1248-
# Without an upstream owner, update only if the downstream is not
1249-
# assigned to the project owner.
1253+
# Without an upstream assignee, update only if the downstream is
1254+
# not assigned to the project owner.
12501255
update = issue.downstream.get("owner") != _jira_user_display_label(assignee)
12511256
else:
12521257
# We're not overwriting, so call assign_user() only if the downstream

tests/test_downstream_issue.py

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,25 +1686,29 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
16861686
(12, None),
16871687
# - upstream assignee exists and assignments are different: called with remove_all=False
16881688
(13, False),
1689-
# - upstream assignee has a fullname of None: called with remove_all=True
1690-
(14, True),
1689+
# - upstream assignee has login but fullname is None: called with remove_all=False
1690+
(14, False),
1691+
# - upstream assignee has login but no fullname key: called with remove_all=False
1692+
(15, False),
16911693
# - upstream assignee does not exist: called with remove_all=True
1692-
(15, True),
1693-
# - upstream assignee is an empty list: called with remove_all=True
16941694
(16, True),
1695+
# - upstream assignee is an empty list: called with remove_all=True
1696+
(17, True),
16951697
# - downstream assignee is owner
16961698
# - upstream assignee exists and assignments are different: called with remove_all=False
16971699
(21, False),
16981700
# - upstream assignee exists and assignments are different: called with remove_all=False
16991701
(22, False),
17001702
# - upstream assignee exists and assignments are different: called with remove_all=False
17011703
(23, False),
1702-
# - upstream assignee has a fullname of None: not called (already assigned to owner)
1703-
(24, None),
1704+
# - upstream assignee has login but fullname is None: called with remove_all=False
1705+
(24, False),
1706+
# - upstream assignee has login but no fullname key: called with remove_all=False
1707+
(25, False),
17041708
# - upstream assignee does not exist: not called (already assigned to owner)
1705-
(25, None),
1706-
# - upstream assignee is an empty list: not called (already assigned to owner)
17071709
(26, None),
1710+
# - upstream assignee is an empty list: not called (already assigned to owner)
1711+
(27, None),
17081712
# - downstream assignee does not exist
17091713
# - upstream assignee exists: called with remove_all=False
17101714
(31, False),
@@ -1714,10 +1718,12 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
17141718
(33, False),
17151719
# - upstream assignee has a fullname of None: called with remove_all=False
17161720
(34, False),
1717-
# - upstream assignee does not exist: called with remove_all=False
1721+
# - upstream assignee has login but no fullname key: called with remove_all=False
17181722
(35, False),
1719-
# - upstream assignee is an empty list: called with remove_all=False
1723+
# - upstream assignee does not exist: called with remove_all=False
17201724
(36, False),
1725+
# - upstream assignee is an empty list: called with remove_all=False
1726+
(37, False),
17211727
# - overwrite = False
17221728
# - downstream assignee is set:
17231729
# - upstream assignee exists and assignments are equal: not called
@@ -1728,10 +1734,12 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
17281734
(43, None),
17291735
# - upstream assignee has a fullname of None: not called
17301736
(44, None),
1731-
# - upstream assignee does not exist: not called
1737+
# - upstream assignee has login but no fullname key: not called
17321738
(45, None),
1733-
# - upstream assignee is an empty list: not called
1739+
# - upstream assignee does not exist: not called
17341740
(46, None),
1741+
# - upstream assignee is an empty list: not called
1742+
(47, None),
17351743
# - downstream assignee is owner
17361744
# - upstream assignee exists and assignments are different: not called
17371745
(51, None),
@@ -1741,10 +1749,12 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
17411749
(53, None),
17421750
# - upstream assignee has a fullname of None: not called
17431751
(54, None),
1744-
# - upstream assignee does not exist: not called
1752+
# - upstream assignee has login but no fullname key: not called
17451753
(55, None),
1746-
# - upstream assignee is an empty list: not called
1754+
# - upstream assignee does not exist: not called
17471755
(56, None),
1756+
# - upstream assignee is an empty list: not called
1757+
(57, None),
17481758
# - downstream assignee does not exist
17491759
# - upstream assignee exists: called with remove_all=False
17501760
(61, False),
@@ -1754,10 +1764,12 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
17541764
(63, False),
17551765
# - upstream assignee has a fullname of None: called with remove_all=False
17561766
(64, False),
1757-
# - upstream assignee does not exist: called with remove_all=False
1767+
# - upstream assignee has login but no fullname key: called with remove_all=False
17581768
(65, False),
1759-
# - upstream assignee is an empty list: called with remove_all=False
1769+
# - upstream assignee does not exist: called with remove_all=False
17601770
(66, False),
1771+
# - upstream assignee is an empty list: called with remove_all=False
1772+
(67, False),
17611773
)
17621774
)
17631775
match = "Erik"
@@ -1772,10 +1784,11 @@ def test_update_assignee_all(self, mock_client, mock_assign_user):
17721784
setattr(self.mock_downstream.fields.assignee, "name", ds)
17731785

17741786
for us in (
1775-
[{"fullname": match}],
1776-
[{"fullname": "Èŕìḱ"}],
1777-
[{"fullname": "Bob"}],
1778-
[{"fullname": None}],
1787+
[{"login": "erik", "fullname": match}],
1788+
[{"login": "erik", "fullname": "Èŕìḱ"}],
1789+
[{"login": "bob", "fullname": "Bob"}],
1790+
[{"login": "anon", "fullname": None}],
1791+
[{"login": "jdoe"}],
17791792
None,
17801793
[],
17811794
):

0 commit comments

Comments
 (0)