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})
Exemple #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)
Exemple #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)
    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)
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #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']
Exemple #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']
    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')
    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})
    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)
Exemple #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']
Exemple #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)
Exemple #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)
Exemple #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])
    def setUpTestData(cls):
        cls.view = views.MenuItemDetail

        # create model objects
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()
    def setUpTestData(cls):
        cls.view = views.is_email_available

        # create model objects
        cls.test_user = f.UserFactory()
Exemple #20
0
 def setUpTestData(cls):
     cls.serializer = serializers.RestaurantSerializer
     cls.restaurant_admin_user = f.UserFactory()
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.restaurant_admin_user = f.UserFactory()
Exemple #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])
 def setUpTestData(cls):
     cls.restaurant_admin_user = f.UserFactory()
     cls.current_test_url = reverse('restaurants:restaurant_create')
Exemple #24
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:logout')
Exemple #25
0
    def setUpTestData(cls):
        cls.test_user = f.UserFactory()
        cls.restaurant_admin_user = f.UserFactory()

        cls.current_test_url = reverse('users:user_detail')
Exemple #26
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:user_delete')
Exemple #27
0
 def setUpTestData(cls):
     cls.test_user = f.UserFactory()
     cls.current_test_url = reverse('users:login')
     cls.next_url = reverse('restaurants:restaurant_list')
Exemple #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)
Exemple #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')