From e9b4e50007405d548572ad874bdf7d76f6668b27 Mon Sep 17 00:00:00 2001 From: Elrond Date: Tue, 29 Jan 2013 21:13:49 +0100 Subject: Failing testcase for issue 611. This currently fails (with foreign key constrain error): 1. Have user A and B. 2. User B creates media M. 3. User A post a comment on M. 4. User A deletes his own account. The test is a little bit wider. --- mediagoblin/tests/test_misc.py | 52 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'mediagoblin/tests/test_misc.py') diff --git a/mediagoblin/tests/test_misc.py b/mediagoblin/tests/test_misc.py index ae5d7e50..22a06898 100644 --- a/mediagoblin/tests/test_misc.py +++ b/mediagoblin/tests/test_misc.py @@ -16,9 +16,59 @@ from nose.tools import assert_equal -from mediagoblin.tests.tools import get_app +from mediagoblin.db.models import User, MediaEntry, MediaComment +from mediagoblin.tests.tools import get_app, \ + fixture_add_user, fixture_media_entry + def test_404_for_non_existent(): test_app = get_app(dump_old_app=False) res = test_app.get('/does-not-exist/', expect_errors=True) assert_equal(res.status_int, 404) + + +def test_user_deletes_other_comments(): + user_a = fixture_add_user(u"chris_a") + user_b = fixture_add_user(u"chris_b") + + media_a = fixture_media_entry(uploader=user_a.id) + media_b = fixture_media_entry(uploader=user_b.id) + + # Create all 4 possible comments: + for u_id in (user_a.id, user_b.id): + for m_id in (media_a.id, media_b.id): + cmt = MediaComment() + cmt.media_entry = m_id + cmt.author = u_id + cmt.content = u"Some Comment" + cmt.save() + + usr_cnt1 = User.query.count() + med_cnt1 = MediaEntry.query.count() + cmt_cnt1 = MediaComment.query.count() + + User.query.get(user_a.id).delete() + + usr_cnt2 = User.query.count() + med_cnt2 = MediaEntry.query.count() + cmt_cnt2 = MediaComment.query.count() + + # One user deleted + assert_equal(usr_cnt2, usr_cnt1 - 1) + # One media gone + assert_equal(med_cnt2, med_cnt1 - 1) + # Three of four comments gone. + assert_equal(cmt_cnt2, cmt_cnt1 - 3) + + User.query.get(user_b.id).delete() + + usr_cnt2 = User.query.count() + med_cnt2 = MediaEntry.query.count() + cmt_cnt2 = MediaComment.query.count() + + # All users gone + assert_equal(usr_cnt2, usr_cnt1 - 2) + # All media gone + assert_equal(med_cnt2, med_cnt1 - 2) + # All comments gone + assert_equal(cmt_cnt2, cmt_cnt1 - 4) -- cgit v1.2.3 From 3f931680e361086508d24d357f3d4d44466164bf Mon Sep 17 00:00:00 2001 From: Elrond Date: Tue, 29 Jan 2013 21:45:16 +0100 Subject: Improve runtime of one test. Do not commit so often. flushing is enough. --- mediagoblin/tests/test_misc.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'mediagoblin/tests/test_misc.py') diff --git a/mediagoblin/tests/test_misc.py b/mediagoblin/tests/test_misc.py index 22a06898..b48b8762 100644 --- a/mediagoblin/tests/test_misc.py +++ b/mediagoblin/tests/test_misc.py @@ -16,6 +16,7 @@ from nose.tools import assert_equal +from mediagoblin.db.base import Session from mediagoblin.db.models import User, MediaEntry, MediaComment from mediagoblin.tests.tools import get_app, \ fixture_add_user, fixture_media_entry @@ -31,8 +32,11 @@ def test_user_deletes_other_comments(): user_a = fixture_add_user(u"chris_a") user_b = fixture_add_user(u"chris_b") - media_a = fixture_media_entry(uploader=user_a.id) - media_b = fixture_media_entry(uploader=user_b.id) + media_a = fixture_media_entry(uploader=user_a.id, save=False) + media_b = fixture_media_entry(uploader=user_b.id, save=False) + Session.add(media_a) + Session.add(media_b) + Session.flush() # Create all 4 possible comments: for u_id in (user_a.id, user_b.id): @@ -41,13 +45,15 @@ def test_user_deletes_other_comments(): cmt.media_entry = m_id cmt.author = u_id cmt.content = u"Some Comment" - cmt.save() + Session.add(cmt) + + Session.flush() usr_cnt1 = User.query.count() med_cnt1 = MediaEntry.query.count() cmt_cnt1 = MediaComment.query.count() - User.query.get(user_a.id).delete() + User.query.get(user_a.id).delete(commit=False) usr_cnt2 = User.query.count() med_cnt2 = MediaEntry.query.count() -- cgit v1.2.3 From df5b142ab9bfc590f17768079104f6cfa2cd7bba Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 18 Feb 2013 14:46:28 +0100 Subject: Fix deleting media with attachments. If one deletes a media with attachments, there have been various problems: 1) If the file in the storage did not exist any more (maybe because due to a previous deletion attempt?), the error propagation failed, because the wrong thing was gathered. 2) The attachment database entries were not deleted. Using cascade for this, for now. Also add a simple unit test, that tests both by having a broken attachment on a media. --- mediagoblin/tests/test_misc.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mediagoblin/tests/test_misc.py') diff --git a/mediagoblin/tests/test_misc.py b/mediagoblin/tests/test_misc.py index b48b8762..776affc6 100644 --- a/mediagoblin/tests/test_misc.py +++ b/mediagoblin/tests/test_misc.py @@ -78,3 +78,18 @@ def test_user_deletes_other_comments(): assert_equal(med_cnt2, med_cnt1 - 2) # All comments gone assert_equal(cmt_cnt2, cmt_cnt1 - 4) + + +def test_media_deletes_broken_attachment(): + user_a = fixture_add_user(u"chris_a") + + media = fixture_media_entry(uploader=user_a.id, save=False) + media.attachment_files.append(dict( + name=u"some name", + filepath=[u"does", u"not", u"exist"], + )) + Session.add(media) + Session.flush() + + MediaEntry.query.get(media.id).delete() + User.query.get(user_a.id).delete() -- cgit v1.2.3