Example #1
0
    def test_with_anonymous(self):
        admin = UserF.create()
        email_user = AnonymousUser()

        project = ProjectF.create(
            add_admins=[admin],
            **{'isprivate': False}
        )
        GroupingFactory.create(**{
            'isprivate': False,
            'project': project
        })

        view = ProjectContactAdmins.as_view()
        url = reverse(
            'api:project_contact_admins',
            kwargs={
                'project_id': project.id
            }
        )
        request = APIRequestFactory().post(
            url,
            json.dumps({'email_text': 'Blah Blah'}),
            content_type='application/json'
        )
        force_authenticate(request, user=email_user)

        response = view(request, project_id=project.id).render()
        self.assertEqual(response.status_code, 401)
        self.assertEquals(len(mail.outbox), 0)
Example #2
0
    def test_get_viewgroup(self):
        project = ProjectF.create()
        grouping = GroupingFactory.create(**{'project': project})
        group = UserGroupF(**{'project': project})

        html = get_view_group(grouping, group)
        self.assertEqual(
            html, '<li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right grant-single" data-toggle="button" >'
            '<span class="text-success">Grant access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li>' % (grouping.id, grouping.name, grouping.description))

        GroupingUserGroupFactory.create(**{
            'usergroup': group,
            'grouping': grouping
        })

        html = get_view_group(grouping, group)
        self.assertEqual(
            html, '<li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right active grant-single" data-toggle="button" >'
            '<span class="text-danger">Revoke access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li>' % (grouping.id, grouping.name, grouping.description))

        project.isprivate = False
        project.save()
        grouping.isprivate = False
        grouping.save()

        html = get_view_group(grouping, group)
        self.assertIn('This data grouping is public.', html)
Example #3
0
    def setUp(self):
        self.factory = APIRequestFactory()
        self.admin = UserF.create()
        self.creator = UserF.create()
        self.viewer = UserF.create()
        self.project = ProjectF(add_admins=[self.admin],
                                add_contributors=[self.creator])

        self.contribution = ObservationFactory.create(**{
            'project': self.project,
            'creator': self.creator
        })

        self.viewer = UserF.create()
        self.grouping = GroupingFactory.create(add_viewers=[self.viewer],
                                               **{'project': self.project})
        RuleFactory.create(**{
            'grouping': self.grouping,
            'category': self.contribution.category
        })

        self.image_file = ImageFileFactory.create(**{
            'contribution': self.contribution,
            'creator': self.creator
        })
Example #4
0
    def setUp(self):
        self.factory = APIRequestFactory()
        self.admin = UserF.create()
        self.creator = UserF.create()
        self.viewer = UserF.create()
        self.project = ProjectF(
            add_admins=[self.admin],
            add_contributors=[self.creator]
        )

        self.contribution = ObservationFactory.create(
            **{'project': self.project, 'creator': self.creator}
        )

        self.viewer = UserF.create()
        self.grouping = GroupingFactory.create(
            add_viewers=[self.viewer],
            **{'project': self.project}
        )
        RuleFactory.create(**{
            'grouping': self.grouping,
            'category': self.contribution.category
        })

        self.image_file = ImageFileFactory.create(
            **{'contribution': self.contribution, 'creator': self.creator}
        )
Example #5
0
    def add_viewers(self, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            from geokey.datagroupings.tests.model_factories import GroupingFactory

            GroupingFactory(add_viewers=extracted, **{'project': self})
Example #6
0
 def test_delete_image_with_viewer(self):
     viewer = UserF.create()
     dataview = GroupingFactory.create(add_viewers=[viewer],
                                       **{'project': self.project})
     RuleFactory.create(**{
         'grouping': dataview,
         'category': self.contribution.category
     })
     response = self.delete(viewer)
     self.assertEqual(response.status_code, 404)
Example #7
0
    def setUp(self):
        self.factory = APIRequestFactory()
        self.admin = UserF.create()
        self.contributor = UserF.create()
        self.non_member = UserF.create()

        self.project = ProjectF.create(add_admins=[self.admin])

        self.contributors = UserGroupF(add_users=[self.contributor],
                                       **{'project': self.project})

        self.view = GroupingFactory(**{'project': self.project})
Example #8
0
 def test_delete_image_with_viewer(self):
     viewer = UserF.create()
     dataview = GroupingFactory.create(
         add_viewers=[viewer],
         **{'project': self.project}
     )
     RuleFactory.create(**{
         'grouping': dataview,
         'category': self.contribution.category
     })
     response = self.delete(viewer)
     self.assertEqual(response.status_code, 404)
Example #9
0
    def test_viewgroups(self):
        project = ProjectF.create()
        grouping = GroupingFactory.create(**{'project': project})
        group = UserGroupF(**{'project': project})

        html = viewgroups(group)
        self.assertEqual(
            html, '<ul class="list-unstyled overview-list"><li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right grant-single" data-toggle="button" >'
            '<span class="text-success">Grant access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li></ul>' % (grouping.id, grouping.name, grouping.description))
Example #10
0
    def test_delete_with_grouping(self):
        category = CategoryFactory.create()

        grouping = GroupingFactory.create()
        rule = RuleFactory(**{
            'grouping': grouping,
            'status': 'active',
            'category': category
        })
        category.delete()

        Category.objects.get(pk=category.id)
        Rule.objects.get(pk=rule.id)
Example #11
0
    def test_delete_with_grouping(self):
        category = CategoryFactory.create()

        grouping = GroupingFactory.create()
        rule = RuleFactory(**{
            'grouping': grouping,
            'status': 'active',
            'category': category
        })
        category.delete()

        Category.objects.get(pk=category.id)
        Rule.objects.get(pk=rule.id)
Example #12
0
    def test_post_images_with_anonymous_to_public(self):
        self.project.isprivate = False
        self.project.everyone_contributes = 'true'
        self.project.save()

        grouping = GroupingFactory.create(
            **{'project': self.project, 'isprivate': False}
        )
        RuleFactory.create(**{
            'grouping': grouping,
            'category': self.contribution.category
        })
        response = self.post(AnonymousUser())
        self.assertEqual(response.status_code, 201)
Example #13
0
 def test_delete_with_rule_without_constraints(self):
     category = CategoryFactory()
     Field.create('n', 'n', 'n', False, category, 'TextField')
     field = Field.create('name', 'key', 'description', False, category,
                          'TextField')
     grouping = GroupingFactory.create()
     rule = RuleFactory(
         **{
             'grouping': grouping,
             'status': 'active',
             'category': category,
             'constraints': None
         })
     field.delete()
Example #14
0
    def test_post_images_with_anonymous_to_public(self):
        self.project.isprivate = False
        self.project.everyone_contributes = 'true'
        self.project.save()

        grouping = GroupingFactory.create(**{
            'project': self.project,
            'isprivate': False
        })
        RuleFactory.create(**{
            'grouping': grouping,
            'category': self.contribution.category
        })
        response = self.post(AnonymousUser())
        self.assertEqual(response.status_code, 201)
Example #15
0
    def test_usergroups(self):
        project = ProjectF.create()
        grouping = GroupingFactory.create(**{'project': project})
        group = UserGroupF(**{'project': project})

        html = usergroups(grouping)
        self.assertEqual(
            html,
            '<ul class="list-unstyled overview-list"><li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right grant-single" data-toggle="button" ><span '
            'class="text-success">Grant access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li></ul>' % (group.id, group.name, group.description)
        )
Example #16
0
    def test_get_user_group(self):
        project = ProjectF.create()
        grouping = GroupingFactory.create(**{'project': project})
        group = UserGroupF(**{'project': project})

        html = get_user_group(group, grouping)
        self.assertEqual(
            html,
            '<li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right grant-single" data-toggle="button" ><span '
            'class="text-success">Grant access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li>' % (group.id, group.name, group.description)
        )

        GroupingUserGroupFactory.create(**{
            'usergroup': group,
            'grouping': grouping
        })

        html = get_user_group(group, grouping)
        self.assertEqual(
            html,
            '<li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right active grant-single" data-toggle="button" >'
            '<span class="text-danger">Revoke access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li>' % (group.id, group.name, group.description)
        )

        project.isprivate = False
        project.save()
        grouping.isprivate = False
        grouping.save()

        html = get_user_group(group, grouping)
        self.assertEqual(
            html,
            '<li>'
            '<button type="button" name="%s" class="btn btn-default '
            'pull-right active grant-single" data-toggle="button" '
            'disabled="disabled">'
            '<span class="text-danger">Revoke access</span></button>'
            '<strong>%s</strong><p>%s</p>'
            '</li>' % (group.id, group.name, group.description)
        )
Example #17
0
    def test_get_public_project_with_anonymous(self):
        user = AnonymousUser()

        project = ProjectF.create(**{
            'isprivate': False
        })
        GroupingFactory(**{'project': project, 'isprivate': False})

        request = self.factory.get('/api/projects/%s/' % project.id)
        force_authenticate(request, user=user)
        view = SingleProject.as_view()
        response = view(request, project_id=project.id).render()

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, project.name)
        self.assertContains(response, '"can_contribute":false')
Example #18
0
 def test_delete_with_rule_without_constraints(self):
     category = CategoryFactory()
     Field.create(
         'n', 'n', 'n', False, category, 'TextField'
     )
     field = Field.create(
         'name', 'key', 'description', False, category, 'TextField'
     )
     grouping = GroupingFactory.create()
     rule = RuleFactory(**{
         'grouping': grouping,
         'status': 'active',
         'category': category,
         'constraints': None
     })
     field.delete()
Example #19
0
 def test_delete_with_rule(self):
     category = CategoryFactory()
     Field.create('n', 'n', 'n', False, category, 'TextField')
     field = Field.create('name', 'key', 'description', False, category,
                          'TextField')
     grouping = GroupingFactory.create()
     rule = RuleFactory(
         **{
             'grouping': grouping,
             'status': 'active',
             'category': category,
             'constraints': {
                 field.key: 'Blah',
                 'other-key': 'blubb'
             }
         })
     field.delete()
     reference_rule = Rule.objects.get(pk=rule.id)
     self.assertEquals(reference_rule.constraints.get('key'), None)
Example #20
0
    def setUp(self):
        self.factory = APIRequestFactory()
        self.admin = UserF.create()
        self.contributor = UserF.create()
        self.non_member = UserF.create()
        self.view_member = UserF.create()

        self.public_project = ProjectF.create(
            add_admins=[self.admin],
            add_contributors=[self.contributor],
            **{
                'isprivate': False
            }
        )

        GroupingFactory(
            add_viewers=[self.view_member],
            **{'project': self.public_project, 'isprivate': False}
        )

        self.private_project = ProjectF.create(
            add_admins=[self.admin],
            add_contributors=[self.contributor],
            add_viewers=[self.view_member]
        )

        self.inactive_project = ProjectF.create(
            add_admins=[self.admin],
            add_contributors=[self.contributor],
            add_viewers=[self.view_member],
            **{
                'status': 'inactive'
            }
        )

        self.deleted_project = ProjectF.create(
            add_admins=[self.admin],
            add_contributors=[self.contributor],
            add_viewers=[self.view_member],
            **{'isprivate': False}
        )
        self.deleted_project.delete()
Example #21
0
 def test_delete_with_rule(self):
     category = CategoryFactory()
     Field.create(
         'n', 'n', 'n', False, category, 'TextField'
     )
     field = Field.create(
         'name', 'key', 'description', False, category, 'TextField'
     )
     grouping = GroupingFactory.create()
     rule = RuleFactory(**{
         'grouping': grouping,
         'status': 'active',
         'category': category,
         'constraints': {
             field.key: 'Blah',
             'other-key': 'blubb'
         }
     })
     field.delete()
     reference_rule = Rule.objects.get(pk=rule.id)
     self.assertEquals(reference_rule.constraints.get('key'), None)
Example #22
0
 def test_delete_not_existing_viewgroup(self):
     response = self.delete(self.admin,
                            view_to_delete=GroupingFactory.create())
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Example #23
0
 def test_delete_not_existing_viewgroup(self):
     response = self.delete(
         self.admin,
         view_to_delete=GroupingFactory.create()
     )
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Example #24
0
 def test_add_not_existing_view(self):
     view = GroupingFactory.create()
     response = self.post(self.admin, grouping_id=view.id)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Example #25
0
 def test_add_not_existing_view(self):
     view = GroupingFactory.create()
     response = self.post(self.admin, grouping_id=view.id)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Example #26
0
    def setUp(self):
        self.moderator_view = UserF.create()
        self.moderator = UserF.create()
        self.contributor_view = UserF.create()
        self.contributor = UserF.create()
        self.viewer_view = UserF.create()
        self.viewer = UserF.create()
        self.some_dude = UserF.create()

        self.project = ProjectF.create(**{
            'isprivate': False,
            'everyone_contributes': 'false'
        })

        self.view = GroupingFactory(**{
            'project': self.project,
            'isprivate': False
        })
        self.moderators_view = UserGroupF(add_users=[self.moderator_view],
                                          **{
                                              'project': self.project,
                                              'can_moderate': True
                                          })
        self.contributors_view = UserGroupF(add_users=[self.contributor_view],
                                            **{
                                                'project': self.project,
                                                'can_contribute': True
                                            })
        self.viewers_view = UserGroupF(add_users=[self.viewer_view],
                                       **{
                                           'project': self.project,
                                           'can_contribute': False,
                                           'can_moderate': False
                                       })

        GroupingUserGroupFactory.create(**{
            'grouping': self.view,
            'usergroup': self.moderators_view
        })
        GroupingUserGroupFactory.create(**{
            'grouping': self.view,
            'usergroup': self.contributors_view
        })
        GroupingUserGroupFactory.create(**{
            'grouping': self.view,
            'usergroup': self.viewers_view
        })

        self.moderators = UserGroupF(add_users=[self.moderator],
                                     **{
                                         'project': self.project,
                                         'can_moderate': True
                                     })
        self.contributors = UserGroupF(add_users=[self.contributor],
                                       **{
                                           'project': self.project,
                                           'can_contribute': True
                                       })
        self.viewers = UserGroupF(add_users=[self.viewer],
                                  **{
                                      'project': self.project,
                                      'can_contribute': False,
                                      'can_moderate': False
                                  })
Example #27
0
    def setUp(self):
        self.admin = UserF.create()
        self.moderator_view = UserF.create()
        self.moderator = UserF.create()
        self.contributor_view = UserF.create()
        self.contributor = UserF.create()
        self.viewer_view = UserF.create()
        self.viewer = UserF.create()
        self.some_dude = UserF.create()

        self.private_project = ProjectF.create(add_admins=[self.admin],
                                               **{
                                                   'name': 'Private',
                                                   'isprivate': True,
                                                   'everyone_contributes':
                                                   'false'
                                               })

        self.private_view = GroupingFactory(**{
            'project': self.private_project,
            'isprivate': True
        })
        self.private_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.private_project,
                'can_moderate': True
            })
        self.private_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.private_project,
                'can_contribute': True
            })
        self.private_viewers_view = UserGroupF(add_users=[self.viewer_view],
                                               **{
                                                   'project':
                                                   self.private_project,
                                                   'can_contribute': False,
                                                   'can_moderate': False
                                               })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_view,
                'usergroup': self.private_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_view,
                'usergroup': self.private_contributors_view
            })
        GroupingUserGroupFactory.create(**{
            'grouping': self.private_view,
            'usergroup': self.private_viewers_view
        })

        self.private_moderators = UserGroupF(add_users=[self.moderator],
                                             **{
                                                 'project':
                                                 self.private_project,
                                                 'can_moderate': True
                                             })
        self.private_contributors = UserGroupF(add_users=[self.contributor],
                                               **{
                                                   'project':
                                                   self.private_project,
                                                   'can_contribute': True
                                               })
        self.private_viewers = UserGroupF(add_users=[self.viewer],
                                          **{
                                              'project': self.private_project,
                                              'can_contribute': False,
                                              'can_moderate': False
                                          })

        self.private_publicview_project = ProjectF.create(
            add_admins=[self.admin],
            **{
                'name': 'Private with public view',
                'isprivate': True,
                'everyone_contributes': 'false'
            })

        self.private_publicview_view = GroupingFactory(**{
            'project': self.private_publicview_project,
            'isprivate': False
        })
        self.private_publicview_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.private_publicview_project,
                'can_moderate': True
            })
        self.private_publicview_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.private_publicview_project,
                'can_contribute': True
            })
        self.private_publicview_viewers_view = UserGroupF(
            add_users=[self.viewer_view],
            **{
                'project': self.private_publicview_project,
                'can_contribute': False,
                'can_moderate': False
            })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicview_view,
                'usergroup': self.private_publicview_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicview_view,
                'usergroup': self.private_publicview_contributors_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicview_view,
                'usergroup': self.private_publicview_viewers_view
            })

        self.private_publicview_moderators = UserGroupF(
            add_users=[self.moderator],
            **{
                'project': self.private_publicview_project,
                'can_moderate': True
            })
        self.private_publicview_contributors = UserGroupF(
            add_users=[self.contributor],
            **{
                'project': self.private_publicview_project,
                'can_contribute': True
            })
        self.private_publicview_viewers = UserGroupF(
            add_users=[self.viewer],
            **{
                'project': self.private_publicview_project,
                'can_contribute': False,
                'can_moderate': False
            })

        self.private_publicviews_project = ProjectF.create(
            add_admins=[self.admin],
            **{
                'name': 'Private with public views',
                'isprivate': True,
                'everyone_contributes': 'false'
            })

        self.private_publicviews_view = GroupingFactory(**{
            'project': self.private_publicviews_project,
            'isprivate': False
        })
        self.private_publicviews_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.private_publicviews_project,
                'can_moderate': True
            })
        self.private_publicviews_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.private_publicviews_project,
                'can_contribute': True
            })
        self.private_publicviews_viewers_view = UserGroupF(
            add_users=[self.viewer_view],
            **{
                'project': self.private_publicviews_project,
                'can_contribute': False,
                'can_moderate': False
            })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicviews_view,
                'usergroup': self.private_publicviews_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicviews_view,
                'usergroup': self.private_publicviews_contributors_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.private_publicviews_view,
                'usergroup': self.private_publicviews_viewers_view
            })

        self.private_publicviews_moderators = UserGroupF(
            add_users=[self.moderator],
            **{
                'project': self.private_publicviews_project,
                'can_moderate': True
            })
        self.private_publicviews_contributors = UserGroupF(
            add_users=[self.contributor],
            **{
                'project': self.private_publicviews_project,
                'can_contribute': True
            })
        self.private_publicviews_viewers = UserGroupF(
            add_users=[self.viewer],
            **{
                'project': self.private_publicviews_project,
                'can_contribute': False,
                'can_moderate': False
            })

        self.public_project = ProjectF.create(add_admins=[self.admin],
                                              **{
                                                  'name': 'Public',
                                                  'isprivate': False,
                                                  'everyone_contributes':
                                                  'false'
                                              })

        self.public_view = GroupingFactory(**{
            'project': self.public_project,
            'isprivate': True
        })
        self.public_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.public_project,
                'can_moderate': True
            })
        self.public_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.public_project,
                'can_contribute': True
            })
        self.public_viewers_view = UserGroupF(add_users=[self.viewer_view],
                                              **{
                                                  'project':
                                                  self.public_project,
                                                  'can_contribute': False,
                                                  'can_moderate': False
                                              })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_view,
                'usergroup': self.public_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_view,
                'usergroup': self.public_contributors_view
            })
        GroupingUserGroupFactory.create(**{
            'grouping': self.public_view,
            'usergroup': self.public_viewers_view
        })

        self.public_moderators = UserGroupF(add_users=[self.moderator],
                                            **{
                                                'project': self.public_project,
                                                'can_moderate': True
                                            })
        self.public_contributors = UserGroupF(add_users=[self.contributor],
                                              **{
                                                  'project':
                                                  self.public_project,
                                                  'can_contribute': True
                                              })
        self.public_viewers = UserGroupF(add_users=[self.viewer],
                                         **{
                                             'project': self.public_project,
                                             'can_contribute': False,
                                             'can_moderate': False
                                         })

        self.public_publicview_project = ProjectF.create(
            add_admins=[self.admin],
            **{
                'name': 'Public with public view',
                'isprivate': False,
                'everyone_contributes': 'false'
            })

        self.public_publicview_view = GroupingFactory(**{
            'project': self.public_publicview_project,
            'isprivate': False
        })
        self.public_publicview_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.public_publicview_project,
                'can_moderate': True
            })
        self.public_publicview_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.public_publicview_project,
                'can_contribute': True
            })
        self.public_publicview_viewers_view = UserGroupF(
            add_users=[self.viewer_view],
            **{
                'project': self.public_publicview_project,
                'can_contribute': False,
                'can_moderate': False
            })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicview_view,
                'usergroup': self.public_publicview_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicview_view,
                'usergroup': self.public_publicview_contributors_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicview_view,
                'usergroup': self.public_publicview_viewers_view
            })

        self.public_publicview_moderators = UserGroupF(
            add_users=[self.moderator],
            **{
                'project': self.public_publicview_project,
                'can_moderate': True
            })
        self.public_publicview_contributors = UserGroupF(
            add_users=[self.contributor],
            **{
                'project': self.public_publicview_project,
                'can_contribute': True
            })
        self.public_publicview_viewers = UserGroupF(
            add_users=[self.viewer],
            **{
                'project': self.public_publicview_project,
                'can_contribute': False,
                'can_moderate': False
            })

        self.public_publicviews_project = ProjectF.create(
            add_admins=[self.admin],
            **{
                'name': 'public with all public views',
                'isprivate': False,
                'everyone_contributes': 'false'
            })

        self.public_publicviews_view = GroupingFactory(**{
            'project': self.public_publicviews_project,
            'isprivate': False
        })
        self.public_publicviews_moderators_view = UserGroupF(
            add_users=[self.moderator_view],
            **{
                'project': self.public_publicviews_project,
                'can_moderate': True
            })
        self.public_publicviews_contributors_view = UserGroupF(
            add_users=[self.contributor_view],
            **{
                'project': self.public_publicviews_project,
                'can_contribute': True
            })
        self.public_publicviews_viewers_view = UserGroupF(
            add_users=[self.viewer_view],
            **{
                'project': self.public_publicviews_project,
                'can_contribute': False,
                'can_moderate': False
            })

        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicviews_view,
                'usergroup': self.public_publicviews_moderators_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicviews_view,
                'usergroup': self.public_publicviews_contributors_view
            })
        GroupingUserGroupFactory.create(
            **{
                'grouping': self.public_publicviews_view,
                'usergroup': self.public_publicviews_viewers_view
            })

        self.public_publicviews_moderators = UserGroupF(
            add_users=[self.moderator],
            **{
                'project': self.public_publicviews_project,
                'can_moderate': True
            })
        self.public_publicviews_contributors = UserGroupF(
            add_users=[self.contributor],
            **{
                'project': self.public_publicviews_project,
                'can_contribute': True
            })
        self.public_publicviews_viewers = UserGroupF(
            add_users=[self.viewer],
            **{
                'project': self.public_publicviews_project,
                'can_contribute': False,
                'can_moderate': False
            })