Пример #1
0
    def setUpTestData(cls):
        cls.admin_user = f.UserFactory(is_staff=True)
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_user = f.UserFactory()
        cls.test_restaurant = \
            f.RestaurantFactory(admin_users=[cls.restaurant_admin_user])

        cls.current_test_url = reverse(
            'restaurants:restaurant_delete',
            kwargs={'restaurant_slug': cls.test_restaurant.slug})
Пример #2
0
    def test_inactive_user_login(self):
        """
        What happens when an unconfirmed, or banned, user tries to log in?

            - Users with no last_login are treated as not-yet-activated,
              and will receive a message telling them to use the emailed link.
            - Users with a last_login are considered to be banned, and will
              behave normally, ie. return bad username/password ValidationError
        """
        unconfirmed_user = f.UserFactory(is_active=False)
        banned_user = f.UserFactory(is_active=False, last_login=timezone.now())

        # ensure that the unconfirmed user receives the correct message
        self.response = self.client.post(
            self.current_test_url, {
                'username': unconfirmed_user.username,
                'password': c.TEST_USER_PASSWORD,
                'captcha_0': 'test',
                'captcha_1': 'PASSED'
            })

        self.assertEquals(self.response.status_code, 200)
        self.html = unescape(self.response.content.decode('utf-8'))
        self.assertIn(c.USER_IS_UNCONFIRMED_MESSAGE, self.html)

        # ensure that the banned user receives the correct message
        self.response = self.client.post(
            self.current_test_url, {
                'username': banned_user.username,
                'password': c.TEST_USER_PASSWORD,
                'captcha_0': 'test',
                'captcha_1': 'PASSED'
            })

        self.assertEquals(self.response.status_code, 200)
        self.html = unescape(self.response.content.decode('utf-8'))
        self.assertIn("Please enter a correct username and password.",
                      self.html)

        # try unbanning the above user to ensure that the ValidationError
        # above was not due to bad inputs
        banned_user.is_active = True
        banned_user.save()

        self.response = self.client.post(self.current_test_url, {
            'username': banned_user.username,
            'password': c.TEST_USER_PASSWORD,
            'captcha_0': 'test',
            'captcha_1': 'PASSED'
        },
                                         follow=True)

        self.assertEquals(self.response.status_code, 200)
        self.html = unescape(self.response.content.decode('utf-8'))
        self.assertIn(c.USER_LOGIN_SUCCESS_MESSAGE, self.html)
Пример #3
0
    def setUpTestData(cls):
        cls.test_permission = UserHasRestaurantPermissionsMixin()
        cls.request = RequestFactory().get('/')

        # create users
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()
        cls.admin_user = f.UserFactory(is_staff=True)

        # create restaurant objects
        cls.test_restaurant = \
            f.RestaurantFactory(admin_users=[cls.restaurant_admin_user])
        cls.test_menu = f.MenuFactory(restaurant=cls.test_restaurant)
        cls.test_menusection = f.MenuSectionFactory(menu=cls.test_menu)
        cls.test_menuitem = f.MenuItemFactory(menusection=cls.test_menusection)
Пример #4
0
    def setUpTestData(cls):
        cls.view = views.MenuList

        # create model objects
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_restaurant = f.RestaurantFactory()
        cls.test_menus = f.MenuFactory.create_batch(
            size=3,
            restaurant=cls.test_restaurant,
            admin_users=[cls.restaurant_admin_user])

        # generate test url
        cls.kwargs = {'restaurant_pk': cls.test_menus[0].pk}
        cls.current_test_url = reverse('api:menu_list', kwargs=cls.kwargs)
Пример #5
0
    def setUpTestData(cls):
        cls.test_permission = HasRestaurantPermissionsOrReadOnly()
        cls.factory = APIRequestFactory()

        # create users
        cls.unprivileged_user = f.UserFactory(username='******')
        cls.permitted_user = f.UserFactory(username='******')
        cls.admin_user = f.UserFactory(username='******', is_staff=True)

        # create restaurant objects and add permitted user to admin_users
        cls.test_restaurant = f.RestaurantFactory(
            admin_users=[cls.permitted_user])
        cls.test_menu = f.MenuFactory(restaurant=cls.test_restaurant)
        cls.test_menusection = f.MenuSectionFactory(menu=cls.test_menu)
        cls.test_menuitem = f.MenuItemFactory(menusection=cls.test_menusection)
Пример #6
0
    def test_banned_user_with_valid_url(self):
        with self.settings(EMAIL_CONFIRMATION_REQUIRED=True):
            # create banned user
            banned_user = f.UserFactory(is_active=False,
                                        last_login=timezone.now())

            # generate welcome email url
            self.current_test_url = self.form_instance.send_new_user_email(
                banned_user, get_path=True)

            # attempt to activate account
            self.response = self.user_activation_post_data(
                username=banned_user.username)
            self.assertEqual(self.response.status_code, 200)
            self.html = unescape(self.response.content.decode('utf-8'))
            self.assertIn("Please enter a correct username and password.",
                          self.html)

            # user is still banned
            banned_user.refresh_from_db()
            self.assertFalse(banned_user.is_active)

            # sanity check - unban the user, allow them to log in
            banned_user.is_active = True
            banned_user.save()
            self.response = \
                self.user_activation_post_data(username=banned_user.username)
            self.assertEqual(self.response.status_code, 302)
            self.assertEqual(self.response.wsgi_request.user, banned_user)
Пример #7
0
    def setUpTestData(cls):
        cls.serializer = serializers.MenuItemSerializer

        # create objects
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_menusection = \
            f.MenuSectionFactory(admin_users=[cls.restaurant_admin_user])
    def setUpTestData(cls):
        # create restaurant_admin_user
        cls.restaurant_admin_user = f.UserFactory()

        # create test_restaurant
        cls.test_restaurant = \
            Restaurant.objects.create(name=c.TEST_RESTAURANT_NAME)
        cls.test_restaurant.admin_users.add(cls.restaurant_admin_user)
Пример #9
0
    def setUp(self):
        self.test_user = f.UserFactory()

        self.client.login(username=self.test_user.username,
                          password=c.TEST_USER_PASSWORD)

        self.current_test_url = reverse('users:password_change')
        self.response = self.client.get(self.current_test_url)
        self.view = self.response.context['view']
Пример #10
0
    def setUp(self):
        self.test_user = f.UserFactory()
        self.client.login(username=self.test_user.username,
                          password=c.TEST_USER_PASSWORD)

        self.current_test_url = reverse('users:user_update')
        self.response = self.client.get(self.current_test_url)
        self.html = unescape(self.response.content.decode('utf-8'))
        self.view = self.response.context['view']
Пример #11
0
    def setUpTestData(cls):
        cls.view = views.RestaurantList

        # create model objects
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_restaurants = f.RestaurantFactory.create_batch(3)

        # generate test url
        cls.current_test_url = reverse('api:restaurant_list')
Пример #12
0
    def setUpTestData(cls):
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_restaurant = \
            f.RestaurantFactory(admin_users=[cls.restaurant_admin_user])
        cls.test_menu = \
            f.MenuFactory(restaurant=cls.test_restaurant)

        cls.current_test_url = reverse(
            'restaurants:restaurant_detail',
            kwargs={'restaurant_slug': cls.test_restaurant.slug})
Пример #13
0
    def setUpTestData(cls):
        cls.view = views.MenuSectionList

        # create model objects
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()
        cls.test_menu = f.MenuFactory()
        cls.test_menusections = f.MenuSectionFactory.create_batch(
            size=3,
            menu=cls.test_menu,
            admin_users=[cls.restaurant_admin_user])

        # generate test url
        cls.kwargs = {
            'restaurant_pk': cls.test_menu.restaurant.pk,
            'menu_pk': cls.test_menu.pk
        }
        cls.current_test_url = \
            reverse('api:menusection_list', kwargs=cls.kwargs)
Пример #14
0
    def setUp(self):
        self.authenticated_user = f.UserFactory(username='******')

        self.form_instance = NewUserCreationForm()
        self.test_uid = self.form_instance.send_new_user_email(
            self.authenticated_user, get_uid=True)
        self.test_token = self.form_instance.send_new_user_email(
            self.authenticated_user, get_token=True)

        self.current_test_url = reverse('users:user_activation',
                                        kwargs={
                                            'uidb64': self.test_uid,
                                            'token': self.test_token
                                        })
        self.response = self.client.get(self.current_test_url)
        self.view = self.response.context['view']
Пример #15
0
    def test_active_user_uses_activation_view_to_log_in(self):
        active_user = f.UserFactory()
        self.client.login(username=active_user, password=c.TEST_USER_PASSWORD)
        self.response = self.client.get(self.current_test_url)
        self.assertEqual(self.response.status_code, 302)
        self.assertEqual(self.response.url,
                         reverse(settings.LOGIN_REDIRECT_URL))

        # user has successfully logged in
        self.assertEqual(self.response.wsgi_request.user, active_user)

        # user is redirected and template contains
        # c.USER_LOGIN_ALREADY_AUTHENTICATED_MESSAGE
        self.response = self.client.get(self.response.url)
        self.assertEqual(self.response.status_code, 200)
        self.html = unescape(self.response.content.decode('utf-8'))
        self.assertIn(c.USER_LOGIN_ALREADY_AUTHENTICATED_MESSAGE, self.html)
Пример #16
0
    def test_welcome_email(self):
        test_user = f.UserFactory()

        # url is valid
        with self.settings(EMAIL_CONFIRMATION_REQUIRED=False):
            user_activation_url = \
                self.form_instance.send_new_user_email(test_user, get_url=True)
            self.response = self.client.get(user_activation_url)
            self.assertEqual(self.response.status_code, 200)
            self.assertTemplateUsed(self.response, 'users/login.html')

            # confirmation email sent and contains expected text
            self.form_instance.send_new_user_email(test_user)
            self.assertEqual(len(mail.outbox), 1)
            self.assertIn(f"Welcome to {c.PROJECT_NAME}!",
                          mail.outbox[0].subject)
            self.assertIn("You can login to your account", mail.outbox[0].body)
Пример #17
0
    def setUpTestData(cls):
        cls.serializer = serializers.MenuSectionSerializer

        cls.restaurant_admin_user = f.UserFactory()
        cls.test_menu = f.MenuFactory(admin_users=[cls.restaurant_admin_user])
Пример #18
0
    def setUpTestData(cls):
        cls.view = views.MenuItemDetail

        # create model objects
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()
Пример #19
0
    def setUpTestData(cls):
        cls.view = views.is_email_available

        # create model objects
        cls.test_user = f.UserFactory()
Пример #20
0
 def setUpTestData(cls):
     cls.serializer = serializers.RestaurantSerializer
     cls.restaurant_admin_user = f.UserFactory()
Пример #21
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.restaurant_admin_user = f.UserFactory()
Пример #22
0
    def setUpTestData(cls):
        cls.serializer = serializers.MenuSerializer

        cls.restaurant_admin_user = f.UserFactory()
        cls.test_restaurant = \
            f.RestaurantFactory(admin_users=[cls.restaurant_admin_user])
Пример #23
0
 def setUpTestData(cls):
     cls.restaurant_admin_user = f.UserFactory()
     cls.current_test_url = reverse('restaurants:restaurant_create')
Пример #24
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:logout')
Пример #25
0
    def setUpTestData(cls):
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()

        cls.current_test_url = reverse('users:user_detail')
Пример #26
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:user_delete')
Пример #27
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:login')
     cls.next_url = reverse('restaurants:restaurant_list')
Пример #28
0
    def test_method_send_new_user_email(self):
        """
        This method is an abominable hack that should be moved out of
        the form and into its own functions. However, it is tightly
        coupled to Django's native password reset function, and may
        benefit from any improvements that are made to it.
        """
        test_user = f.UserFactory()
        other_user = f.UserFactory()

        with self.settings(EMAIL_CONFIRMATION_REQUIRED=True):
            # uid matches self.test_user.pk
            uid = \
                self.form_instance.send_new_user_email(test_user, get_uid=True)
            self.assertEqual(int(urlsafe_base64_decode(uid)), test_user.pk)

            # token is valid
            test_user_token = self.form_instance.send_new_user_email(
                test_user, get_token=True)
            self.assertTrue(
                default_token_generator.check_token(test_user,
                                                    test_user_token))

            # check_token - token returned by the method always returns True
            self.form_instance.send_new_user_email(test_user, check_token=True)

            # check_token - a manually-entered token
            # for the same user always returns True
            self.assertTrue(
                self.form_instance.send_new_user_email(test_user,
                                                       check_token=True,
                                                       token=test_user_token))

            # check_token - a manually-entered token for
            # a different user always returns False
            other_user_token = self.form_instance.send_new_user_email(
                other_user, get_token=True)
            self.assertFalse(
                self.form_instance.send_new_user_email(test_user,
                                                       check_token=True,
                                                       token=other_user_token))

            # url is valid
            user_activation_url = \
                self.form_instance.send_new_user_email(test_user, get_url=True)
            self.response = self.client.get(user_activation_url)
            self.assertEqual(self.response.status_code, 200)
            self.html = unescape(self.response.content.decode('utf-8'))
            self.assertIn(c.USER_ACTIVATION_VIEW_MESSAGE, self.html)

            # path is valid
            user_activation_path = self.form_instance.send_new_user_email(
                test_user, get_path=True)
            self.response = self.client.get(user_activation_path)
            self.assertEqual(self.response.status_code, 200)
            self.html = unescape(self.response.content.decode('utf-8'))
            self.assertIn(c.USER_ACTIVATION_VIEW_MESSAGE, self.html)

            # confirmation email sent and contains expected text
            self.form_instance.send_new_user_email(test_user)
            self.assertEqual(len(mail.outbox), 1)
            self.assertIn("Confirm your account", mail.outbox[0].subject)
            self.assertIn("confirm your account", mail.outbox[0].body)

            # email does not contain next kwarg
            self.assertNotIn("?next=", mail.outbox[0].body)

            # clear the outbox before doing the tests for next_url
            del mail.outbox

            # next_url
            next_url = reverse('restaurants:restaurant_list')

            # url contains next_url
            user_activation_url_with_next_kwarg = \
                self.form_instance.send_new_user_email(
                    test_user, next_url=next_url, get_url=True)
            self.assertIn(f'?next={next_url}',
                          user_activation_url_with_next_kwarg)

            # path contains next_url
            user_activation_path_with_next_kwarg = \
                self.form_instance.send_new_user_email(
                    test_user, next_url=next_url, get_path=True)
            self.assertIn(f'?next={next_url}',
                          user_activation_path_with_next_kwarg)

            # confirmation email sent and contains expected text
            self.form_instance.send_new_user_email(test_user,
                                                   next_url=next_url)
            self.assertEqual(len(mail.outbox), 1)
            self.assertIn("Confirm your account", mail.outbox[0].subject)
            self.assertIn("confirm your account", mail.outbox[0].body)
            self.assertIn(f'?next={next_url}', mail.outbox[0].body)
Пример #29
0
    def setUpTestData(cls):
        cls.authenticated_user = f.UserFactory(username='******')

        cls.current_test_url = reverse('users:register')
        cls.next_url = reverse('restaurants:restaurant_list')