def test_due_date(self): self.assertEquals(self.i1.compute_due_date(), self.today + datetime.timedelta(days=1)) weekly_goal_text = "Do a timed mile run every week" weekly_goal = Goal() weekly_goal.user = self.user weekly_goal.parse(weekly_goal_text) weekly_goal.save() instance = ScheduledInstance(goal=weekly_goal, date=self.today) self.assertEquals(instance.compute_due_date(), self.today + datetime.timedelta(weeks=1)) byday_goal_text = "Do something every tuesday and thursday" byday_goal = Goal() byday_goal.user = self.user byday_goal.parse(byday_goal_text) byday_goal.save() byday_goal.create_scheduled_instances(self.today - datetime.timedelta(weeks=1), 5) byday_instance = byday_goal.scheduledinstance_set.all()[0] self.assertEquals(byday_instance.compute_due_date(), byday_instance.date + datetime.timedelta(days=1)) bymonthday_goal_text = "Pay rent every first of the month" bymonth_goal = Goal() bymonth_goal.user = self.user bymonth_goal.parse(bymonthday_goal_text) bymonth_goal.save() bymonth_goal.create_scheduled_instances(self.today, 5) bymonth_instance = bymonth_goal.scheduledinstance_set.all()[0] self.assertEquals(bymonth_instance.compute_due_date(), bymonth_instance.date + datetime.timedelta(days=1))
def new_goal(request): error_message = None try: goal_text = request.POST['goal_text'] g = Goal() g.user = request.user try: g.parse(goal_text) except Exception: messages.error(request, "Invalid goal. Please enter a correctly formatted goal.") return HttpResponseRedirect(reverse("habits.views.main")) g.save() g.create_scheduled_instances(Goal.beginning_today(request.user), 5) return HttpResponseRedirect(reverse("habits.views.main")) except KeyError: error_message = "Please enter a valid goal" return render_to_response("main.html", standard_data(request, error_message), context_instance=RequestContext(request))
def test_splitting_input(self): goal = Goal() goal.user = self.user goal.parse("2 hours of studying every day") self.assertEqual(goal.creation_text, "2 hours of studying every day") self.assertEqual(goal.description, "2 hours of studying") self.assertEqual(goal.rrule, 'DTSTART:' + self.today.strftime("%Y%m%d") + '\nRRULE:FREQ=DAILY;INTERVAL=1') self.assertEqual(goal.dtstart, Goal.beginning_today(self.user)) self.assertEqual(goal.freq, "daily") self.assertEqual(goal.byday, None)
def test_day_string(self): self.assertEquals(self.simple_goal.day_string(), "Every day") weekday_goal = Goal() weekday_goal.user = self.user weekday_goal.parse("Pet a kitty every weekday") self.assertEquals(weekday_goal.day_string(), "Weekdays") self.assertEquals(self.byday_goal.day_string(), "Monday, Wednesday, Friday") interval_goal = Goal() interval_goal.user = self.user interval_goal.user = self.user interval_goal.parse("Pet a kitty every other day") self.assertEquals(interval_goal.day_string(), "Every other day") interval_goal2 = Goal() interval_goal2.user = self.user interval_goal2.parse("Pet a kitty every 3 days") self.assertEquals(interval_goal2.day_string(), "Every 3 days") weekly_goal = Goal() weekly_goal.user = self.user weekly_goal.parse("do a thing every week") self.assertEquals(weekly_goal.day_string(), "Every week") bymonthday_goal_text = "Pay rent every first of the month" bymonth_goal = Goal() bymonth_goal.user = self.user bymonth_goal.parse(bymonthday_goal_text) self.assertEquals(bymonth_goal.day_string(), "Every month (day 1)")
def test_complain_invalid_input(self): """ Tests that parsing complains on invalid input. """ goal = Goal() goal.user = self.user self.assertRaises(InvalidInput, goal.parse, "Herp a derp on Monday") self.assertRaises(InvalidInput, goal.parse, "Do something every hour") self.assertRaises(InvalidInput, goal.parse, "Do something every minute") self.assertRaises(InvalidInput, goal.parse, "Do something every second") self.assertRaises(InvalidInput, goal.parse, "Go to the doctor once a decade")
def test_international_user_goal_creation(self): intl_user = User(username="******", password="******") intl_user.save() profile = intl_user.userprofile profile.timezone = 'Europe/London' profile.save() intl_goal_text = "Do a thing every day" intl_goal = Goal() intl_goal.user = intl_user intl_goal.parse(intl_goal_text) intl_goal.save() intl_goal.create_scheduled_instances(timezone.now(), 5) print "intl_goal due_date =", intl_goal.scheduledinstance_set.all()[0].due_date self.assertEquals(intl_goal.scheduledinstance_set.all()[0].due_date.hour, 0)
def test_parse_incremental_goal(self): """ Tests parsing goals like 'go to the gym 3 times every week'. """ incremental_goal = Goal() incremental_goal.user = self.user incremental_goal.parse("Go to the gym 3 times every week") incremental_goal.save() self.assertEqual(incremental_goal.creation_text, "Go to the gym 3 times every week") self.assertEqual(incremental_goal.description, "Go to the gym 3 times") self.assertEqual(incremental_goal.rrule, 'DTSTART:' + self.today.strftime("%Y%m%d") + '\nRRULE:FREQ=WEEKLY;INTERVAL=1') self.assertEqual(incremental_goal.dtstart, self.today) self.assertEqual(incremental_goal.freq, "weekly") self.assertEqual(incremental_goal.byday, None) self.assertEqual(incremental_goal.incremental, True) self.assertEqual(incremental_goal.goal_amount, 3) incremental_goal.create_scheduled_instances(self.today, 1) instance = incremental_goal.scheduledinstance_set.all()[0] self.assertEqual(instance.current_progress, 0) self.assertEqual(instance.completed, False) instance.progress() self.assertEqual(instance.current_progress, 1) instance.progress() instance.progress() self.assertEqual(instance.current_progress, 3) self.assertEqual(instance.completed, True)