Skip to content

Commit

Permalink
Trash page uses action
Browse files Browse the repository at this point in the history
We add in a call to 'dataset_purge' action to do the purge of the
dataset, when previously this done as part of the
model.repo.purge_revision() call, but will be deleted soon anyway
with the remove-vdm branch.
  • Loading branch information
David Read committed Jul 19, 2019
1 parent 740bb6b commit 5d77eab
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
31 changes: 31 additions & 0 deletions ckan/tests/controllers/test_admin.py
Expand Up @@ -353,6 +353,37 @@ def test_trash_purge_deleted_datasets(self):
pkgs_before_purge = model.Session.query(model.Package).count()
assert_equal(pkgs_before_purge, 1)

def test_trash_purge_deleted_dataset_with_resources(self):
user = factories.Sysadmin()
dataset = factories.Dataset(
resources=[{'url': 'http://example.com/resource'}])
helpers.call_action('package_delete', id=dataset['id'])
app = self._get_test_app()

# how many datasets before purge
pkgs_before_purge = model.Session.query(model.Package).count()
resources_before_purge = model.Session.query(model.Resource).count()
assert_equal(pkgs_before_purge, 1)
assert_equal(resources_before_purge, 1)

env = {'REMOTE_USER': user['name'].encode('ascii')}
trash_url = url_for(controller='admin', action='trash')
trash_response = app.get(trash_url, extra_environ=env, status=200)

# submit the purge form
purge_form = trash_response.forms['form-purge-packages']
purge_response = webtest_submit(purge_form, 'purge-packages',
status=302, extra_environ=env)
purge_response = purge_response.follow(extra_environ=env)
# redirected back to trash page
assert_true('Purge complete' in purge_response)

# how many datasets after purge
pkgs_after_purge = model.Session.query(model.Package).count()
resources_after_purge = model.Session.query(model.Resource).count()
assert_equal(pkgs_after_purge, 0)
assert_equal(resources_after_purge, 0)


class TestAdminConfigUpdate(helpers.FunctionalTestBase):

Expand Down
8 changes: 8 additions & 0 deletions ckan/views/admin.py
Expand Up @@ -149,6 +149,7 @@ def get(self):
return base.render(u'admin/trash.html', extra_vars=data)

def post(self):

deleted_revisions = model.Session.query(
model.Revision).filter_by(state=model.State.DELETED)
# NB: we repeat retrieval of of revisions
Expand All @@ -160,6 +161,13 @@ def post(self):
if (u'purge-packages' in request.form) or (
u'purge-revisions' in request.form):
if u'purge-packages' in request.form:
# Delete the packages first
for pkg in self.deleted_packages:
logic.get_action(u'dataset_purge')(
{u'user': g.user}, {u'id': pkg.id})
model.Session.remove()

# Delete associated revisions
revs_to_purge = []
for pkg in self.deleted_packages:
revisions = [x[0] for x in pkg.all_related_revisions]
Expand Down

0 comments on commit 5d77eab

Please sign in to comment.