Files @ 110c68468203
Branch filter:

Location: rattail-project/rattail/tests/importing/test_model.py

lance
Update changelog
# -*- coding: utf-8; -*-

from __future__ import unicode_literals, absolute_import

from mock import Mock

from rattail.db import model, auth
from rattail.importing import model as import_model
from .. import RattailTestCase


class TestAdminUser(RattailTestCase):

    def setUp(self):
        super(TestAdminUser, self).setUp()
        self.config.setdefault('rattail', 'timezone.default', 'America/Chicago')

    def make_importer(self, **kwargs):
        kwargs.setdefault('config', self.config)
        kwargs.setdefault('session', self.session)
        return import_model.AdminUserImporter(**kwargs)

    def get_admin(self):
        return auth.administrator_role(self.session)

    def test_supported_fields(self):
        importer = import_model.UserImporter(self.config)
        standard_fields = importer.fields
        importer = self.make_importer()
        extra_fields = set(importer.fields) - set(standard_fields)
        self.assertEqual(len(extra_fields), 1)
        self.assertEqual(list(extra_fields)[0], 'admin')

    def test_normalize_local_object(self):
        importer = self.make_importer()
        importer.setup()

        user = model.User()
        user.username = 'fred'
        self.session.add(user)
        self.session.flush()

        data = importer.normalize_local_object(user)
        self.assertFalse(data['admin'])

        user.roles.append(self.get_admin())
        self.session.flush()
        data = importer.normalize_local_object(user)
        self.assertTrue(data['admin'])

    def test_update_object(self):
        importer = self.make_importer(fields=['uuid', 'admin'])
        data = {'uuid': 'ccb1915419e511e6a3ad3ca9f40bc550'}
        user = model.User(**data)
        admin = self.get_admin()
        self.assertNotIn(admin, user.roles)

        data['admin'] = True
        importer.update_object(user, data)
        self.assertIn(admin, user.roles)

        data['admin'] = False
        importer.update_object(user, data)
        self.assertNotIn(admin, user.roles)