|
41 | 41 | from patchwork.tests.utils import create_cover_comment |
42 | 42 | from patchwork.tests.utils import create_patch |
43 | 43 | from patchwork.tests.utils import create_patch_comment |
| 44 | +from patchwork.tests.utils import create_label |
44 | 45 | from patchwork.tests.utils import create_project |
45 | 46 | from patchwork.tests.utils import create_series |
46 | 47 | from patchwork.tests.utils import create_series_reference |
@@ -542,7 +543,7 @@ def _create_email(subject): |
542 | 543 |
|
543 | 544 | def _test_encoding(self, subject_header, parsed_subject): |
544 | 545 | email = self._create_email(subject_header) |
545 | | - name, _ = clean_subject(email.get('Subject')) |
| 546 | + name, _, _ = clean_subject(email.get('Subject')) |
546 | 547 | self.assertEqual(name, parsed_subject) |
547 | 548 |
|
548 | 549 | def test_subject_ascii_encoding(self): |
@@ -1106,52 +1107,61 @@ def test_tags(self): |
1106 | 1107 |
|
1107 | 1108 | class SubjectTest(TestCase): |
1108 | 1109 | def test_clean_subject(self): |
1109 | | - self.assertEqual(clean_subject('meep'), ('meep', [])) |
1110 | | - self.assertEqual(clean_subject('Re: meep'), ('meep', [])) |
1111 | | - self.assertEqual(clean_subject('[PATCH] meep'), ('meep', [])) |
| 1110 | + self.assertEqual(clean_subject('meep'), ('meep', [], [])) |
| 1111 | + self.assertEqual(clean_subject('Re: meep'), ('meep', [], [])) |
1112 | 1112 | self.assertEqual( |
1113 | | - clean_subject('[PATCH] meep \n meep'), ('meep meep', []) |
| 1113 | + clean_subject('[PATCH] meep'), ('meep', [], ['PATCH']) |
1114 | 1114 | ) |
1115 | 1115 | self.assertEqual( |
1116 | | - clean_subject('[PATCH] meep,\n meep'), ('meep, meep', []) |
| 1116 | + clean_subject('[PATCH] meep \n meep'), ('meep meep', [], ['PATCH']) |
1117 | 1117 | ) |
1118 | 1118 | self.assertEqual( |
1119 | | - clean_subject('[PATCH RFC] meep'), ('[RFC] meep', ['RFC']) |
| 1119 | + clean_subject('[PATCH] meep,\n meep'), |
| 1120 | + ('meep, meep', [], ['PATCH']), |
1120 | 1121 | ) |
1121 | 1122 | self.assertEqual( |
1122 | | - clean_subject('[PATCH,RFC] meep'), ('[RFC] meep', ['RFC']) |
| 1123 | + clean_subject('[PATCH RFC] meep'), |
| 1124 | + ('[RFC] meep', ['RFC'], ['PATCH']), |
1123 | 1125 | ) |
1124 | 1126 | self.assertEqual( |
1125 | | - clean_subject('[PATCH,1/2] meep'), ('[1/2] meep', ['1/2']) |
| 1127 | + clean_subject('[PATCH,RFC] meep'), |
| 1128 | + ('[RFC] meep', ['RFC'], ['PATCH']), |
| 1129 | + ) |
| 1130 | + self.assertEqual( |
| 1131 | + clean_subject('[PATCH,1/2] meep'), |
| 1132 | + ('[1/2] meep', ['1/2'], ['PATCH']), |
1126 | 1133 | ) |
1127 | 1134 | self.assertEqual( |
1128 | 1135 | clean_subject('[PATCH RFC 1/2] meep'), |
1129 | | - ('[RFC,1/2] meep', ['RFC', '1/2']), |
| 1136 | + ('[RFC,1/2] meep', ['RFC', '1/2'], ['PATCH']), |
1130 | 1137 | ) |
1131 | 1138 | self.assertEqual( |
1132 | | - clean_subject('[PATCH] [RFC] meep'), ('[RFC] meep', ['RFC']) |
| 1139 | + clean_subject('[PATCH] [RFC] meep'), |
| 1140 | + ('[RFC] meep', ['RFC'], ['PATCH']), |
1133 | 1141 | ) |
1134 | 1142 | self.assertEqual( |
1135 | 1143 | clean_subject('[PATCH] [RFC,1/2] meep'), |
1136 | | - ('[RFC,1/2] meep', ['RFC', '1/2']), |
| 1144 | + ('[RFC,1/2] meep', ['RFC', '1/2'], ['PATCH']), |
1137 | 1145 | ) |
1138 | 1146 | self.assertEqual( |
1139 | 1147 | clean_subject('[PATCH] [RFC] [1/2] meep'), |
1140 | | - ('[RFC,1/2] meep', ['RFC', '1/2']), |
| 1148 | + ('[RFC,1/2] meep', ['RFC', '1/2'], ['PATCH']), |
1141 | 1149 | ) |
1142 | 1150 | self.assertEqual( |
1143 | 1151 | clean_subject('[PATCH] rewrite [a-z] regexes'), |
1144 | | - ('rewrite [a-z] regexes', []), |
| 1152 | + ('rewrite [a-z] regexes', [], ['PATCH']), |
1145 | 1153 | ) |
1146 | 1154 | self.assertEqual( |
1147 | 1155 | clean_subject('[PATCH] [RFC] rewrite [a-z] regexes'), |
1148 | | - ('[RFC] rewrite [a-z] regexes', ['RFC']), |
| 1156 | + ('[RFC] rewrite [a-z] regexes', ['RFC'], ['PATCH']), |
1149 | 1157 | ) |
1150 | 1158 | self.assertEqual( |
1151 | | - clean_subject('[foo] [bar] meep', ['foo']), ('[bar] meep', ['bar']) |
| 1159 | + clean_subject('[foo] [bar] meep', ['foo']), |
| 1160 | + ('[bar] meep', ['bar'], ['foo']), |
1152 | 1161 | ) |
1153 | 1162 | self.assertEqual( |
1154 | | - clean_subject('[FOO] [bar] meep', ['foo']), ('[bar] meep', ['bar']) |
| 1163 | + clean_subject('[FOO] [bar] meep', ['foo']), |
| 1164 | + ('[bar] meep', ['bar'], ['FOO']), |
1155 | 1165 | ) |
1156 | 1166 |
|
1157 | 1167 | def test_subject_check(self): |
@@ -1570,3 +1580,59 @@ def test_parse_depends_on_url(self): |
1570 | 1580 | result = parser.parse_depends_on('\n'.join([content2, content3])) |
1571 | 1581 | self.assertIn(self.series1, result) |
1572 | 1582 | self.assertIn(self.series2, result) |
| 1583 | + |
| 1584 | + |
| 1585 | +class TestParseLabels(TestCase): |
| 1586 | + orig_diff = read_patch('0001-add-line.patch') |
| 1587 | + |
| 1588 | + def setUp(self): |
| 1589 | + create_state() |
| 1590 | + self.project = create_project() |
| 1591 | + |
| 1592 | + self.label = create_label(name='label', project=None) |
| 1593 | + self.label_rfc = create_label(name='RFC', project=self.project) |
| 1594 | + |
| 1595 | + def test_single_label(self): |
| 1596 | + msgid = make_msgid() |
| 1597 | + email = create_email( |
| 1598 | + self.orig_diff, |
| 1599 | + listid=self.project.listid, |
| 1600 | + msgid=msgid, |
| 1601 | + subject='[PATCH,label] test subject', |
| 1602 | + ) |
| 1603 | + _parse_mail(email) |
| 1604 | + |
| 1605 | + patch = Patch.objects.filter(msgid=msgid)[0] |
| 1606 | + self.assertEqual( |
| 1607 | + list(patch.labels.values_list('id', flat=True)), [self.label.id] |
| 1608 | + ) |
| 1609 | + self.assertEqual(patch.name, 'test subject') |
| 1610 | + |
| 1611 | + def test_many_labels(self): |
| 1612 | + msgid = make_msgid() |
| 1613 | + email = create_email( |
| 1614 | + self.orig_diff, |
| 1615 | + listid=self.project.listid, |
| 1616 | + msgid=msgid, |
| 1617 | + subject='[PATCH label v2 RFC 3/8] test subject', |
| 1618 | + ) |
| 1619 | + _parse_mail(email) |
| 1620 | + patch = Patch.objects.filter(msgid=msgid)[0] |
| 1621 | + self.assertEqual(patch.labels.count(), 2) |
| 1622 | + patch_labels = list(patch.labels.values_list('id', flat=True)) |
| 1623 | + self.assertIn(self.label.id, patch_labels) |
| 1624 | + self.assertIn(self.label_rfc.id, patch_labels) |
| 1625 | + self.assertEqual(patch.name, '[v2,3/8] test subject') |
| 1626 | + |
| 1627 | + def test_unknown_label(self): |
| 1628 | + msgid = make_msgid() |
| 1629 | + email = create_email( |
| 1630 | + self.orig_diff, |
| 1631 | + listid=self.project.listid, |
| 1632 | + msgid=msgid, |
| 1633 | + subject='[PATCH,unknown-label] test subject', |
| 1634 | + ) |
| 1635 | + _parse_mail(email) |
| 1636 | + patch = Patch.objects.filter(msgid=msgid)[0] |
| 1637 | + self.assertEqual(patch.labels.count(), 0) |
| 1638 | + self.assertEqual(patch.name, '[unknown-label] test subject') |
0 commit comments