def test_response_form_display(self):
        self.assertEqual(
            None,
            ResponseForm(self.anon, self.question)
        )

        self.assertNotEqual(
            None,
            ResponseForm(self.joe, self.question)
        )

        self.assertNotEqual(
            None,
            ResponseForm(self.admin, self.question)
        )

        # the default is to let others comment on
        # questions, even if they aren't staff and
        # didn't ask the question (KNOWLEDGE_FREE_RESPONSE)
        self.assertNotEqual(
            None,
            ResponseForm(self.bob, self.question)
        )

        # lock the question...
        self.question.lock()

        self.assertEqual(
            None,
            ResponseForm(self.admin, self.question)
        )
    def test_sending_alerts_dedupe(self):
        """
        One question by joe, two responses by admin: bob responds.
        """
        ######## SETUP
        self.assertTrue(settings.ALERTS)

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'status': 'inherit',
            'alert': settings.ALERTS,
        }

        # another admin response
        response = ResponseForm(self.admin, self.question, RESPONSE_POST).save()

        mail.outbox = [] # reset
        self.assertEqual(len(mail.outbox), 0)
        ######## TEARDOWN

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'alert': settings.ALERTS,
        }

        # question is by joe, first response is by admin
        form = ResponseForm(self.bob, self.question, RESPONSE_POST)
        self.assertTrue(form.is_valid())
        response = form.save()

        self.assertTrue(response.alert)
        self.assertEqual(len(mail.outbox), 2) # one for joe, one for admin
    def test_sending_alerts_dedupe(self):
        """
        One question by joe, two responses by admin: bob responds.
        """
        ######## SETUP
        self.assertTrue(settings.ALERTS)

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'status': 'inherit',
            'alert': settings.ALERTS,
        }

        # another admin response
        response = ResponseForm(self.admin, self.question, RESPONSE_POST).save()

        mail.outbox = [] # reset
        self.assertEqual(len(mail.outbox), 0)
        ######## TEARDOWN

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'alert': settings.ALERTS,
        }

        # question is by joe, first response is by admin
        form = ResponseForm(self.bob, self.question, RESPONSE_POST)
        self.assertTrue(form.is_valid())
        response = form.save()

        self.assertTrue(response.alert)
        self.assertEqual(len(mail.outbox), 2) # one for joe, one for admin
Exemple #4
0
    def test_form_saving(self):
        QUESTION_POST = {
            'title': 'This is a title friend!',
            'body': 'This is the body friend!',
            'status': 'private'
        }

        form = QuestionForm(self.joe, QUESTION_POST)

        self.assertTrue(form.is_valid())

        question = form.save()

        self.assertEquals(question.status, 'private')
        self.assertEquals(question.name, None)
        self.assertEquals(question.email, None)
        self.assertEquals(question.title, 'This is a title friend!')
        self.assertEquals(question.body, 'This is the body friend!')
        self.assertEquals(question.user, self.joe)

        RESPONSE_POST = {'body': 'This is the response body friend!'}

        form = ResponseForm(self.joe, question, RESPONSE_POST)

        self.assertTrue(form.is_valid())

        response = form.save()

        self.assertEquals(response.status, 'inherit')
        self.assertEquals(response.name, None)
        self.assertEquals(response.email, None)
        self.assertEquals(response.body, 'This is the response body friend!')
        self.assertEquals(response.user, self.joe)
Exemple #5
0
    def test_ALLOW_ANONYMOUS(self):
        self.assertFalse(settings.ALLOW_ANONYMOUS)

        self.assertEqual(None, QuestionForm(self.anon))

        self.assertEqual(None, ResponseForm(self.anon, self.question))

        ############# flip setting ##############
        settings.ALLOW_ANONYMOUS = not settings.ALLOW_ANONYMOUS
        ############# flip setting ##############

        self.assertNotEqual(None, QuestionForm(self.anon))

        self.assertNotEqual(None, ResponseForm(self.anon, self.question))

        form = QuestionForm(self.anon)
        self.assertNotIn('status', form.fields.keys())

        # missing the name/email...
        QUESTION_POST = {
            'title': 'This is a title friend!',
            'body': 'This is the body friend!'
        }

        form = QuestionForm(self.anon, QUESTION_POST)
        self.assertFalse(form.is_valid())

        QUESTION_POST = {
            'name': 'Test Guy',
            'email': '*****@*****.**',
            'title': 'This is a title friend!',
            'body': 'This is the body friend!'
        }

        form = QuestionForm(self.anon, QUESTION_POST)
        self.assertTrue(form.is_valid())

        question = form.save()

        # question has no user and is public by default
        self.assertFalse(question.user)
        self.assertEquals(question.name, 'Test Guy')
        self.assertEquals(question.email, '*****@*****.**')
        self.assertEquals(question.status, 'public')

        ############# flip setting ##############
        settings.ALLOW_ANONYMOUS = not settings.ALLOW_ANONYMOUS
    def test_sending_alerts_normal(self):
        """
        One question by joe, one response by admin: bob responds.
        """
        self.assertTrue(settings.ALERTS)
        
        self.assertEqual(len(mail.outbox), 0)

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'alert': settings.ALERTS,
        }

        # question is by joe, first response is by admin
        form = ResponseForm(self.bob, self.question, RESPONSE_POST)
        self.assertTrue(form.is_valid())
        response = form.save()

        self.assertTrue(response.alert)
        self.assertEqual(len(mail.outbox), 2) # one for joe, one for admin
    def test_sending_alerts_normal(self):
        """
        One question by joe, one response by admin: bob responds.
        """
        self.assertTrue(settings.ALERTS)
        
        self.assertEqual(len(mail.outbox), 0)

        RESPONSE_POST = {
            'body': 'This is the response body friend!',
            'alert': settings.ALERTS,
        }

        # question is by joe, first response is by admin
        form = ResponseForm(self.bob, self.question, RESPONSE_POST)
        self.assertTrue(form.is_valid())
        response = form.save()

        self.assertTrue(response.alert)
        self.assertEqual(len(mail.outbox), 2) # one for joe, one for admin
Exemple #8
0
def knowledge_thread(request,
                     question_id,
                     slug=None,
                     template='django_knowledge/thread.html'):

    if settings.LOGIN_REQUIRED and not request.user.is_authenticated():
        return HttpResponseRedirect(settings.LOGIN_URL +
                                    "?next=%s" % request.path)

    try:
        question = Question.objects.can_view(request.user)\
                                   .get(id=question_id)
    except Question.DoesNotExist:
        if Question.objects.filter(id=question_id).exists() and \
                                hasattr(settings, 'LOGIN_REDIRECT_URL'):
            return redirect(settings.LOGIN_REDIRECT_URL)
        else:
            raise Http404

    responses = question.get_responses(request.user)

    if request.path != question.get_absolute_url():
        return redirect(question.get_absolute_url(), permanent=True)

    form = ResponseForm(request.user, question, request.POST or None)
    if request.method == 'POST' and form.is_valid():
        if request.user.is_authenticated(
        ) or not form.cleaned_data['phone_number']:
            form.save()
        return redirect(question.get_absolute_url())

    return render(
        request, template, {
            'request': request,
            'question': question,
            'responses': responses,
            'allowed_mods': ALLOWED_MODS,
            'form': form,
            'categories': Category.objects.all(),
            'BASE_TEMPLATE': settings.BASE_TEMPLATE,
        })
    def test_question_form_display(self):
        self.assertEqual(
            None,
            QuestionForm(self.anon)
        )

        self.assertNotEqual(
            None,
            QuestionForm(self.joe)
        )

        self.assertNotEqual(
            None,
            ResponseForm(self.admin, self.question)
        )
Exemple #10
0
    def test_FREE_RESPONSE(self):
        self.assertTrue(settings.FREE_RESPONSE)

        # joe authored the question, it is private so any user can respond...
        self.assertFalse(ResponseForm(self.anon, self.question))
        self.assertTrue(ResponseForm(self.bob, self.question))
        self.assertTrue(ResponseForm(self.joe, self.question))
        self.assertTrue(ResponseForm(self.admin, self.question))

        ############# flip setting ##############
        settings.FREE_RESPONSE = not settings.FREE_RESPONSE
        ############# flip setting ##############

        # ...now bob can't respond!
        self.assertFalse(ResponseForm(self.anon, self.question))
        self.assertFalse(ResponseForm(self.bob, self.question))
        self.assertTrue(ResponseForm(self.joe, self.question))
        self.assertTrue(ResponseForm(self.admin, self.question))

        ############# flip setting ##############
        settings.FREE_RESPONSE = not settings.FREE_RESPONSE