remove stale threads after all comments have been deleted

This commit is contained in:
Martin Zimmermann 2013-10-31 11:08:00 +01:00
parent a658021f7e
commit e08e7be464
2 changed files with 16 additions and 0 deletions

View File

@ -20,6 +20,13 @@ class SQLite3:
self.threads = Threads(self) self.threads = Threads(self)
self.comments = Comments(self) self.comments = Comments(self)
self.execute([
'CREATE TRIGGER IF NOT EXISTS remove_stale_threads',
'AFTER DELETE ON comments',
'BEGIN',
' DELETE FROM threads WHERE id NOT IN (SELECT tid FROM comments);',
'END'])
def execute(self, sql, args=()): def execute(self, sql, args=()):
if isinstance(sql, (list, tuple)): if isinstance(sql, (list, tuple)):

View File

@ -151,12 +151,14 @@ class TestComments(unittest.TestCase):
r = client.delete('/id/1') r = client.delete('/id/1')
assert r.status_code == 200 assert r.status_code == 200
assert loads(r.data)['mode'] == 4 assert loads(r.data)['mode'] == 4
assert '/path/' in self.app.db.threads
assert self.get('/?uri=%2Fpath%2F&id=1').status_code == 200 assert self.get('/?uri=%2Fpath%2F&id=1').status_code == 200
assert self.get('/?uri=%2Fpath%2F&id=2').status_code == 200 assert self.get('/?uri=%2Fpath%2F&id=2').status_code == 200
r = client.delete('/id/2') r = client.delete('/id/2')
assert self.get('/?uri=%2Fpath%2F').status_code == 404 assert self.get('/?uri=%2Fpath%2F').status_code == 404
assert '/path/' not in self.app.db.threads
def testDeleteWithMultipleReferences(self): def testDeleteWithMultipleReferences(self):
""" """
@ -270,6 +272,13 @@ class TestComments(unittest.TestCase):
self.put('/id/1', data=json.dumps({"text": "Typo"})) self.put('/id/1', data=json.dumps({"text": "Typo"}))
assert loads(self.get('/id/1').data)["text"] == "<p>Typo</p>\n" assert loads(self.get('/id/1').data)["text"] == "<p>Typo</p>\n"
def testDeleteCommentRemovesThread(self):
rv = self.client.post('/new?uri=%2F', data=json.dumps({"text": "..."}))
assert '/' in self.app.db.threads
self.client.delete('/id/1')
assert '/' not in self.app.db.threads
class TestModeratedComments(unittest.TestCase): class TestModeratedComments(unittest.TestCase):