[#4962] Remove ArtifactReferences when the corresponding Artifact is deleted

Signed-off-by: Cory Johns <johnsca@geek.net>
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index fca2219..ad6c5e7 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -283,6 +283,10 @@
             fp=fp, artifact_id=self._id, **kw)
         return att
 
+    def delete(self):
+        ArtifactReference.query.remove(dict(_id=self.index_id()))
+        super(Artifact, self).delete()
+
 class Snapshot(Artifact):
     """A snapshot of an :class:`Artifact <allura.model.artifact.Artifact>`, used in :class:`VersionedArtifact <allura.model.artifact.VersionedArtifact>`"""
     class __mongometa__:
diff --git a/Allura/allura/tests/model/test_discussion.py b/Allura/allura/tests/model/test_discussion.py
index 0abe739..03959f7 100644
--- a/Allura/allura/tests/model/test_discussion.py
+++ b/Allura/allura/tests/model/test_discussion.py
@@ -195,8 +195,12 @@
                 discussion_id=d._id,
                 thread_id=t._id,
                 post_id=p._id)
+    r = M.ArtifactReference.from_artifact(d)
+    rid = d.index_id()
     ThreadLocalORMSession.flush_all()
     d.delete()
+    ThreadLocalORMSession.flush_all()
+    assert_equals(M.ArtifactReference.query.find(dict(_id=rid)).count(), 0)
 
 @with_setup(setUp, tearDown)
 def test_thread_delete():