def test_aid_edition_with_new_tags(client, contributor, aid_form_data): """Aid form can create new tags.""" aid = AidFactory(name='First title', author=contributor) form_url = reverse('aid_edit_view', args=[aid.slug]) client.force_login(contributor) TagFactory(name='pizza') tags = Tag.objects.all() assert tags.count() == 1 aid_form_data['tags'] = ['pizza', 'tartiflette', 'gratin'] res = client.post(form_url, data=aid_form_data) assert res.status_code == 302 aid.refresh_from_db() assert set(aid.tags) == set(['pizza', 'gratin', 'tartiflette']) aid_tags = aid._tags_m2m.values_list('name', flat=True) assert set(aid_tags) == set(['pizza', 'gratin', 'tartiflette']) all_tags = tags.values_list('name', flat=True) assert tags.count() == 3 assert 'gratin' in all_tags assert 'tartiflette' in all_tags
def test_aid_edition_does_not_delete_tags(client, contributor, aid_form_data): """Unused tags stay in db.""" TagFactory(name='pizza') TagFactory(name='gratin') aid = AidFactory(name='First title', author=contributor, tags=['pizza', 'gratin']) form_url = reverse('aid_edit_view', args=[aid.slug]) client.force_login(contributor) tags = Tag.objects.all() assert tags.count() == 2 aid_form_data['tags'] = ['pizza'] res = client.post(form_url, data=aid_form_data) assert res.status_code == 302 aid.refresh_from_db() assert set(aid.tags) == set(['pizza']) assert tags.count() == 2 aid_tags = aid._tags_m2m.values_list('name', flat=True) assert set(aid_tags) == set(['pizza']) all_tags = tags.values_list('name', flat=True) assert set(all_tags) == set(['pizza', 'gratin'])
def test_aid_amendments_are_saved(client, aid_form_data): # At the beginning of the test, no amendments exist amendments = Aid.amendments.all() assert amendments.count() == 0 aid = AidFactory(name='This is my aid name', description='This is a mistake') amend_url = reverse('aid_amend_view', args=[aid.slug]) aid_form_data.update({ 'name': 'This is a better name', 'description': 'This is a correction', 'amendment_author_name': 'Coco rection', 'amendment_author_email': '*****@*****.**', }) res = client.post(amend_url, data=aid_form_data) assert res.status_code == 302 assert amendments.count() == 1 # The amendment was successfully created amendment = amendments[0] assert amendment.name == 'This is a better name' assert amendment.description == 'This is a correction' assert amendment.author is None assert amendment.amended_aid == aid # The amended aid was NOT modified aid.refresh_from_db() assert aid.name == 'This is my aid name' assert aid.description == 'This is a mistake'
def test_merging_amendment(client, superuser, aid_form_data): client.force_login(superuser) aid = AidFactory() amendment = AidFactory(name='Amended name', description='Amended description', is_amendment=True, amended_aid=aid) merge_url = reverse('admin:aids_amendment_merge', args=[amendment.pk]) res = client.get(merge_url) assert res.status_code == 200 aid_form_data.update({ 'name': 'This is a better name', 'description': 'This is a correction' }) res = client.post(merge_url, data=aid_form_data) assert res.status_code == 302 # The aid was successfully updated aid.refresh_from_db() assert aid.name == 'This is a better name' assert aid.description == 'This is a correction' # The amendment was deleted assert Aid.amendments.all().count() == 0
def test_only_aid_author_can_delete_it(client, contributor): """One cannot delete other users' aids.""" aid = AidFactory(status='published') client.force_login(contributor) delete_url = reverse('aid_delete_view', args=[aid.slug]) res = client.post(delete_url, {'confirm': True}) assert res.status_code == 404 aid.refresh_from_db() assert aid.status == 'published'
def test_deletion_requires_confirmation(client, contributor): """Without confirmation, aid does not get deleted.""" aid = AidFactory(status='published', author=contributor) client.force_login(contributor) delete_url = reverse('aid_delete_view', args=[aid.slug]) res = client.post(delete_url) assert res.status_code == 302 aid.refresh_from_db() assert aid.status == 'published'
def test_aid_deletion(client, contributor): """Test aid deletion.""" aid = AidFactory(status='published', author=contributor) client.force_login(contributor) delete_url = reverse('aid_delete_view', args=[aid.slug]) res = client.post(delete_url, {'confirm': True}) assert res.status_code == 302 aid.refresh_from_db() assert aid.status == 'deleted'
def test_unpublish_aid_does_not_remove_published_date(): """when aids are unpublished, we keep the first publication date.""" aid = AidFactory(status='published', date_published=timezone.now()) aid.status = 'draft' aid.save() aid.refresh_from_db() assert aid.status == 'draft' assert aid.date_published is not None
def test_set_review_status_does_not_set_published_date(): aid = AidFactory(status='draft') assert aid.date_published is None aid.status = 'reviewable' aid.save() aid.refresh_from_db() assert aid.status == 'reviewable' assert aid.date_published is None
def test_republish_aid_does_not_override_first_publication_date(): """when aids are republished, we keep the first publication date.""" last_month = timezone.now() - timedelta(days=30) aid = AidFactory(status='draft', date_published=last_month) aid.status = 'published' aid.save() aid.refresh_from_db() assert aid.status == 'published' assert aid.date_published == last_month
def test_set_published_status_does_set_published_date(): """When aids are published, we store the publication date.""" aid = AidFactory(status='draft') assert aid.date_published is None aid.status = 'published' aid.save() aid.refresh_from_db() assert aid.status == 'published' assert aid.date_published is not None
def test_edition_of_aid_status(client, contributor): """Test that the publication workflow works as expected.""" aid = AidFactory(status='draft', author=contributor) client.force_login(contributor) update_status_url = reverse('aid_status_update_view', args=[aid.slug]) res = client.get(update_status_url) assert res.status_code == 405 # Method not allowed, only post res = client.post(update_status_url, {'current_status': 'draft'}) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'reviewable' res = client.post(update_status_url, {'current_status': 'reviewable'}) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'draft' aid.status = 'published' aid.save() res = client.post(update_status_url, {'current_status': 'published'}) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'draft'
def test_aid_status_workflow(client, contributor, aid_form_data): """Test that the publication workflow works as expected.""" aid = AidFactory(status='draft', author=contributor) client.force_login(contributor) form_url = reverse('aid_edit_view', args=[aid.slug]) aid_form_data.update({'_action': 'update_status'}) res = client.post(form_url, data=aid_form_data) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'reviewable' # _action is still "update_status" res = client.post(form_url, data=aid_form_data) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'draft' aid.status = 'published' aid.save() res = client.post(form_url, data=aid_form_data) aid.refresh_from_db() assert res.status_code == 302 assert aid.status == 'draft'