Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 5
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'
Esempio n. 6
0
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'
Esempio n. 7
0
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'
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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'
Esempio n. 13
0
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'