예제 #1
0
def create_project(**kwargs):

    from Q.questionnaire.models.models_projects import QProject

    _project_name = kwargs.pop("name")
    _project_title = kwargs.pop("title")
    _project_email = kwargs.pop("email")
    _project_url = kwargs.pop("url", None)
    _project_description = kwargs.pop("description", None)
    _project_authenticated = kwargs.pop("authenticated", False)
    _project_ontologies = kwargs.pop("ontologies", [])

    with transaction.atomic():
        project = QProject(
            name=_project_name,
            title=_project_title,
            email=_project_email,
        )
        if _project_url:
            project.url = _project_url
        if _project_description:
            project.description = _project_description
        if _project_authenticated:
            project.authenticated = _project_authenticated
        project.save()

        for ontology in _project_ontologies:
            project.ontologies.add(ontology)
        project.save()

    return project
예제 #2
0
    def setUp(self):

        super(TestQUser, self).setUp()
        self.test_project_name = "test_project"
        self.test_project = QProject(
            name=self.test_project_name,
            title=self.test_project_name,
        )
        self.test_project.save()
예제 #3
0
class TestQProject(TestQBase):
    def setUp(self):

        super(TestQProject, self).setUp()
        self.test_project_name = "test_project"
        self.test_project = QProject(name=self.test_project_name, title=self.test_project_name)
        self.test_project.save()

    def test_project_groups_created(self):
        """
        test that the correct groups and permissions exist after creating a project
        :return:
        """

        for group_suffix, permission_prefixes in GROUP_PERMISSIONS.iteritems():
            group = self.test_project.get_group(group_suffix)
            self.assertIsNotNone(group.pk)
            for permission_prefix in permission_prefixes:
                permission = self.test_project.get_permission(permission_prefix)
                self.assertIsNotNone(permission.pk)
                self.assertIn(permission, group.permissions.all())

    def test_project_groups_deleted(self):
        """
        test that the correct groups and permissions no longer exist after deleting a project
        :return:
        """

        self.test_project.delete()

        project_groups = Group.objects.filter(name__startswith=self.test_project_name)
        self.assertEqual(0, len(project_groups))
        project_permissions = Permission.objects.filter(codename__endswith=self.test_project_name)
        self.assertEqual(0, len(project_permissions))

    def test_project_queryset(self):
        """
        tests that my custom queryset manager works as expected
        :return:
        """

        self.test_project.is_active = True
        self.test_project.save()
        self.assertIn(self.test_project, QProject.objects.active_projects())

        self.test_project.is_active = False
        self.test_project.save()
        self.assertNotIn(self.test_project, QProject.objects.active_projects())

    def test_get_pending_users(self):

        self.assertNotIn(self.test_user, self.test_project.get_pending_users())

        self.test_user.profile.add_pending_permissions(self.test_project)

        self.assertIn(self.test_user, self.test_project.get_pending_users())

    def test_get_member_users(self):

        self.assertNotIn(self.test_user, self.test_project.get_member_users())

        self.test_user.profile.add_member_permissions(self.test_project)

        self.assertIn(self.test_user, self.test_project.get_member_users())

    def test_get_user_users(self):

        self.assertNotIn(self.test_user, self.test_project.get_user_users())

        self.test_user.profile.add_user_permissions(self.test_project)

        self.assertIn(self.test_user, self.test_project.get_user_users())

    def test_get_admin_users(self):

        self.assertNotIn(self.test_user, self.test_project.get_admin_users())

        self.test_user.profile.add_admin_permissions(self.test_project)

        self.assertIn(self.test_user, self.test_project.get_admin_users())
예제 #4
0
class TestQUser(TestQBase):

    def setUp(self):

        super(TestQUser, self).setUp()
        self.test_project_name = "test_project"
        self.test_project = QProject(
            name=self.test_project_name,
            title=self.test_project_name,
        )
        self.test_project.save()

    def test_pending(self):
        """
        this implicitly tests is_pending_of, add_pending_permissions, remove_pending_permissions, and add_group
        :return:
        """
        user_profile = self.test_user.profile
        self.assertFalse(user_profile.is_pending_of(self.test_project))
        user_profile.add_pending_permissions(self.test_project)
        self.assertTrue(user_profile.is_pending_of(self.test_project))
        user_profile.remove_pending_permissions(self.test_project)
        self.assertFalse(user_profile.is_pending_of(self.test_project))

    def test_member(self):
        """
        this implicitly tests is_member_of, add_member_permissions, remove_member_permissions, and add_group
        :return:
        """
        user_profile = self.test_user.profile
        self.assertFalse(user_profile.is_member_of(self.test_project))
        user_profile.add_member_permissions(self.test_project)
        self.assertTrue(user_profile.is_member_of(self.test_project))
        user_profile.remove_member_permissions(self.test_project)
        self.assertFalse(user_profile.is_member_of(self.test_project))

    def test_user(self):
        """
        this implicitly tests is_user_of, add_user_permissions, remove_user_permissions, and add_group
        :return:
        """
        user_profile = self.test_user.profile
        self.assertFalse(user_profile.is_user_of(self.test_project))
        user_profile.add_user_permissions(self.test_project)
        self.assertTrue(user_profile.is_user_of(self.test_project))
        user_profile.remove_user_permissions(self.test_project)
        self.assertFalse(user_profile.is_user_of(self.test_project))

    def test_admin(self):
        """
        this implicitly tests is_admin_of, add_admin_permissions, remove_admin_permissions, and add_group
        :return:
        """
        user_profile = self.test_user.profile
        self.assertFalse(user_profile.is_admin_of(self.test_project))
        user_profile.add_admin_permissions(self.test_project)
        self.assertTrue(user_profile.is_admin_of(self.test_project))
        user_profile.remove_admin_permissions(self.test_project)
        self.assertFalse(user_profile.is_admin_of(self.test_project))

    def test_join_project(self):
        user_profile = self.test_user.profile

        self.assertFalse(user_profile.is_pending_of(self.test_project))
        self.assertFalse(user_profile.is_member_of(self.test_project))
        self.assertFalse(user_profile.is_user_of(self.test_project))
        self.assertFalse(user_profile.is_admin_of(self.test_project))

        user_profile.join_project(self.test_project)

        self.assertFalse(user_profile.is_pending_of(self.test_project))
        self.assertTrue(user_profile.is_member_of(self.test_project))
        self.assertTrue(user_profile.is_user_of(self.test_project))
        self.assertFalse(user_profile.is_admin_of(self.test_project))

    def test_leave_project(self):
        user_profile = self.test_user.profile

        self.assertFalse(user_profile.is_pending_of(self.test_project))
        self.assertFalse(user_profile.is_member_of(self.test_project))
        self.assertFalse(user_profile.is_user_of(self.test_project))
        self.assertFalse(user_profile.is_admin_of(self.test_project))

        user_profile.join_project(self.test_project)
        user_profile.leave_project(self.test_project)

        self.assertFalse(user_profile.is_pending_of(self.test_project))
        self.assertFalse(user_profile.is_member_of(self.test_project))
        self.assertFalse(user_profile.is_user_of(self.test_project))
        self.assertFalse(user_profile.is_admin_of(self.test_project))

    def test_project_join_request_permission_set(self):
        user_profile = self.test_user.profile

        self.assertFalse(user_profile.is_pending_of(self.test_project))
        self.assertFalse(user_profile.is_member_of(self.test_project))
        self.assertFalse(user_profile.is_user_of(self.test_project))
        self.assertFalse(user_profile.is_admin_of(self.test_project))

        project_join_request(self.test_project, self.test_user)

        self.assertTrue(user_profile.is_pending_of(self.test_project))

    def test_project_join_request_email_sent(self):

        from django.core.mail import outbox

        pre_request_message_len = len(outbox)

        project_join_request(self.test_project, self.test_user)

        post_request_message_len = len(outbox)

        self.assertEqual(pre_request_message_len, post_request_message_len - 1)

        message = outbox.pop()

        self.assertEqual(message.subject, "ES-DOC Questionnaire project join request")
        self.assertIn(self.test_user.username, message.body)
        self.assertIn(self.test_project.name, message.body)