Files @ bbbb013a0e94
Branch filter:

Location: kallithea/rhodecode/tests/models/test_user_groups.py

Bradley M. Kuhn
Import some of the files from Select2 3.5.0 Javascript system.

RhodeCode 2.2.5 used a version of Select2. Herein, we bring into
Kallithea only a few files directly from Select2 3.5.0 (6ef7155) upstream,
using the commands indicated below:

(cd /tmp; \
git clone https://github.com/ivaynberg/select2.git; \
cd select2; \
git checkout 3.5.0 \
)
mkdir rhodecode/public/js/select2
cp -pa /tmp/select2/select2.{js,css,png} rhodecode/public/js/select2/
cp -pa /tmp/select2/select2x2.png rhodecode/public/js/select2/
cp -pa /tmp/select2/select2-spinner.gif rhodecode/public/js/select2/
hg add rhodecode/public/js/select2/
import os
from sqlalchemy.exc import IntegrityError
from rhodecode.model.db import User

from rhodecode.tests import *
from rhodecode.tests.fixture import Fixture

from rhodecode.model.user_group import UserGroupModel
from rhodecode.model.meta import Session


fixture = Fixture()


class TestUserGroups(BaseTestCase):

    def tearDown(self):
        # delete all groups
        for gr in UserGroupModel.get_all():
            fixture.destroy_user_group(gr)
        Session().commit()


    @parameterized.expand([
        ([], [], [], [], []),
        ([], ['regular'], [], [], ['regular']),  # no changes of regular
        (['some_other'], [], [], ['some_other'], []),   # not added to regular group
        ([], ['regular'], ['container'], ['container'], ['regular', 'container']),
        ([], ['regular'], [], ['container', 'container2'], ['regular', 'container', 'container2']),
        ([], ['regular'], ['other'], [], ['regular']),  # remove not used
        (['some_other'], ['regular'], ['other', 'container'], ['container', 'container2'], ['regular', 'container', 'container2']),
    ])
    def test_enforce_groups(self, pre_existing, regular_should_be,
                            external_should_be, groups, expected):
        # delete all groups
        for gr in UserGroupModel.get_all():
            fixture.destroy_user_group(gr)
        Session().commit()

        user = User.get_by_username(TEST_USER_REGULAR_LOGIN)
        for gr in pre_existing:
            gr = fixture.create_user_group(gr)
        Session().commit()

        # make sure use is just in those groups
        for gr in regular_should_be:
            gr = fixture.create_user_group(gr)
            Session().commit()
            UserGroupModel().add_user_to_group(gr, user)
            Session().commit()

        # now special external groups created by auth plugins
        for gr in external_should_be:
            gr = fixture.create_user_group(gr, user_group_data={'extern_type': 'container'})
            Session().commit()
            UserGroupModel().add_user_to_group(gr, user)
            Session().commit()

        UserGroupModel().enforce_groups(user, groups, 'container')
        Session().commit()

        user = User.get_by_username(TEST_USER_REGULAR_LOGIN)
        in_groups = user.group_member
        self.assertEqual(expected, [x.users_group.users_group_name for x in in_groups])