Exemple #1
0
 def test_was_published_recently_with_old_question(self):
     '''
         should return false if published more than 24hrs ago
     '''
     time = timezone.now() + datetime.timedelta(days=30)
     old_question = Question(pub_date=time)
     self.assertEqual(old_question.was_published_recently(), False)
Exemple #2
0
 def test_was_published_recently_with_future_question(self):
     '''
         should return false if published in the Future
     '''
     time = timezone.now() + datetime.timedelta(days=30)
     future_question = Question(pub_date=time)
     self.assertEqual(future_question.was_published_recently(), False)
Exemple #3
0
 def test_was_published_recently_with_recent_question(self):
     '''
         should return true if published within 24hrs
     '''
     time = timezone.now() + datetime.timedelta(days=30)
     recent_question = Question(pub_date=time)
     self.assertEqual(recent_question.was_published_recently(), False)
Exemple #4
0
 def test_was_published_recently_with_recent_question(self):
     """
     was_published_recently() should return True for questions whose
     pub_date is within the last day
     """
     time = timezone.now() - datetime.timedelta(hours=1)
     recent_question = Question(pub_date=time)
     self.assertEqual(recent_question.was_published_recently(), True)
Exemple #5
0
 def test_was_published_recently_with_future_question(self):
     """
     was_published_recently() should return False for questions whose
     pub_date is in the future
     """
     time = timezone.now() + datetime.timedelta(days=30)
     future_question = Question(pub_date=time)
     self.assertEqual(future_question.was_published_recently(), False)
Exemple #6
0
 def test_was_published_recently_with_old_question(self):
     """
     was_published_recently() should return False for questions whose
     pub_date is older than 1 day
     """
     time = timezone.now() - datetime.timedelta(days=30)
     old_question = Question(pub_date=time)
     self.assertEqual(old_question.was_published_recently(), False)
Exemple #7
0
 def test_was_published_recently_with_recent_question(self):
     """
     was_published_recently() should return True for questions whose
     pub_date is within the last day
     """
     time = timezone.now() - datetime.timedelta(hours=1)
     recent_question = Question(pub_date=time)
     self.assertEqual(recent_question.was_published_recently(), True)
def ask_question(request):
    if request.method == 'POST':
        que_title = request.POST.get('question_title')
        que_detail = request.POST.get('question_detail')
        question = Question(question_title=que_title,question_text=que_detail,author=request.user,pub_date=timezone.now())
        question.save()
        return redirect(reverse('myapp:home'))
    return render(request,'myapp/ask_question.html')
Exemple #9
0
 def test_was_published_recently_with_future_question(self):
     """
     was_published_recently() should return False for questions whose
     pub_date is in the future
     """
     time = timezone.now() + datetime.timedelta(days=30)
     future_question = Question(pub_date=time)
     self.assertEqual(future_question.was_published_recently(), False)
Exemple #10
0
 def test_was_published_recently_with_old_question(self):
     """
     was_published_recently() should return False for questions whose
     pub_date is older than 1 day
     """
     time = timezone.now() - datetime.timedelta(days=30)
     old_question = Question(pub_date=time)
     self.assertEqual(old_question.was_published_recently(), False)
Exemple #11
0
 def test_was_published_recently_with_recent_question(self):
     """
     was_published_recently() returns True for questions whose pub_date
     is within the last day.
     """
     time = timezone.now() - datetime.timedelta(
         hours=23, minutes=59, seconds=59)
     recent_question = Question(pub_date=time)
     self.assertIs(recent_question.was_published_recently(), True)
Exemple #12
0
    def setUp(self):
        Question.objects.all().delete()
        self.backend = PersistantBackend(slug="MockBackend")
        self.backend.save()
        self.reporter = Reporter(alias="ReporterName")
        self.reporter.save()
        self.pconnection = PersistantConnection(backend=self.backend, 
                                                reporter=self.reporter, 
                                                identity="1000", governorate = 2, district = 4)
        self.pconnection.save()

        self.pconnection1 = PersistantConnection(backend=self.backend, 
                                                reporter=self.reporter, 
                                                identity="10001", governorate = 7, district = 8)
        self.pconnection1.save()

        self.reporter.connections.add(self.pconnection)
        
        self.question1 = Question(text = "question1")
        self.question1.is_first = True
        self.question1.save()
        self.question2 = Question(text = "question2")
        self.question2.save()
        self.question3 = Question(text = "question3")
        self.question3.save()
        
        self.question1.next_question = self.question2
        self.question2.next_question = self.question3

        self.question1.save()
        self.question2.save()
        self.question3.save()

        self.setup_choices(self.question1)
        self.setup_choices(self.question2)
        self.setup_choices(self.question3)

        q = Questionnaire(trigger = "trigger", max_retries=3)
        q.save()
        DemographicParser(questionnaire=q, name='age', regex='[0-9]+', 
                        order=1, type='i').save()
        DemographicParser(questionnaire=q, name='gender', 
                        regex='m|f|male|female', order=2, type='c').save()

        r = Registration(phone = self.pconnection)
        r.save()
        
        r1 = Registration(phone = self.pconnection)
        r1.save()
Exemple #13
0
    def get_queryset(self):
        questions = Question.objects.all()
        if self.request.GET:
            form = self.form_class(self.request.GET)
        else:
            form = self.form_class()
	    
	    # Handle different possible orderings of question list
        if 'sortby' in self.request.GET:
            questions = Question.sorted_by(self.request.GET['sortby'])
	    
        if 'tag' in self.kwargs:
            tag_list = self.kwargs['tag'].split('+')
            questions = questions.filter(tags__name__in=tag_list).distinct()
        if form.is_valid():
            questions = questions.filter(content_rawtext__icontains=form.cleaned_data['keyword'])
        return questions
Exemple #14
0
 def get(self, request, id=None):
     if id:
         question = get_object_or_404(Question, id=id)
         poll_form = PollForm(instance=question)
         choices = question.choice_set.all()
         choice_forms = [
             ChoiceForm(prefix=str(choice.id), instance=choice)
             for choice in choices
         ]
         template = 'polls/edit_poll.html'
     else:
         poll_form = PollForm(instance=Question())
         choice_forms = [
             ChoiceForm(prefix=str(x), instance=Choice()) for x in range(3)
         ]
         template = 'polls/new_poll.html'
     context = {'poll_form': poll_form, 'choice_forms': choice_forms}
     return render(request, template, context)
Exemple #15
0
 def post(self, request, id=None):
     context = {}
     if id:
         return self.put(request, id)
     poll_form = PollForm(request.POST, instance=Question())
     choice_forms = [
         ChoiceForm(request.POST, prefix=str(x), instance=Choice())
         for x in range(0, 3)
     ]
     if poll_form.is_valid() and all([cf.is_valid()
                                      for cf in choice_forms]):
         new_poll = poll_form.save(commit=False)
         new_poll.created_by = request.user
         new_poll.save()
         for cf in choice_forms:
             new_choice = cf.save(commit=False)
             new_choice.question = new_poll
             new_choice.save()
         return HttpResponseRedirect('/poll/list/')
     context = {'poll_form': poll_form, 'choice_forms': choice_forms}
     return render(request, 'polls/new_poll.html', context)
Exemple #16
0
class UserSessionTest(TestCase):
    apps = (poll_App,)

    def setUp(self):
        Question.objects.all().delete()
        self.backend = PersistantBackend(slug="MockBackend")
        self.backend.save()
        self.reporter = Reporter(alias="ReporterName")
        self.reporter.save()
        self.pconnection = PersistantConnection(backend=self.backend, 
                                                reporter=self.reporter, 
                                                identity="1000", governorate = 2, district = 4)
        self.pconnection.save()

        self.pconnection1 = PersistantConnection(backend=self.backend, 
                                                reporter=self.reporter, 
                                                identity="10001", governorate = 7, district = 8)
        self.pconnection1.save()

        self.reporter.connections.add(self.pconnection)
        
        self.question1 = Question(text = "question1")
        self.question1.is_first = True
        self.question1.save()
        self.question2 = Question(text = "question2")
        self.question2.save()
        self.question3 = Question(text = "question3")
        self.question3.save()
        
        self.question1.next_question = self.question2
        self.question2.next_question = self.question3

        self.question1.save()
        self.question2.save()
        self.question3.save()

        self.setup_choices(self.question1)
        self.setup_choices(self.question2)
        self.setup_choices(self.question3)

        q = Questionnaire(trigger = "trigger", max_retries=3)
        q.save()
        DemographicParser(questionnaire=q, name='age', regex='[0-9]+', 
                        order=1, type='i').save()
        DemographicParser(questionnaire=q, name='gender', 
                        regex='m|f|male|female', order=2, type='c').save()

        r = Registration(phone = self.pconnection)
        r.save()
        
        r1 = Registration(phone = self.pconnection)
        r1.save()

    def setup_choices(self,question):
        choice1 = Choice(code= 'a',question=question, text="a")
        choice2 = Choice(code= 'b',question=question, text="a")
        choice3 = Choice(code= 'c',question=question, text="a")
        choice1.save()
        choice2.save()
        choice3.save()

    def test_open_new_session(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        self.assertEquals(session.question, None)
        
    def test_respond_with_first_question_on_new_session_for_any_message(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        self.assertEquals(session.respond("trigger m 16"), str(self.question1))

    def test_correct_response_to_question_sends_next_question(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        self.assertEquals(session.question, None)
        response1 = session.respond("trigger m 16")
        self.assertEquals(session.question, self.question1)
        response2 = session.respond("a")
        self.assertEquals(response2, str(self.question2))
        self.assertEquals(session.question, self.question2)

    def test_wrong_response_to_question_sends_error(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        self.assertEquals(session.question, None)
        response1 = session.respond("trigger f 16")
        self.assertEquals(session.question, self.question1)
        response2 = session.respond("django")
        self.assertEquals(response2, "error_parsing_response")
        self.assertEquals(session.question, self.question1)

    def test_retrieve_ongoing_session_at_question2(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        session.user = user
        session.question = self.question2
        session.save()

        session = UserSession.open(self.pconnection)

        self.assertEquals(session.respond("b"), str(self.question3))
        self.assertEquals(session.question, self.question3)
        
    def test_close_ongoing_session_at_trigger(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        session.user = user
        session.question = self.question2
        self.assertEquals(session.respond("c"), str(self.question3))
        self.assertEquals(session.question, self.question3)
        
        self.assertEquals(session.respond("trigger 13 m"), str(self.question1))
        self.assertEquals(session.question, self.question1)


    def test_close_session_on_last_answer(self):
        session = UserSession.open(self.pconnection)
        user = session.user
        user.save()
        session.user = user
        session.question = self.question3
        self.assertEquals(session.respond("c"), "thanks")
        self.assertEquals(session.question, None)
        self.assertEquals(session.user, None)

    def test_user_interaction_is_saved_when_successful(self):
        initial_number_of_responses = len(UserResponse.objects.all())
        initial_number_of_users = len(User.objects.all())
        
        session = UserSession.open(self.pconnection1)
        session.respond('trigger 14 f')
        self.assertEquals(len(User.objects.all()), initial_number_of_users + 1)
        session.respond('a')
        self.assertEquals(len(UserResponse.objects.all()), initial_number_of_responses + 1)

    def test_end_session_on_reaching_max_num_allowed_retries(self):
        session = UserSession.open(self.pconnection1)
        user = session.user
        user.save()
        session.user = user
        session.question = self.question1
        session.respond('t')
        session.respond('t')
        session.respond('t')
        self.assertEquals(session.question, None)

    def test_user_demographics_saved_when_present(self):
        session = UserSession.open(self.pconnection1)
        session.respond('trigger 13 f')
        latest_user = User.objects.all().order_by('-id')[0]
        self.assertEquals(latest_user.age, 13)
        self.assertEquals(latest_user.gender, 'f')
        
        
    def test_user_location_from_registration(self):
        session = UserSession.open(self.pconnection)
        session.respond('trigger 14 f')
        latest_user = User.objects.all().order_by('-id')[0]
        self.assertEquals(latest_user.governorate, 2)
        self.assertEquals(latest_user.district, 4)
        
    def test_junk_trigger_message(self):
        backend = PersistantBackend(slug="MockBackend1")
        backend.save()
        reporter = Reporter(alias="ReporterName1")
        reporter.save()
        pconnection = PersistantConnection(backend=backend, 
                                                reporter=reporter, 
                                                identity="1001")
        pconnection.save()
        session = UserSession.open(pconnection)

        self.assertEquals(session.respond('trigger junk'), TRIGGER_INCORRECT_MESSAGE )

    def test_junk_message(self):
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.respond('junk'), TRIGGER_INCORRECT_MESSAGE )

    def test_recreate_user_if_demographic_data_changes(self):
        session = UserSession.open(self.pconnection)
        session.respond("trigger m 16")
        session.respond("trigger m 12")
        self.assertEquals(len(User.objects.all()), 2)

    def test_reset_session_on_sending_trigger(self):
        session = UserSession.open(self.pconnection)
        session.respond("trigger m 16")
        
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.question, self.question1)
        session.respond("trigger f 12")

        self.assertEquals(session.question, self.question1)
        session = UserSession.open(self.pconnection)
        session.respond("a")

        self.assertEquals(session.question, self.question2)
        
    def test_less_than_required_choices_reminds_user(self):
        self.question1.max_choices = 2
        self.question1.save()
        session = UserSession.open(self.pconnection)
        session.respond("trigger m 16")
        self.assertEquals(session.question.max_choices, 2)
        error = session.respond("a")
        self.assertEquals(error, "err_less_thank_expected_choices")
Exemple #17
0
class UserSessionTest(TestCase):
    apps = (poll_App,)

    def setUp(self):
        Question.objects.all().delete()
        self.backend = PersistantBackend(slug="MockBackend")
        self.backend.save()
        self.reporter = Reporter(alias="ReporterName")
        self.reporter.save()
        self.pconnection = PersistantConnection(backend=self.backend, reporter=self.reporter, identity="1000")
        self.pconnection.save()

        self.pconnection1 = PersistantConnection(backend=self.backend, reporter=self.reporter, identity="10001")
        self.pconnection1.save()

        self.reporter.connections.add(self.pconnection)

        self.question1 = Question(text="question1")
        self.question1.is_first = True
        self.question1.save()
        self.question2 = Question(text="question2")
        self.question2.save()
        self.question3 = Question(text="question3")
        self.question3.save()

        self.question1.next_question = self.question2
        self.question2.next_question = self.question3

        self.question1.save()
        self.question2.save()
        self.question3.save()

        self.setup_choices(self.question1)
        self.setup_choices(self.question2)
        self.setup_choices(self.question3)

        q = Questionnaire(trigger="trigger", max_retries=3)
        q.save()
        DemographicParser(questionnaire=q, name="age", regex="[0-9]+", order=1, type="i").save()
        DemographicParser(questionnaire=q, name="gender", regex="m|f|male|female", order=2, type="c").save()
        self.user = User(connection=self.pconnection)
        self.user.save()

        r = Registration(governorate=3, district=4, phone=self.pconnection)
        r.save()

    def setup_choices(self, question):
        choice1 = Choice(code="a", question=question, text="a")
        choice2 = Choice(code="b", question=question, text="a")
        choice3 = Choice(code="c", question=question, text="a")
        choice1.save()
        choice2.save()
        choice3.save()

    def test_open_new_session(self):
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.question, None)

    def test_respond_with_first_question_on_new_session_for_any_message(self):
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.respond("text"), str(self.question1))

    def test_correct_response_to_question_sends_next_question(self):
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.question, None)
        response1 = session.respond("text")
        self.assertEquals(session.question, self.question1)
        response2 = session.respond("a")
        self.assertEquals(response2, str(self.question2))
        self.assertEquals(session.question, self.question2)

    def test_wrong_response_to_question_sends_error(self):
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.question, None)
        response1 = session.respond("text")
        self.assertEquals(session.question, self.question1)
        response2 = session.respond("django")
        self.assertEquals(response2, "error_parsing_response")
        self.assertEquals(session.question, self.question1)

    def test_retrieve_ongoing_session_at_question2(self):
        session = UserSession.open(self.pconnection)
        session.user = self.user
        session.question = self.question2
        session.save()
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.respond("b"), str(self.question3))
        self.assertEquals(session.question, self.question3)

    def test_close_ongoing_session_at_trigger(self):
        session = UserSession.open(self.pconnection)
        session.user = self.user
        session.question = self.question2
        session.save()
        session = UserSession.open(self.pconnection)
        self.assertEquals(session.respond("c"), str(self.question3))
        self.assertEquals(session.question, self.question3)

        self.assertEquals(session.respond("trigger 13 m"), str(self.question1))
        self.assertEquals(session.question, self.question1)

    def test_close_session_on_last_answer(self):
        session = UserSession.open(self.pconnection)
        session.question = self.question3
        session.user = self.user
        self.assertEquals(session.respond("c"), "thanks")
        self.assertEquals(session.question, None)

    def test_user_interaction_is_saved_when_successful(self):
        initial_number_of_responses = len(UserResponse.objects.all())
        initial_number_of_users = len(User.objects.all())

        session = UserSession.open(self.pconnection1)
        session.respond("trigger 14 f")
        self.assertEquals(len(User.objects.all()), initial_number_of_users + 1)
        session.respond("a")
        self.assertEquals(len(UserResponse.objects.all()), initial_number_of_responses + 1)

    def test_end_session_on_reaching_max_num_allowed_retries(self):
        session = UserSession.open(self.pconnection1)
        session.question = self.question1
        session.user = self.user
        session.respond("t")
        session.respond("t")
        session.respond("t")
        self.assertEquals(session.question, None)

    def test_user_demographics_saved_when_present(self):
        session = UserSession.open(self.pconnection1)
        session.respond("trigger 13 f")
        latest_user = User.objects.all().order_by("-id")[0]
        self.assertEquals(latest_user.age, 13)
        self.assertEquals(latest_user.gender, "f")

    def test_user_location_from_registration(self):
        session = UserSession.open(self.pconnection)
        session.respond("trigger 14 f")
        latest_user = User.objects.all().order_by("-id")[0]
        self.assertEquals(latest_user.governorate, 3)
        self.assertEquals(latest_user.district, 4)

    def test_junk_trigger_message(self):
        backend = PersistantBackend(slug="MockBackend1")
        backend.save()
        reporter = Reporter(alias="ReporterName1")
        reporter.save()
        pconnection = PersistantConnection(backend=backend, reporter=reporter, identity="1001")
        pconnection.save()
        session = UserSession.open(pconnection)

        self.assertEquals(session.respond("trigger junk"), TRIGGER_INCORRECT_MESSAGE)

    def test_junk_message(self):
        backend = PersistantBackend(slug="MockBackend1")
        backend.save()
        reporter = Reporter(alias="ReporterName1")
        reporter.save()
        pconnection = PersistantConnection(backend=backend, reporter=reporter, identity="1001")
        pconnection.save()
        session = UserSession.open(pconnection)

        self.assertEquals(session.respond("junk"), TRIGGER_INCORRECT_MESSAGE)
Exemple #18
0
# import os
#
# from django.conf import settings
# from django_tutorial import settings as django_tutorial
from poll.models import Question
import datetime
from django.utils import timezone
#
# settings.configure(default_settings=django_tutorial, DEBUG=True)
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_tutorial.settings')
future_question = Question(pub_date=timezone.now() +
                           datetime.timedelta(days=30))
future_question.was_published_recently()

# def test():
#     future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
#     future_question.was_published_recently()

# if __name__ == "__main__":
#     test()
Exemple #19
0
 def test_was_published_recently_with_future_question(self):
     time = timezone.now() + datetime.timedelta(days=30)
     future_question = Question(pub_date=time)
     self.assertIs(future_question.was_published_recently(), False)
Exemple #20
0
    return result_str


def random_para(lim_char):
    para = ""
    count = 0
    while count <= lim_char:
        i = random.randint(3, 8)
        count += i
        word = random_string(i)
        para = para + " " + word
    if len(para) > lim_char:
        para = para[:lim_char]
    return para.strip()


for i in range(30):
    title = random_para(50)
    desc = random_para(200)
    pub_date = timezone.now() - datetime.timedelta(days=random.randint(0, 10))
    featured = True if i % 2 == 0 else False

    q = Question(title=title, desc=desc,
                 pub_date=pub_date, featured=featured)
    q.save()

    for j in range(4):
        choice_text = random_para(100)
        votes = random.randint(0, 8)
        c = q.choice_set.create(choice_text=choice_text, votes=votes)