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
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
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])
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])
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
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] )
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] )
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
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
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
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'
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'
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)
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'
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'
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)
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)
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
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)
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)
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)