def test_org_decline_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = create_sample_project(user_a, project_kwargs={'org': org}) auth = AuthorizationAssociation.objects.create(org=org, user=user_b, is_active=False, is_admin=True) auth_p = AuthorizationAssociation.objects.create(project=project, user=user_b, is_active=False, is_admin=True) url = reverse("my_notifications") response = self.app.get(url, user=user_b) self.assertContains(response, org.name) form = response.forms['form_decline_{0}'.format(auth.pk)] response = form.submit().follow() self.assertContains(response, "Invitation has been declined") auth_filter = AuthorizationAssociation.objects.filter(pk=auth.pk) self.assertFalse(auth_filter.exists()) auth_filter = AuthorizationAssociation.objects.filter(pk=auth_p.pk) self.assertFalse(auth_filter.exists())
def test_org_decline_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = create_sample_project(user_a, project_kwargs={ 'org': org }) auth = AuthorizationAssociation.objects.create( org=org, user=user_b, is_active=False, is_admin=True ) auth_p = AuthorizationAssociation.objects.create( project=project, user=user_b, is_active=False, is_admin=True ) url = reverse("my_notifications") response = self.app.get(url, user=user_b) self.assertContains(response, org.name) form = response.forms['form_decline_{0}'.format(auth.pk)] response = form.submit().follow() self.assertContains(response, "Invitation has been declined") auth_filter = AuthorizationAssociation.objects.filter(pk=auth.pk) self.assertFalse(auth_filter.exists()) auth_filter = AuthorizationAssociation.objects.filter(pk=auth_p.pk) self.assertFalse(auth_filter.exists())
def test_org_accept_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = create_sample_project(user_a, project_kwargs={'org': org}) auth = AuthorizationAssociation.objects.create(org=org, user=user_b, is_active=False, is_admin=True) project.add_user(user_b, is_active=False) project = Project.objects.get(pk=project.pk) self.assertFalse(project.can_read(user_b)) url = reverse("my_notifications") response = self.app.get(url, user=user_b) self.assertContains(response, org.name) form = response.forms['form_accept_{0}'.format(auth.pk)] response = form.submit().follow() self.assertContains(response, "You are now a member of this " "organization") auth = AuthorizationAssociation.objects.get(pk=auth.pk) self.assertTrue(auth.is_active) project = Project.objects.get(pk=project.pk) self.assertTrue(project.can_read(user_b))
def test_org_accept_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = create_sample_project(user_a, project_kwargs={ 'org': org }) auth = AuthorizationAssociation.objects.create( org=org, user=user_b, is_active=False, is_admin=True ) project.add_user(user_b, is_active=False) project = Project.objects.get(pk=project.pk) self.assertFalse(project.can_read(user_b)) url = reverse("my_notifications") response = self.app.get(url, user=user_b) self.assertContains(response, org.name) form = response.forms['form_accept_{0}'.format(auth.pk)] response = form.submit().follow() self.assertContains(response, "You are now a member of this " "organization") auth = AuthorizationAssociation.objects.get(pk=auth.pk) self.assertTrue(auth.is_active) project = Project.objects.get(pk=project.pk) self.assertTrue(project.can_read(user_b))
def test_guest_invite(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") user_c = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = ProjectFactory.create( name=u"Project 007", owner=user_a, org=org, ) url = reverse('project_invite_user', args=(project.pk, )) # require login self.app.get(url, status=302) # not part of the project yet self.app.get(url, user=user_b, status=404) response = self.app.get(url, user=user_a) self.assertContains(response, 'Invite') form = response.forms['register_form'] # should handle uppercase email for key, value in { 'email': '*****@*****.**', }.iteritems(): form[key] = value response = form.submit().follow() self.assertContains(response, "Invitation has been sent") message = mail.outbox[-1] self.assertIn("*****@*****.**", message.to) self.assertTrue( message.body.find("You have been invited to join the project") != -1) answer_url = line_starting(message.body, u"http://localhost:80/") response = self.app.get(answer_url, user=user_a, status=200) self.assertContains(response, u"You already accepted this invitation.") response = self.app.get(answer_url, user=user_c, status=200) self.assertContains( response, u"This invitation does not match your current user") response = self.app.get(answer_url, user=user_b) self.assertContains( response, u"Invitation to project '{0}' has been".format(project.name)) url = reverse("dashboard") response = self.app.get(url, user=user_b) # verify the project is in project's list p_name = response.pyquery("h4.inline-title").find("a").text().strip() self.assertEqual(p_name, escape(project.name)) event = Event.objects.get(project=project) self.assertEqual(event.text, "joined the project as team member") self.assertEqual(event.user, user_b) #ensure user cannot access organization url = reverse("org_detail", args=(org.pk, )) self.app.get(url, user=user_b, status=404)
def test_org_registration_cycle(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = ProjectFactory.create( name=u"Project 007", owner=user_a, org=org, ) self.assertFalse(project.can_read(user_b)) url = reverse('org_invite_user', args=(org.pk,)) # require login self.app.get(url, status=302) # not part of the project yet self.app.get(url, user=user_b, status=404) response = self.app.get(url, user=user_a) self.assertContains(response, 'Invite') form = response.forms['register_form'] for key, value in { 'email': '*****@*****.**', }.iteritems(): form[key] = value response = form.submit().follow() self.assertContains(response, "Invitation has been sent") message = mail.outbox[-1] self.assertIn("*****@*****.**", message.to) self.assertTrue( message.body.find( "You have been invited to join the organization") != -1 ) answer_url = line_starting(message.body, u"http://localhost:80/") self.app.get(answer_url, user=user_a, status=404) response = self.app.get(answer_url, user=user_b) self.assertContains( response, u"Invitation to organization '{0}' has been".format(org.name) ) url = reverse("dashboard") response = self.app.get(url, user=user_b) self.assertContains(response, escape(org.name)) event = Event.objects.get( organization=org ) self.assertEqual(event.text, "joined the organization as team member") self.assertEqual(event.user, user_b) # ensure we also granted user to the projects project = Project.objects.get(pk=project.pk) self.assertTrue(project.can_read(user_b))
def test_org_revoke_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**", full_name="User B") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = ProjectFactory.create( name=u"my project", org=org ) org.add_user(user_b) project.add_user(user_b) self.assertTrue(project.can_read(user_b)) url = reverse("dashboard") response = self.app.get(url, user=user_b) self.assertContains(response, u"My first org") auth = AuthorizationAssociation.objects.get( org=org, user=user_b ) url = reverse("org_auth_delete", args=(org.pk, auth.pk)) self.app.get(url, user=user_b, status=403) response = self.app.get(url, user=user_a) self.assertContains(response, u"Are you sure you want to revoke " u"'User B' from the organization " u"'My first org'") form = response.forms['delete_form'] response = form.submit().follow() self.assertContains( response, 'User {0} has been revoked.'.format(user_b.email), ) url = reverse("dashboard") response = self.app.get(url, user=user_b) self.assertNotContains(response, u"My first org") # ensure we revoked the rights for project too project = Project.objects.get(pk=project.pk) self.assertFalse(project.can_read(user_b))
def test_org_revoke_invitation(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**", full_name="User B") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = ProjectFactory.create(name=u"my project", org=org) org.add_user(user_b) project.add_user(user_b) self.assertTrue(project.can_read(user_b)) url = reverse("dashboard") response = self.app.get(url, user=user_b) self.assertContains(response, u"My first org") auth = AuthorizationAssociation.objects.get(org=org, user=user_b) url = reverse("org_auth_delete", args=(org.pk, auth.pk)) self.app.get(url, user=user_b, status=403) response = self.app.get(url, user=user_a) self.assertContains( response, u"Are you sure you want to revoke " u"'User B' from the organization " u"'My first org'") form = response.forms['delete_form'] response = form.submit().follow() self.assertContains( response, 'User {0} has been revoked.'.format(user_b.email), ) url = reverse("dashboard") response = self.app.get(url, user=user_b) self.assertNotContains(response, u"My first org") # ensure we revoked the rights for project too project = Project.objects.get(pk=project.pk) self.assertFalse(project.can_read(user_b))
def test_guest_invite(self): user_a = UserFactory.create(email="*****@*****.**") user_b = UserFactory.create(email="*****@*****.**") user_c = UserFactory.create(email="*****@*****.**") org = create_sample_organization(user_a, org_kwargs={ 'name': u"My first org", }) project = ProjectFactory.create( name=u"Project 007", owner=user_a, org=org, ) url = reverse('project_invite_user', args=(project.pk,)) # require login self.app.get(url, status=302) # not part of the project yet self.app.get(url, user=user_b, status=404) response = self.app.get(url, user=user_a) self.assertContains(response, 'Invite') form = response.forms['register_form'] # should handle uppercase email for key, value in { 'email': '*****@*****.**', }.iteritems(): form[key] = value response = form.submit().follow() self.assertContains(response, "Invitation has been sent") message = mail.outbox[-1] self.assertIn("*****@*****.**", message.to) self.assertTrue( message.body.find( "You have been invited to join the project") != -1 ) answer_url = line_starting(message.body, u"http://localhost:80/") response = self.app.get(answer_url, user=user_a, status=200) self.assertContains( response, u"You already accepted this invitation." ) response = self.app.get(answer_url, user=user_c, status=200) self.assertContains( response, u"This invitation does not match your current user" ) response = self.app.get(answer_url, user=user_b) self.assertContains( response, u"Invitation to project '{0}' has been".format(project.name) ) url = reverse("dashboard") response = self.app.get(url, user=user_b) # verify the project is in project's list p_name = response.pyquery("h4.inline-title").find("a").text().strip() self.assertEqual(p_name, escape(project.name)) event = Event.objects.get( project=project ) self.assertEqual(event.text, "joined the project as team member") self.assertEqual(event.user, user_b) #ensure user cannot access organization url = reverse("org_detail", args=(org.pk,)) self.app.get(url, user=user_b, status=404)