Exemplo n.º 1
0
def test_updated_details():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    # Valid case
    category = Category.objects.create(name='Test Category', project=project)
    response = client.post(path=reverse('projects:document_details',
                                        args=[project.pk, document.pk]),
                           data={
                               'name': 'Test Project',
                               'category': category.pk,
                               'tags': ['test, tags']
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_details', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    document.refresh_from_db()
    assert document.name == 'Test Project'
    assert document.category.name == category.name
    assert len(document.tags.all()) == 2

    # Invalid form
    response = client.post(path=reverse('projects:document_details',
                                        args=[project.pk, document.pk]),
                           data={
                               'foo': 'bar',
                           })
    assert response.status_code == HTTP_200_OK
Exemplo n.º 2
0
def test_updated_details():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    # Valid case
    category = Category.objects.create(name='Test Category', project=project)
    response = client.post(
        path=reverse('projects:document_details', args=[project.pk, document.pk]),
        data={
            'name': 'Test Project',
            'category': category.pk,
            'tags': ['test, tags']
        },
        follow=True
    )
    assert response.redirect_chain[0][0] == reverse('projects:document_details', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    document.refresh_from_db()
    assert document.name == 'Test Project'
    assert document.category.name == category.name
    assert len(document.tags.all()) == 2

    # Invalid form
    response = client.post(
        path=reverse('projects:document_details', args=[project.pk, document.pk]),
        data={
            'foo': 'bar',
        }
    )
    assert response.status_code == HTTP_200_OK
Exemplo n.º 3
0
def test_user_permissions_for_new_version():
    user, organization, project, document, client = setup()
    user_permissions_test_create(view='projects:new_version',
                                 client=client,
                                 user=user,
                                 organization=organization,
                                 project=project,
                                 document=document,
                                 args=[project.pk, document.pk])
Exemplo n.º 4
0
def test_user_permissions_for_document_details():
    user, organization, project, document, client = setup()
    user_permissions_test_manage(view='projects:document_details',
                                 client=client,
                                 user=user,
                                 organization=organization,
                                 project=project,
                                 document=document,
                                 args=[project.pk, document.pk])
Exemplo n.º 5
0
def test_document_invite_user_no_data():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(path=reverse('projects:document_invite_user',
                                        args=[project.pk, document.pk]),
                           data={},
                           follow=True)
    assert response.status_code == HTTP_200_OK
Exemplo n.º 6
0
def test_user_permissions_for_new_version():
    user, organization, project, document, client = setup()
    user_permissions_test_create(
        view='projects:new_version',
        client=client,
        user=user,
        organization=organization,
        project=project,
        document=document,
        args=[project.pk, document.pk]
    )
Exemplo n.º 7
0
def test_user_permissions_for_document():
    user, organization, project, document, client = setup()
    user_permissions_test_invite(
        view='projects:document_invite_user',
        client=client,
        user=user,
        organization=organization,
        project=project,
        document=document,
        args=[project.pk, document.pk]
    )
Exemplo n.º 8
0
def test_document_invite_user_no_data():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(
        path=reverse('projects:document_invite_user', args=[project.pk, document.pk]),
        data={
        },
        follow=True
    )
    assert response.status_code == HTTP_200_OK
Exemplo n.º 9
0
def test_document_new_version_fail_validation():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    with open('projects/views/documents/tests/test_file.txt') as test_file:
        assert document.documentversion_set.first() is None
        response = client.post(
            path=reverse('projects:new_version',
                         args=[project.pk, document.pk]),
            data={},
        )
        assert document.documentversion_set.first() is None
        assert response.status_code == HTTP_200_OK
Exemplo n.º 10
0
def test_document_new_version_fail_validation():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    with open('projects/views/documents/tests/test_file.txt') as test_file:
        assert document.documentversion_set.first() is None
        response = client.post(
            path=reverse('projects:new_version', args=[project.pk, document.pk]),
            data={
            },
        )
        assert document.documentversion_set.first() is None
        assert response.status_code == HTTP_200_OK
Exemplo n.º 11
0
def test_document_invite_user_sends_email():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(path=reverse('projects:document_invite_user',
                                        args=[project.pk, document.pk]),
                           data={
                               'email': '*****@*****.**',
                               'first_name': 'Test',
                               'last_name': 'User',
                               'user_type': 'manager'
                           },
                           follow=True)
    assert response.status_code == HTTP_200_OK

    assert len(mail.outbox) == 1
    assert mail.outbox[0].subject == 'Invitation to collaborate'
Exemplo n.º 12
0
def test_document_invite_user_sends_email():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(
        path=reverse('projects:document_invite_user', args=[project.pk, document.pk]),
        data={
            'email': '*****@*****.**',
            'first_name': 'Test',
            'last_name': 'User',
            'user_type': 'manager'
        },
        follow=True
    )
    assert response.status_code == HTTP_200_OK

    assert len(mail.outbox) == 1
    assert mail.outbox[0].subject == 'Invitation to collaborate'
Exemplo n.º 13
0
def test_document_invite_user_as_collaborator():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(path=reverse('projects:document_invite_user',
                                        args=[project.pk, document.pk]),
                           data={
                               'email': '*****@*****.**',
                               'first_name': 'Test',
                               'last_name': 'User',
                               'user_type': 'collaborator'
                           },
                           follow=True)
    assert response.status_code == HTTP_200_OK
    new_user = User.objects.get(email='*****@*****.**')
    assert document.can_create(new_user)
    assert document.can_invite(new_user)
    assert not document.can_manage(new_user)
Exemplo n.º 14
0
def test_document_new_version():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    with open('projects/views/documents/tests/test_file.txt') as test_file:
        assert document.documentversion_set.first() is None
        response = client.post(
            path=reverse('projects:new_version', args=[project.pk, document.pk]),
            data={
                'description': 'Test Description',
                'file': test_file,
            },
            follow=True
        )
        assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
        assert response.redirect_chain[0][1] == HTTP_302_FOUND
        version = document.documentversion_set.first()
        assert version is not None
        assert version.name == 'test_file.txt'
Exemplo n.º 15
0
def test_document_new_version():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    with open('projects/views/documents/tests/test_file.txt') as test_file:
        assert document.documentversion_set.first() is None
        response = client.post(path=reverse('projects:new_version',
                                            args=[project.pk, document.pk]),
                               data={
                                   'description': 'Test Description',
                                   'file': test_file,
                               },
                               follow=True)
        assert response.redirect_chain[0][0] == reverse(
            'projects:document', args=[project.pk, document.pk])
        assert response.redirect_chain[0][1] == HTTP_302_FOUND
        version = document.documentversion_set.first()
        assert version is not None
        assert version.name == 'test_file.txt'
Exemplo n.º 16
0
def test_document_invite_user_as_collaborator():
    user, organization, project, document, client = setup()
    document.add_manage(user)
    assert login(client, user)

    response = client.post(
        path=reverse('projects:document_invite_user', args=[project.pk, document.pk]),
        data={
            'email': '*****@*****.**',
            'first_name': 'Test',
            'last_name': 'User',
            'user_type': 'collaborator'
        },
        follow=True
    )
    assert response.status_code == HTTP_200_OK
    new_user = User.objects.get(email='*****@*****.**')
    assert document.can_create(new_user)
    assert document.can_invite(new_user)
    assert not document.can_manage(new_user)
Exemplo n.º 17
0
def test_user_permissions_for_document_export():
    user, organization, project, document, client = setup()
    # Not logged in should redirect to the login page
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == '{0}?next={1}'.format(
        reverse('users:login'),
        reverse('projects:export_document', args=[project.pk, document.pk])
    )
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    assert login(client, user)

    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]))
    assert response.status_code == HTTP_403_FORBIDDEN

    # Test correct permissions
    organization.add_manage(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_manage(user)

    project.add_manage(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_manage(user)

    document.add_manage(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_manage(user)

    # Super user does what they want
    user.is_superuser = True
    user.save()
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    user.is_superuser = False
    user.save()

    organization.add_create(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_create(user)

    organization.add_invite(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_invite(user)

    project.add_create(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_create(user)

    project.add_invite(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_invite(user)

    document.add_create(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_create(user)

    document.add_invite(user)
    response = client.get(reverse('projects:export_document', args=[project.pk, document.pk]), follow=True)
    assert response.redirect_chain[0][0] == reverse('projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_invite(user)
Exemplo n.º 18
0
def test_document_manage_access():
    user, organization, project, document, client = setup()
    # Add superuser so the other user can be seen.
    user.is_superuser = True
    user.save()
    document.add_manage(user)
    assert login(client, user)

    other_user = UserFactory()

    # Valid create case
    assert document.can_create(other_user) == False
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'can_create_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_create(other_user) == True

    # Remove Create
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'none_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_create(other_user) == False

    # Valid invite case
    assert document.can_invite(other_user) == False
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'can_invite_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_invite(other_user) == True

    # Remove invite
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'none_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_invite(other_user) == False

    # Valid manage case
    assert document.can_manage(other_user) == False
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'can_manage_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_manage(other_user) == True

    # Remove manage
    response = client.post(path=reverse('projects:document_manage_access',
                                        args=[project.pk, document.pk]),
                           data={
                               'none_{0}'.format(other_user.pk): True,
                           },
                           follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document_manage_access', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    assert document.can_manage(other_user) == False
Exemplo n.º 19
0
def test_document_download():
    user, organization, project, document, client = setup()

    version = DocumentVersionFactory(document=document)
    view = 'projects:download'
    args = [project.pk, document.pk, document.documentversion_set.first().uuid]

    # Not logged in should redirect to the login page
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == '{0}?next={1}'.format(
        reverse('users:login'), reverse(view, args=args))
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    assert login(client, user)

    response = client.get(reverse(view, args=args))
    assert response.status_code == HTTP_403_FORBIDDEN

    # Test correct permissions
    organization.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_manage(user)

    project.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_manage(user)

    document.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_manage(user)

    # Super user does what they want
    user.is_superuser = True
    user.save()
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    user.is_superuser = False
    user.save()

    organization.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    organization.delete_create(user)

    organization.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_invite(user)

    project.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_create(user)

    project.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_invite(user)

    document.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_create(user)

    document.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_invite(user)
Exemplo n.º 20
0
def test_document_download():
    user, organization, project, document, client = setup()

    version = DocumentVersionFactory(document=document)
    view = 'projects:download'
    args = [project.pk, document.pk, document.documentversion_set.first().uuid]

    # Not logged in should redirect to the login page
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == '{0}?next={1}'.format(
        reverse('users:login'),
        reverse(view, args=args)
    )
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    assert login(client, user)

    response = client.get(reverse(view, args=args))
    assert response.status_code == HTTP_403_FORBIDDEN

    # Test correct permissions
    organization.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_manage(user)

    project.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_manage(user)

    document.add_manage(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_manage(user)

    # Super user does what they want
    user.is_superuser = True
    user.save()
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    user.is_superuser = False
    user.save()

    organization.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    organization.delete_create(user)

    organization.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_invite(user)

    project.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_create(user)

    project.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_invite(user)

    document.add_create(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_create(user)

    document.add_invite(user)
    response = client.get(reverse(view, args=args), follow=True)
    assert response.redirect_chain[0][0] == 'http://localhost/test_download'
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_invite(user)
Exemplo n.º 21
0
def test_user_permissions_for_document_export():
    user, organization, project, document, client = setup()
    # Not logged in should redirect to the login page
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == '{0}?next={1}'.format(
        reverse('users:login'),
        reverse('projects:export_document', args=[project.pk, document.pk]))
    assert response.redirect_chain[0][1] == HTTP_302_FOUND

    assert login(client, user)

    response = client.get(
        reverse('projects:export_document', args=[project.pk, document.pk]))
    assert response.status_code == HTTP_403_FORBIDDEN

    # Test correct permissions
    organization.add_manage(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_manage(user)

    project.add_manage(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_manage(user)

    document.add_manage(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_manage(user)

    # Super user does what they want
    user.is_superuser = True
    user.save()
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    user.is_superuser = False
    user.save()

    organization.add_create(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_create(user)

    organization.add_invite(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    organization.delete_invite(user)

    project.add_create(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_create(user)

    project.add_invite(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    project.delete_invite(user)

    document.add_create(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_create(user)

    document.add_invite(user)
    response = client.get(reverse('projects:export_document',
                                  args=[project.pk, document.pk]),
                          follow=True)
    assert response.redirect_chain[0][0] == reverse(
        'projects:document', args=[project.pk, document.pk])
    assert response.redirect_chain[0][1] == HTTP_302_FOUND
    document.delete_invite(user)