Beispiel #1
0
class TestEventAdmin(TestCase):
    fixtures = ['user']

    def setUp(self):
        self.maxDiff = None
        self.data = {'username': '******', 'password': '******'}
        self.headers = {
            'connection': 'keep-alive',
            'accept-language': 'en-US,en;q=0.8',
            'accept-encoding': 'gzip,deflate,br',
            'cache-control': 'max-age=0',
            'content-type': 'application/x-www-form-urlencoded',
            'content-length': len(dumps(self.data)),
            'accept': 'text/html;q=0.9,image/webp,image/apng,*/*;q=0.8'
        }
        self.c = Client(enforce_csrf_check=True)
        self.site = AdminSite()
        self.request = MockRequest()
        self.request.user = MockSuperUser()

    def tearDown(self):
        self.data = {}
        self.headers = {}
        self.c = None
        self.site = None
        self.request = None

    def test_01_event_visible(self):
        url = '/admin/'
        user = User.objects.get(username=self.data['username'])
        response = self.c.get(path=url, follow=True)
        self.assertEqual(200, response.status_code)
        self.assertTrue(response.csrf_cookie_set)
        self.assertTrue(self.c.login(**self.data))
        url = '/admin/complex/event/'
        response = self.c.get(path=url, headers=self.headers, follow=True)
        self.assertEqual(200, response.status_code)
        self.assertEqual('OK', response.reason_phrase)
        soup = BeautifulSoup(response.content, 'html.parser')
        self.assertEqual('Select event to change | Django site admin',
                         soup.title.string)
        self.assertIsNone(self.c.logout())

    def test_02_event_list_display(self):
        list_display = ('sensor', 'timestamp', 'location', 'status', 'camera',
                        'avg_temp', 'avg_pressure', 'pct_humidity', 'altitude',
                        'windspeed')
        self.assertTupleEqual(list_display, EventAdmin.list_display)

    def test_03_event_list_filter(self):
        list_filter = ('sensor', 'location')
        self.assertTupleEqual(list_filter, EventAdmin.list_filter)

    def test_04_event_search_fields(self):
        search_fields = ('sensor', 'timestamp', 'location', 'status')
        self.assertTupleEqual(search_fields, EventAdmin.search_fields)

    def test_05_event_fields(self):
        fields = ('sensor', 'timestamp', 'location', 'status', 'camera',
                  'avg_temp', 'avg_pressure', 'pct_humidity', 'altitude',
                  'windspeed')
        self.assertTupleEqual(fields, EventAdmin.fields)

    def test_06_event_date_hierarchy(self):
        date_hierarchy = 'timestamp'
        self.assertEqual(date_hierarchy, EventAdmin.date_hierarchy)

    def test_07_event_ordering(self):
        ordering = ('-timestamp', )
        self.assertTupleEqual(ordering, EventAdmin.ordering)

    def test_08_event_base_fields(self):
        ma = ModelAdmin(Event, self.site)
        base_fields = [
            'sensor', 'timestamp', 'location', 'status', 'camera', 'avg_temp',
            'avg_pressure', 'pct_humidity', 'altitude', 'windspeed', 'deleted',
            'link', 'ulink', 'dlink'
        ]
        self.assertListEqual(base_fields,
                             list(ma.get_form(self.request).base_fields))

    def test_09_model_registered(self):
        ma = ModelAdmin(Event, self.site)
        self.assertEqual(str(ma), 'complex.ModelAdmin')

    def test_10_model_not_registered(self):
        self.assertFalse(self.site.is_registered(EventAdmin))

    def test_11_model_fields(self):
        ma = ModelAdmin(Event, self.site)
        fields = [
            'sensor', 'timestamp', 'location', 'status', 'camera', 'avg_temp',
            'avg_pressure', 'pct_humidity', 'altitude', 'windspeed', 'deleted',
            'link', 'ulink', 'dlink'
        ]
        self.assertListEqual(fields, list(ma.get_fields(self.request)))

    def test_12_model_lookup(self):
        ma = ModelAdmin(Event, self.site)
        self.assertTrue(ma.lookup_allowed('location', 'smalltown'))
Beispiel #2
0
class FlagAdminTests(TestCase):
    def setUp(self):
        self.site = AdminSite()
        self.flag_admin = FlagAdmin(Flag, self.site)

    def test_informative_widget(self):
        request = mock.Mock()
        request.has_perm = lambda self, perm: True
        form = self.flag_admin.get_form(request)()
        user_widget = form.fields["users"].widget

        self.assertIsInstance(user_widget, InformativeManyToManyRawIdWidget)
        user1 = get_user_model().objects.create(username="******")
        user2 = get_user_model().objects.create(username="******")
        self.assertIn("(test1, test2)",
                      user_widget.render("users", [user1.pk, user2.pk]))

    def test_enable_for_all(self):
        f1 = Flag.objects.create(name="flag1", everyone=False)

        request = FakeRequest()
        enable_for_all(None, request, Flag.objects.all())

        f1.refresh_from_db()
        self.assertTrue(f1.everyone)
        log_entry = LogEntry.objects.get(user=request.user)
        self.assertEqual(log_entry.action_flag, CHANGE)
        self.assertEqual(log_entry.object_repr, "flag1 on")

    def test_disable_for_all(self):
        f1 = Flag.objects.create(name="flag1", everyone=True)

        request = FakeRequest()
        disable_for_all(None, request, Flag.objects.all())

        f1.refresh_from_db()
        self.assertFalse(f1.everyone)
        log_entry = LogEntry.objects.get(user=request.user)
        self.assertEqual(log_entry.action_flag, CHANGE)
        self.assertEqual(log_entry.object_repr, "flag1 off")

    def test_delete_individually(self):
        Flag.objects.create(name="flag1", everyone=True)

        request = FakeRequest()
        delete_individually(None, request, Flag.objects.all())

        self.assertIsNone(Flag.objects.first())
        log_entry = LogEntry.objects.get(user=request.user)
        self.assertEqual(log_entry.action_flag, DELETION)

    @skip_if_admin_permissions_not_available
    def test_flag_no_actions_without_permissions(self):
        request = FakeRequest()
        actions = self.flag_admin.get_actions(request)

        self.assertEqual(actions.keys(), set())

    @skip_if_admin_permissions_not_available
    def test_flag_action_change(self):
        request = FakeRequest()
        request.user.user_permissions.add(
            Permission.objects.get(codename="change_flag"))
        actions = self.flag_admin.get_actions(request)

        self.assertEqual(actions.keys(), {"enable_for_all", "disable_for_all"})

    @skip_if_admin_permissions_not_available
    def test_flag_action_delete(self):
        request = FakeRequest()
        request.user.user_permissions.add(
            Permission.objects.get(codename="delete_flag"))
        actions = self.flag_admin.get_actions(request)

        self.assertEqual(actions.keys(), {"delete_individually"})

    def test_model_can_be_registered_by_default(self):
        config = get_setting("ENABLE_ADMIN_PAGES")
        _register_model_to_admin_site(admin_site=self.site,
                                      config_setting=config,
                                      model=Flag)
        self.assertTrue(self.site.is_registered(Flag))

    @override_settings(WAFFLE_ENABLE_ADMIN_PAGES=False)
    def test_admin_page_can_be_disabled(self):
        config = get_setting("ENABLE_ADMIN_PAGES")
        _register_model_to_admin_site(admin_site=self.site,
                                      config_setting=config,
                                      model=Flag)
        self.assertFalse(self.site.is_registered(Flag))
Beispiel #3
0
class TestSensorAdmin(TestCase):
    fixtures = ['user']

    def setUp(self):
        self.maxDiff = None
        self.data = {'username': '******', 'password': '******'}
        self.headers = {
            'connection': 'keep-alive',
            'accept-language': 'en-US,en;q=0.8',
            'accept-encoding': 'gzip,deflate,br',
            'cache-control': 'max-age=0',
            'content-type': 'application/x-www-form-urlencoded',
            'content-length': len(dumps(self.data)),
            'accept': 'text/html;q=0.9,image/webp,image/apng,*/*;q=0.8'
        }
        self.c = Client(enforce_csrf_check=True)
        self.site = AdminSite()
        self.request = MockRequest()
        self.request.user = MockSuperUser()

    def tearDown(self):
        self.data = {}
        self.headers = {}
        self.c = None
        self.site = None
        self.request = None

    def test_01_sensor_visible(self):
        url = '/admin/'
        user = User.objects.get(username=self.data['username'])
        response = self.c.get(path=url, follow=True)
        self.assertEqual(200, response.status_code)
        self.assertTrue(response.csrf_cookie_set)
        self.assertTrue(self.c.login(**self.data))
        url = '/admin/complex/sensor/'
        response = self.c.get(path=url, headers=self.headers, follow=True)
        self.assertEqual(200, response.status_code)
        self.assertEqual('OK', response.reason_phrase)
        soup = BeautifulSoup(response.content, 'html.parser')
        self.assertEqual('Select sensor to change | Django site admin',
                         soup.title.string)
        self.assertIsNone(self.c.logout())

    def test_02_sensor_list_display(self):
        list_display = ('created_by', 'name', 'sku', 'serial_no', 'temp_units',
                        'pressure_units', 'alt_units', 'ws_units', 'installed',
                        'climate', 'camera')
        self.assertTupleEqual(list_display, SensorAdmin.list_display)

    def test_03_sensor_list_filter(self):
        list_filter = ('name', 'sku', 'installed')
        self.assertTupleEqual(list_filter, SensorAdmin.list_filter)

    def test_04_sensor_search_fields(self):
        search_fields = ('created_by', 'name', 'sku', 'serial_no', 'installed')
        self.assertTupleEqual(search_fields, SensorAdmin.search_fields)

    def test_05_sensor_fields(self):
        fields = ('created_by', 'name', 'sku', 'serial_no', 'temp_units',
                  'pressure_units', 'alt_units', 'ws_units', 'climate',
                  'camera')
        self.assertTupleEqual(fields, SensorAdmin.fields)

    def test_06_sensor_base_fields(self):
        ma = ModelAdmin(Sensor, self.site)
        base_fields = [
            'created_by', 'name', 'sku', 'serial_no', 'temp_units',
            'pressure_units', 'alt_units', 'ws_units', 'climate', 'camera',
            'link', 'ulink', 'dlink'
        ]
        self.assertListEqual(base_fields,
                             list(ma.get_form(self.request).base_fields))

    def test_07_model_registered(self):
        ma = ModelAdmin(Sensor, self.site)
        self.assertEqual(str(ma), 'complex.ModelAdmin')

    def test_08_model_not_registered(self):
        self.assertFalse(self.site.is_registered(SensorAdmin))

    def test_09_model_fields(self):
        ma = ModelAdmin(Sensor, self.site)
        fields = [
            'created_by', 'name', 'sku', 'serial_no', 'temp_units',
            'pressure_units', 'alt_units', 'ws_units', 'climate', 'camera',
            'link', 'ulink', 'dlink'
        ]
        self.assertListEqual(fields, list(ma.get_fields(self.request)))

    def test_10_model_lookup(self):
        ma = ModelAdmin(Sensor, self.site)
        self.assertTrue(ma.lookup_allowed('name', 'abc'))
Beispiel #4
0
class SwitchAdminTests(TestCase):
    def setUp(self):
        self.site = AdminSite()
        self.switch_admin = SwitchAdmin(Switch, self.site)

    def test_enable_switches(self):
        s1 = Switch.objects.create(name="switch1", active=False)

        request = FakeRequest()
        enable_switches(None, request, Switch.objects.all())

        s1.refresh_from_db()
        self.assertTrue(s1.active)
        log_entry = LogEntry.objects.get(user=request.user)
        self.assertEqual(log_entry.action_flag, CHANGE)
        self.assertEqual(log_entry.object_repr, "switch1 on")

    def test_disable_switches(self):
        s1 = Switch.objects.create(name="switch1", active=True)

        request = FakeRequest()
        disable_switches(None, request, Switch.objects.all())

        s1.refresh_from_db()
        self.assertFalse(s1.active)
        log_entry = LogEntry.objects.get(user=request.user)
        self.assertEqual(log_entry.action_flag, CHANGE)
        self.assertEqual(log_entry.object_repr, "switch1 off")

    @skip_if_admin_permissions_not_available
    def test_switch_no_actions_without_permissions(self):
        request = FakeRequest()
        actions = self.switch_admin.get_actions(request)

        self.assertEqual(actions.keys(), set())

    @skip_if_admin_permissions_not_available
    def test_switch_action_change(self):
        request = FakeRequest()
        request.user.user_permissions.add(
            Permission.objects.get(codename="change_switch"))
        actions = self.switch_admin.get_actions(request)

        self.assertEqual(actions.keys(),
                         {"enable_switches", "disable_switches"})

    @skip_if_admin_permissions_not_available
    def test_switch_action_delete(self):
        request = FakeRequest()
        request.user.user_permissions.add(
            Permission.objects.get(codename="delete_switch"))
        actions = self.switch_admin.get_actions(request)

        self.assertEqual(actions.keys(), {"delete_individually"})

    def test_model_can_be_registered_by_default(self):
        config = get_setting("ENABLE_ADMIN_PAGES")
        _register_model_to_admin_site(admin_site=self.site,
                                      config_setting=config,
                                      model=Switch)
        self.assertTrue(self.site.is_registered(Switch))

    @override_settings(WAFFLE_ENABLE_ADMIN_PAGES=False)
    def test_admin_page_can_be_disabled(self):
        config = get_setting("ENABLE_ADMIN_PAGES")
        _register_model_to_admin_site(admin_site=self.site,
                                      config_setting=config,
                                      model=Switch)
        self.assertFalse(self.site.is_registered(Switch))