diff --git a/src/viralhostrange/locale/en/LC_MESSAGES/django.po b/src/viralhostrange/locale/en/LC_MESSAGES/django.po index ee24e42bc4c606fe42b2abf78d5a225b36024bf9..ce54fd7dcb8d851575179039cfce8ae1ecab63b9 100644 --- a/src/viralhostrange/locale/en/LC_MESSAGES/django.po +++ b/src/viralhostrange/locale/en/LC_MESSAGES/django.po @@ -1430,6 +1430,10 @@ msgstr "" msgid "Update the data source" msgstr "" +#, python-format +msgid "Data source \"%s\" went private, you can not longer access to it." +msgstr "" + msgid "History of a data source" msgstr "" diff --git a/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py b/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py index 5814f15e25697be9cae5fdab0c1fd94a05bf0db1..66940cb2b66a5b08a7a479d2a0a55ed54161f0fd 100644 --- a/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py +++ b/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py @@ -181,15 +181,35 @@ class DataSourceUpdateViewTestCase(ViewTestCase): set([(gu.user.pk, gu.can_write) for gu in granted_users]), set([(gu.user.pk, gu.can_write) for gu in self.public_data_source_of_user.granteduser_set.all()])) - is_curator = business_process.is_curator(self.user) + def test_back_to_private_by_curator(self): + url = reverse('viralhostrangedb:data-source-update', args=[self.public_data_source_of_user.pk]) + granted_users = set(self.public_data_source_of_user.granteduser_set.all()) + + self.client.force_login(self.toto) + business_process.set_curator(self.toto, True) + form_data = dict( + name=self.public_data_source_of_user.name, + life_domain="bacteria", + description="a "*20, + public=True, + allowed_users_editor= + "\n".join(["%s %s;%i;%s" % (gu.user.last_name, gu.user.first_name, gu.user.pk, gu.can_write) + for gu in granted_users]), + ) - self.assertEqual(form_data["provider_first_name"] if is_curator else None, - self.public_data_source_of_user.provider_first_name) - self.assertEqual(form_data["provider_last_name"] if is_curator else None, - self.public_data_source_of_user.provider_last_name) + response = self.client.post(url, form_data) + self.write_in_tmp_file(response) + self.assertRedirects( + response, + expected_url=reverse('viralhostrangedb:data-source-detail', args=[self.public_data_source_of_user.pk]) + ) + form_data['public'] = False - def test_update_work_for_curator(self): - self.test_update_work() + response = self.client.post(url, form_data) + self.assertRedirects( + response, + expected_url=reverse('viralhostrangedb:data-source-list') + ) def test_new_user_granted_by_email(self): url = reverse('viralhostrangedb:data-source-update', args=[self.public_data_source_of_user.pk]) diff --git a/src/viralhostrange/viralhostrangedb/views.py b/src/viralhostrange/viralhostrangedb/views.py index 29dcc24aa3991df9c01e14c29aed0e0e19af6461..be3f1e5ccfb68cca65fe59b44141395c81623a89 100644 --- a/src/viralhostrange/viralhostrangedb/views.py +++ b/src/viralhostrange/viralhostrangedb/views.py @@ -46,6 +46,7 @@ from viralhostrangedb import forms, business_process, views_api from viralhostrangedb import mixins from viralhostrangedb import models from viralhostrangedb.business_process import MessageImportationObserver +from viralhostrangedb.templatetags.viralhostrange_tags import can_see from viralhostrangedb.utils import order_queryset_specifically logger = logging.getLogger(__name__) @@ -372,6 +373,11 @@ class DataSourceUpdateView(mixins.OnlyEditorOrCuratorOrOwnedMixin, UpdateView): form_class = forms.DataSourceUserCreateOrUpdateForm template_name = 'basetheme_bootstrap/small_form_host.html' + def get_success_url(self): + if can_see(self.request.user, self.object): + return super().get_success_url() + return reverse('viralhostrangedb:data-source-list') + def get_context_data(self, *, object_list=None, **kwargs): context = super().get_context_data(object_list=object_list, **kwargs) context["page_title"] = _("Editing a data source") @@ -396,6 +402,12 @@ class DataSourceUpdateView(mixins.OnlyEditorOrCuratorOrOwnedMixin, UpdateView): change_fields=changed_data, altered_data=business_process.DataSourceAlteredData.INNER_INFORMATION, ) + if 'public' in changed_data and not self.object.public and not can_see(self.request.user, self.object): + messages.add_message( + request=self.request, + level=messages.SUCCESS, + message=ugettext('Data source "%s" went private, you can not longer access to it.') % self.object.name, + ) return r