Stephen Finucane <step...@that.guru> writes: > This event is rather odd. If you have two patches then the way a > relation is created is by creating a 'PatchRelation' instance and then > setting the 'related' attribute on the first patch followed by the > second patch. Because the event uses the 'Patch' model's 'pre_save' > signal, we'll only see events for the patch being currently saved. This > means no event will be raised for the first patch and only one event, > the one for the second patch, will be raised when the second patch is > being added to the relationship. > > In hindsight, the structure of the event is off. We should have had > something like a 'patch-added-to-relationship' and a > 'patch-removed-from-relationship' event, both with the same fields: > 'project', 'actor', 'patch' and 'related', the latter of which would > have listed all of the _other_ patches in the relationship. Sadly, this > is an API change which means we can't do it now. We may well wish to do > so in the future though.
D'oh. Given that we're bumping the major version of patchwork, couldn't we also bump the API version? I don't think there are many users of the relations events so we might as well try to get this cleaned up before they get popular. Kind regards, Daniel > Signed-off-by: Stephen Finucane <step...@that.guru> > --- > patchwork/tests/test_events.py | 47 ++++++++++++++++++++++++++++++++++ > 1 file changed, 47 insertions(+) > > diff --git patchwork/tests/test_events.py patchwork/tests/test_events.py > index 415237f9..5bac7789 100644 > --- patchwork/tests/test_events.py > +++ patchwork/tests/test_events.py > @@ -172,6 +172,53 @@ class PatchChangedTest(_BaseTestCase): > Event.CATEGORY_PATCH_DELEGATED) > self.assertEventFields(events[3], previous_delegate=delegate_b) > > + def test_patch_relations_changed(self): > + # purposefully setting series to None to minimize additional events > + relation = utils.create_relation() > + patches = utils.create_patches(3, series=None) > + > + # mark the first two patches as related; the second patch should be > the > + # one that the event is raised for > + > + patches[0].related = relation > + patches[0].save() > + patches[1].related = relation > + patches[1].save() > + > + events = _get_events(patch=patches[1]) > + self.assertEqual(events.count(), 2) > + self.assertEqual( > + events[1].category, Event.CATEGORY_PATCH_RELATION_CHANGED) > + self.assertEqual(events[1].project, patches[1].project) > + self.assertEqual(events[1].previous_relation, None) > + self.assertEqual(events[1].current_relation, relation) > + > + # add the third patch > + > + patches[2].related = relation > + patches[2].save() > + > + events = _get_events(patch=patches[2]) > + self.assertEqual(events.count(), 2) > + self.assertEqual( > + events[1].category, Event.CATEGORY_PATCH_RELATION_CHANGED) > + self.assertEqual(events[1].project, patches[1].project) > + self.assertEqual(events[1].previous_relation, None) > + self.assertEqual(events[1].current_relation, relation) > + > + # drop the third patch > + > + patches[2].related = None > + patches[2].save() > + > + events = _get_events(patch=patches[2]) > + self.assertEqual(events.count(), 3) > + self.assertEqual( > + events[2].category, Event.CATEGORY_PATCH_RELATION_CHANGED) > + self.assertEqual(events[2].project, patches[1].project) > + self.assertEqual(events[2].previous_relation, relation) > + self.assertEqual(events[2].current_relation, None) > + > > class CheckCreatedTest(_BaseTestCase): > > -- > 2.25.4 > > _______________________________________________ > Patchwork mailing list > Patchwork@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/patchwork _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork