def test_groupresourceprivilege_get_undo_groups(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     GroupResourceProvenance.update(resource=bikes,
                                    group=bikers,
                                    privilege=PrivilegeCodes.CHANGE,
                                    grantor=george)
     self.assertTrue(
         is_equal_to_as_set(
             GroupResourceProvenance.get_undo_groups(resource=bikes,
                                                     grantor=george),
             [bikers]))
 def test_groupresourceprivilege_get_current_record(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     GroupResourceProvenance.update(resource=bikes,
                                    group=bikers,
                                    privilege=PrivilegeCodes.CHANGE,
                                    grantor=george)
     record = GroupResourceProvenance.get_current_record(resource=bikes,
                                                         group=bikers)
     self.assertEqual(record.grantor, george)
     self.assertEqual(record.resource, bikes)
     self.assertEqual(record.group, bikers)
 def test_groupresourceprivilege_get_current_record(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     GroupResourceProvenance.update(
         resource=bikes,
         group=bikers,
         privilege=PrivilegeCodes.CHANGE,
         grantor=george)
     record = GroupResourceProvenance.get_current_record(
         resource=bikes, group=bikers)
     self.assertEqual(record.grantor, george)
     self.assertEqual(record.resource, bikes)
     self.assertEqual(record.group, bikers)
 def test_groupresourceprivilege_get_undo_groups(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     GroupResourceProvenance.update(
         resource=bikes,
         group=bikers,
         privilege=PrivilegeCodes.CHANGE,
         grantor=george)
     self.assertTrue(
         is_equal_to_as_set(
             GroupResourceProvenance.get_undo_groups(
                 resource=bikes,
                 grantor=george),
             [bikers]))
 def test_groupresourceprivilege_get_privilege(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     self.assertEqual(
         GroupResourceProvenance.get_privilege(resource=bikes,
                                               group=bikers),
         PrivilegeCodes.NONE)
     GroupResourceProvenance.update(resource=bikes,
                                    group=bikers,
                                    privilege=PrivilegeCodes.CHANGE,
                                    grantor=george)
     self.assertEqual(
         GroupResourceProvenance.get_privilege(resource=bikes,
                                               group=bikers),
         PrivilegeCodes.CHANGE)
 def test_groupresourceprivilege_get_privilege(self):
     george = self.george
     bikes = self.bikes
     bikers = self.bikers
     self.assertEqual(
         GroupResourceProvenance.get_privilege(
             resource=bikes,
             group=bikers),
         PrivilegeCodes.NONE)
     GroupResourceProvenance.update(
         resource=bikes,
         group=bikers,
         privilege=PrivilegeCodes.CHANGE,
         grantor=george)
     self.assertEqual(
         GroupResourceProvenance.get_privilege(
             resource=bikes,
             group=bikers),
         PrivilegeCodes.CHANGE)
    def test_groupresourceprivilege_undo_share(self):
        george = self.george
        bikes = self.bikes
        bikers = self.bikers
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.CHANGE,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.CHANGE)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.NONE,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.VIEW,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.undo_share(resource=bikes,
                                           group=bikers,
                                           grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.NONE)

        # further undos are prohibited
        with self.assertRaises(PermissionDenied):
            GroupResourceProvenance.undo_share(resource=bikes,
                                               group=bikers,
                                               grantor=george)
        with self.assertRaises(PermissionDenied):
            GroupResourceProvenance.undo_share(resource=bikes,
                                               group=bikers,
                                               grantor=george)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.VIEW,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.CHANGE,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.CHANGE)
        GroupResourceProvenance.undo_share(resource=bikes,
                                           group=bikers,
                                           grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.NONE,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(resource=bikes,
                                       group=bikers,
                                       privilege=PrivilegeCodes.CHANGE,
                                       grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(resource=bikes,
                                                  group=bikers),
            PrivilegeCodes.CHANGE)
    def test_groupresourceprivilege_undo_share(self):
        george = self.george
        bikes = self.bikes
        bikers = self.bikers
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.CHANGE,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.CHANGE)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.NONE,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.VIEW,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.NONE)

        # further undos are prohibited
        with self.assertRaises(PermissionDenied):
            GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george)
        with self.assertRaises(PermissionDenied):
            GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.VIEW,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.CHANGE,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.CHANGE)
        GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.VIEW)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.NONE,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.NONE)
        GroupResourceProvenance.update(
            resource=bikes,
            group=bikers,
            privilege=PrivilegeCodes.CHANGE,
            grantor=george)
        self.assertEqual(
            GroupResourceProvenance.get_privilege(
                resource=bikes,
                group=bikers),
            PrivilegeCodes.CHANGE)