Exemple #1
0
    def test_save_email(self):
        visobj = self.place.profile.email_visibility
        visobj.visible_online_public = True
        visobj.visible_online_authed = True
        visobj.visible_in_book = True
        visobj.save()

        # Setting `online_authed` to False is expected to set `online_public` to
        # False as well, and leave `in_book` as is without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
            'visible_online_authed': False,
        },
                              instance=visobj)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        visobj.refresh_from_db()
        self.assertFalse(visobj.visible_online_public)
        self.assertFalse(visobj.visible_online_authed)
        self.assertTrue(visobj.visible_in_book)

        # Setting `online_public` to True is expected to set `online_authed` to
        # True as well, and leave `in_book` as is without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
            'visible_online_authed': False,
        },
                              instance=visobj)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        visobj.refresh_from_db()
        self.assertTrue(visobj.visible_online_public)
        self.assertTrue(visobj.visible_online_authed)
        self.assertTrue(visobj.visible_in_book)
Exemple #2
0
 def test_object(self):
     test_data = [
         (self.phone.visibility, {
             'title': self.phone
         }),
         (self.place.visibility, {
             'title': self.place
         }),
         (self.place.family_members_visibility, {
             'en': "family members",
             'eo': "kunloĝantoj"
         }),
         (self.phone.profile.email_visibility, {
             'title': self.phone.profile.email
         }),
     ]
     for obj, title in test_data:
         with self.subTest(type=obj.model_type):
             form = VisibilityForm(instance=obj)
             self.assertTrue(hasattr(form, 'obj'))
             self.assertTrue(hasattr(form.obj, 'icon'))
             self.assertSurrounding(form.obj.icon, "<", ">")
             self.assertTrue(hasattr(form.obj, '__str__'))
             with override_settings(LANGUAGE_CODE='en'):
                 self.assertEqual(str(form.obj),
                                  str(title.get('en') or title['title']))
             with override_settings(LANGUAGE_CODE='eo'):
                 self.assertEqual(str(form.obj),
                                  str(title.get('eo') or title['title']))
Exemple #3
0
 def test_init_readonly(self):
     form = VisibilityForm(instance=self.phone.visibility, read_only=True)
     # Verify that the expected fields are part of the form.
     self.assertEqual(set(self.expected_fields), set(form.fields))
     # Verify that all fields are marked 'disabled'.
     for field in self.expected_fields:
         with self.subTest(field=field):
             self.assertTrue(form.fields[field].disabled)
Exemple #4
0
 def test_venues(self):
     form = VisibilityForm(instance=self.phone.visibility)
     test_data = [
         (
             list(form.venues()),
             [
                 form['visible_in_book'], form['visible_online_public'],
                 form['visible_online_authed']
             ],
         ),
         (
             list(form.venues('in_book')),
             [form['visible_in_book']],
         ),
         (
             list(form.venues('online')),
             [form['visible_online_public'], form['visible_online_authed']],
         ),
     ]
     for i, (venues, expected_venues) in enumerate(test_data, start=1):
         with self.subTest(case=i):
Exemple #5
0
    def test_init_normal(self):
        test_dataset = [
            {
                'obj': self.phone.visibility,
                'mod': True
            },
            {
                'obj': self.place.visibility,
                'mod': False,
                'tied_online': True
            },
            {
                'obj': self.place.family_members_visibility,
                'mod': False
            },
        ]

        for test_data in test_dataset:
            with self.subTest(type=test_data['obj'].model_type):
                form = VisibilityForm(instance=test_data['obj'])
                # Verify that the expected fields are part of the form.
                self.assertEqual(set(self.expected_fields), set(form.fields))
                # Verify that fields are not marked 'required'.
                for field in self.expected_fields:
                    with self.subTest(field=field):
                        self.assertFalse(form.fields[field].required)
                # Verify that fields are properly marked 'disabled'.
                self.assertFalse(form.fields['visible_online_public'].disabled)
                self.assertEqual(test_data['obj'].rules['online_authed'],
                                 test_data['mod'])
                self.assertEqual(form.fields['visible_online_authed'].disabled,
                                 not test_data['mod'])
                self.assertTrue(form.fields['hint'].disabled)
                self.assertTrue(form.fields['indent'].disabled)
                # Verify that 'online-public' and 'online-authed' are tied on
                # the client side, when needed.
                self.assertEqual(
                    form.fields['visible_online_public'].widget.attrs.get(
                        'data-tied'), str(test_data.get('tied_online', False)))
                self.assertEqual(
                    form.fields['visible_online_authed'].widget.attrs.get(
                        'data-tied'), str(test_data.get('tied_online', False)))
                # Verify that the form's save method is protected in templates.
                self.assertTrue(
                    hasattr(form.save, 'alters_data')
                    or hasattr(form.save, 'do_not_call_in_templates'))
Exemple #6
0
 def test_object_tampering(self):
     test_data = [
         self.phone.visibility,
         self.place.visibility,
         self.place.family_members_visibility,
         self.phone.profile.email_visibility,
     ]
     for obj in test_data:
         with self.subTest(type=obj.model_type):
             with self.assertRaises(ValueError) as cm:
                 form = VisibilityForm(data={
                     'visible_in_book': True,
                     'hint': "AbC"
                 },
                                       request_profile="profile Dummy")
                 form.obj
             self.assertEqual(
                 str(cm.exception),
                 "Form is bound but no visibility settings object was provided, "
                 "for key None and 'profile Dummy'. "
                 "This most likely indicates tampering.")
Exemple #7
0
    def test_save_place(self):
        self.place.visibility.visible_online_public = False
        self.place.visibility.visible_online_authed = False
        self.place.visibility.visible_in_book = True
        self.place.visibility.save()

        # Setting `online_public` to True is expected to set `online_authed` to
        # True as well, and leave `in_book` as is without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
        },
                              instance=self.place.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        self.place.visibility.refresh_from_db()
        self.assertTrue(self.place.visibility.visible_online_public)
        self.assertTrue(self.place.visibility.visible_online_authed)
        self.assertTrue(self.place.visibility.visible_in_book)

        place2stay = PlaceFactory(available=True, in_book=True)
        place2stay.visibility.refresh_from_db()
        place2stay.visibility.visible_online_public = False
        place2stay.visibility.visible_online_authed = False
        place2stay.visibility.visible_in_book = True
        place2stay.visibility.save()

        # Setting `in_book` to False is expected to update the visibility object.
        form = VisibilityForm(data={
            'visible_in_book': False,
        },
                              instance=place2stay.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        place2stay.visibility.refresh_from_db()
        self.assertFalse(place2stay.visibility.visible_online_public)
        self.assertFalse(place2stay.visibility.visible_online_authed)
        self.assertFalse(place2stay.visibility.visible_in_book)

        # Setting `in_book` to True is expected to change the visibility object
        # and leave `online_public`, `online_authed` as are without change.
        form = VisibilityForm(data={
            'visible_in_book': True,
        },
                              instance=place2stay.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        place2stay.visibility.refresh_from_db()
        self.assertFalse(place2stay.visibility.visible_online_public)
        self.assertFalse(place2stay.visibility.visible_online_authed)
        self.assertTrue(place2stay.visibility.visible_in_book)
Exemple #8
0
    def test_save_phone(self):
        self.phone.visibility.visible_online_public = True
        self.phone.visibility.visible_online_authed = True
        self.phone.visibility.visible_in_book = True
        self.phone.visibility.save()

        # Setting `online_authed` to False is expected to set `online_public` to
        # False as well, and leave `in_book` as is without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
            'visible_online_authed': False,
            'visible_in_book': True,
        },
                              instance=self.phone.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        self.phone.visibility.refresh_from_db()
        self.assertFalse(self.phone.visibility.visible_online_public)
        self.assertFalse(self.phone.visibility.visible_online_authed)
        self.assertTrue(self.phone.visibility.visible_in_book)

        # Setting `online_public` to True is expected to set `online_authed` to
        # True as well, and leave `in_book` as is without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
            'visible_online_authed': False,
            'visible_in_book': True,
        },
                              instance=self.phone.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        self.phone.visibility.refresh_from_db()
        self.assertTrue(self.phone.visibility.visible_online_public)
        self.assertTrue(self.phone.visibility.visible_online_authed)
        self.assertTrue(self.phone.visibility.visible_in_book)

        # Setting `in_book` to False is expected to change the visibility object
        # and leave `online_public`, `online_authed` as are without change.
        form = VisibilityForm(data={
            'visible_online_public': True,
            'visible_online_authed': True,
            'visible_in_book': False,
        },
                              instance=self.phone.visibility)
        self.assertTrue(form.is_valid(), msg=repr(form.errors))
        form.save()
        self.phone.visibility.refresh_from_db()
        self.assertTrue(self.phone.visibility.visible_online_public)
        self.assertTrue(self.phone.visibility.visible_online_authed)
        self.assertFalse(self.phone.visibility.visible_in_book)
Exemple #9
0
 def test_save(self):
     visobj = self.place.family_members_visibility
     form = VisibilityForm(data={}, instance=visobj)
     self.assertTrue(form.is_valid(), msg=repr(form.errors))
     newobj = form.save(commit=False)
     self.assertIs(newobj, visobj)
Exemple #10
0
        # Verify that the expected fields are part of the form.
        self.assertEqual(set(self.expected_fields), set(form.fields))
        # Verify that all fields are marked 'disabled'.
        for field in self.expected_fields:
            with self.subTest(field=field):
                self.assertTrue(form.fields[field].disabled)

    def test_inbook_field_disabled(self):
        # Case 1. available: N, in book: N.
        with self.subTest(case=1, available=False, in_book=False):
            place = PlaceFactory(available=False, in_book=False)
            place.visibility.refresh_from_db()
            phone = PhoneFactory(profile=place.profile)
            phone.visibility.refresh_from_db()
            # The `in_book` field for place's visibility object is expected to be disabled.
            form = VisibilityForm(instance=place.visibility)
            self.assertTrue(form.fields['visible_in_book'].disabled)
            # The `in_book` field for phone's visibility object is expected to be disabled.
            form = VisibilityForm(instance=phone.visibility)
            self.assertTrue(form.fields['visible_in_book'].disabled)

        # Case 2. available: Y, in book: N.
        with self.subTest(case=2, available=True, in_book=False):
            self.assertTrue(self.place.available)
            self.assertFalse(self.place.in_book)
            # The `in_book` field for place's visibility object is expected to be disabled.
            form = VisibilityForm(instance=self.place.visibility)
            self.assertTrue(form.fields['visible_in_book'].disabled)
            # The `in_book` field for phone's visibility object is expected to be enabled.
            form = VisibilityForm(instance=self.phone.visibility)
            self.assertFalse(form.fields['visible_in_book'].disabled)