Пример #1
0
    def test_get_for_object(self):
        user = User.objects.create_user('john', '*****@*****.**',
                                        'johnpassword')
        event_relations = list(Event.objects.get_for_object(user, 'owner'))
        self.assertEqual(len(event_relations), 0)

        rule = Rule(frequency="DAILY")
        rule.save()
        cal = Calendar(name='MyCal')
        cal.save()
        event = self.__create_event(
            'event test',
            datetime.datetime(2013, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc), cal)
        event.save()
        events = list(Event.objects.get_for_object(user, 'owner'))
        self.assertEqual(len(events), 0)
        EventRelation.objects.save_relation(event, user, 'owner')

        self.assertEqual(len(list(event.eventrelation_set.all())), 1)

        events = list(Event.objects.get_for_object(user, 'owner'))
        self.assertEqual(len(events), 1)
        self.assertEqual(type(events[0]), TestSubEvent)
        self.assertEqual(event, events[0])
Пример #2
0
    def test_edge_case_events(self):
        cal = Calendar(name="MyCal")
        cal.save()

        data_1 = {
            'start': datetime.datetime(2013, 1, 5, 8, 0, tzinfo=timezone.utc),
            'end': datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            'calendar': cal,
        }

        data_2 = {
            'start': datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            'end': datetime.datetime(2013, 1, 5, 12, 0, tzinfo=timezone.utc),
            'calendar': cal
        }
        event_one = Event(**data_1)
        event_two = Event(**data_2)
        event_one.save()
        event_two.save()

        occurrences_two = event_two.get_occurrences(
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 12, 0, tzinfo=timezone.utc))
        self.assertEqual(1, len(occurrences_two))

        occurrences_one = event_one.get_occurrences(
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 12, 0, tzinfo=timezone.utc))

        self.assertEqual(0, len(occurrences_one))
Пример #3
0
    def test_recurring_event_get_occurrence(self):

        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()

        event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )
        event.save()

        occurrence = event.get_occurrence(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc))
        occurrence.save()
        self.assertEqual(occurrence.start,
                         datetime.datetime(2008, 1, 5, 8, tzinfo=timezone.utc))
        occurrence = event.get_occurrence(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc))
        self.assertTrue(occurrence.pk is not None)
Пример #4
0
    def test_recurring_event_get_occurrences_after_with_moved_occ(self):

        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()
        recurring_event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 1, 2, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 1, 3, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )

        recurring_event.save()
        occurrence = recurring_event.get_occurrence(
            datetime.datetime(2008, 1, 8, 2, 0, tzinfo=timezone.utc), True)
        occurrence.move(
            datetime.datetime(2008, 1, 15, 2, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 15, 3, 0, tzinfo=timezone.utc))
        occurrence2 = recurring_event.get_occurrence(
            datetime.datetime(2008, 1, 14, 8, 0, tzinfo=timezone.utc))
        self.assertEqual(occurrence, occurrence2)
        self.assertEqual(
            datetime.datetime(2008, 1, 15, 2, 0, tzinfo=timezone.utc),
            occurrence2.start)
Пример #5
0
 def setUp(self):
     rule = Rule(frequency="WEEKLY",
                 end_recurring_period=datetime.datetime(
                     2008, 5, 5, 0, 0, tzinfo=timezone.utc))
     rule.save()
     cal = Calendar(name="MyCal")
     cal.save()
     data = {
         'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
         'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
         'rule': rule,
         'calendar': cal
     }
     data2 = {
         'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
         'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
         'calendar': cal
     }
     recurring_event = Event(**data)
     recurring_event.save()
     singular_event = Event(**data2)
     singular_event.save()
     self.period = Period(events=Event.objects.source_events(),
                          start=datetime.datetime(2008,
                                                  1,
                                                  4,
                                                  7,
                                                  0,
                                                  tzinfo=timezone.utc),
                          end=datetime.datetime(2008,
                                                1,
                                                21,
                                                7,
                                                0,
                                                tzinfo=timezone.utc))
Пример #6
0
    def test_recurring_event_get_occurrences(self):

        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()

        recurring_event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )
        recurring_event.save()

        occurrences = recurring_event.get_occurrences(
            start=datetime.datetime(2008, 1, 12, 0, 0, tzinfo=timezone.utc),
            end=datetime.datetime(2008, 1, 20, 0, 0, tzinfo=timezone.utc))

        self.assertEqual(
            ["%s to %s" % (o.start, o.end) for o in occurrences], [
                '2008-01-12 08:00:00+00:00 to 2008-01-12 09:00:00+00:00',
                '2008-01-19 08:00:00+00:00 to 2008-01-19 09:00:00+00:00'
            ])
Пример #7
0
    def test_event_get_occurrences(self):

        cal = Calendar(name="MyCal")
        cal.save()
        event_outside = self.__create_event(
            datetime.datetime(2013, 1, 5, 7, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc), cal)
        event_partly = self.__create_event(
            datetime.datetime(2013, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 10, 0, tzinfo=timezone.utc), cal)
        event_inside = self.__create_event(
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 11, 0, tzinfo=timezone.utc), cal)
        event_outside.save()
        event_partly.save()
        event_inside.save()
        test_window = [
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 12, 0, tzinfo=timezone.utc)
        ]

        occurrences_outside = event_outside.get_occurrences(*test_window)
        self.assertEqual(0, len(occurrences_outside))

        occurrences_partly = event_partly.get_occurrences(*test_window)
        self.assertEqual(1, len(occurrences_partly))

        occurrences_inside = event_inside.get_occurrences(*test_window)
        self.assertEqual(1, len(occurrences_inside))
Пример #8
0
def create_course(request):
    """ Add a course to the calendar belonging to the school
    in which the current user is enrolled in"""

    # Like before, get the request's context.
    context = RequestContext(request)
    course_added = False

    user = request.user
    profile = get_profile(user)

    if 'Instructor' in profile[1]:
        school = UserProfile.objects.get(user=user).school
        if not school:
            return render_permission_denied(
                context, 'create courses. Enrol in a school first.')
    else:
        #return HttpResponse("You don't have permission to create courses!")
        return render_permission_denied(context, 'create courses')
    # If it's a HTTP POST, we're interested in processing form data.
    if request.method == 'POST':

        # Attempt to grab information from the raw form information.
        course_form = CourseForm(data=request.POST)
        if course_form.is_valid():
            # Save the event's form data to the database.
            course = course_form.save(commit=False)
            course.school = school
            course.creator = user

            # Add the personal calendar for the user
            calendar = Calendar(name=course.code + " Calendar")
            calendar.save()
            course.cal = calendar

            course.save()

            course_added = True
        # Invalid form or forms - mistakes or something else?
        # Print problems to the terminal.
        # They'll also be shown to the user.
        else:
            print course_form.errors

    # Not a HTTP POST, so we render our form using the EventForm.
    # These forms will be blank, ready for user input.
    else:
        course_form = CourseForm()

    # Render the template depending on the context.
    return render_to_response(
        'school/create_course.html', {
            'course_form': course_form,
            'user': user,
            'course_added': course_added,
            'school': school
        }, context)
Пример #9
0
 def test_event_by_slug(self):
     cal = Calendar(name='MyCal')
     cal.save()
     start = timezone.now() + datetime.timedelta(days=1)
     event = self.__create_event(start, start + datetime.timedelta(hours=1),
                                 cal)
     event.save()
     occurrence = Event.objects.get(slug="1")
     self.assertEqual(occurrence.start, start)
Пример #10
0
    def test_event_get_ocurrence(self):

        cal = Calendar(name='MyCal')
        cal.save()
        start = timezone.now() + datetime.timedelta(days=1)
        event = self.__create_event(start, start + datetime.timedelta(hours=1),
                                    cal)
        event.save()
        occurrence = event.get_occurrence(start)
        self.assertEqual(occurrence.start, start)
Пример #11
0
 def test_occurrences_after_with_events_after_returns_events(self):
     calendar = Calendar(name="DEBUG")
     calendar.save()
     start_after = timezone.now() + datetime.timedelta(days=1)
     end_after = start_after + datetime.timedelta(hours=1)
     event = self.__create_event(start_after, end_after)
     calendar.events.add(event)
     occurrences = list(calendar.occurrences_after(timezone.now()))
     self.assertEqual(len(occurrences), 1)
     self.assertEqual(occurrences[0].start, start_after)
     self.assertEqual(occurrences[0].end, end_after)
Пример #12
0
 def test_simple_event_slug_value(self):
     cal = Calendar(name="MyCal")
     cal.save()
     event = self.__create_event(
         datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
         datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
         cal,
     )
     self.assertEqual(event.slug, None)
     event.save()
     self.assertEqual(event.pk, 1)
     self.assertEqual(event.slug, '1-2008-01-05-08-00+0000')
Пример #13
0
    def test_occurrence_by_slug(self):
        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()

        event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )
        event.save()

        occurrence = Event.objects.get(
            slug="%i-%s" %
            (event.pk,
             datetime.datetime(2008, 1, 12, 8, 0, tzinfo=timezone.utc
                               ).strftime('%Y-%m-%d-%H-%M%z')))
        self.assertEqual(
            occurrence.start,
            datetime.datetime(2008, 1, 12, 8, tzinfo=timezone.utc))

        occurrence2 = Event.objects.get(
            slug="%i-%s" %
            (event.pk,
             datetime.datetime(2008, 1, 13, 8, 0, tzinfo=timezone.utc
                               ).strftime('%Y-%m-%d-%H-%M%z')))
        self.assertEqual(
            occurrence2.start,
            datetime.datetime(2008, 1, 19, 8, tzinfo=timezone.utc))

        filtered1 = Event.objects.filter(
            slug="%i-%s" %
            (event.pk,
             datetime.datetime(2008, 1, 12, 8, 0, tzinfo=timezone.utc
                               ).strftime('%Y-%m-%d-%H-%M%z')))
        #can we avoid inifinite recursion?
        filtered1._fetch_all()
        self.assertEqual(
            filtered1[0].start,
            datetime.datetime(2008, 1, 12, 8, tzinfo=timezone.utc))

        filtered2 = Event.objects.filter(
            slug="%i-%s" %
            (event.pk,
             datetime.datetime(2008, 1, 13, 8, 0, tzinfo=timezone.utc
                               ).strftime('%Y-%m-%d-%H-%M%z')))
        self.assertEqual(
            filtered2[0].start,
            datetime.datetime(2008, 1, 19, 8, tzinfo=timezone.utc))
Пример #14
0
    def test_occurences_after_with_no_params(self):

        cal = Calendar(name='MyCal')
        cal.save()
        start = timezone.now() + datetime.timedelta(days=1)
        event = self.__create_event(start, start + datetime.timedelta(hours=1),
                                    cal)
        event.save()
        occurrences = list(event.occurrences_after())
        self.assertEqual(len(occurrences), 1)
        self.assertEqual(occurrences[0].start, start)
        self.assertEqual(occurrences[0].end,
                         start + datetime.timedelta(hours=1))
Пример #15
0
    def test_occurences_with_recurrent_event_end_recurring_period_edge_case(
            self):

        start = timezone.now() + datetime.timedelta(days=1)
        cal = Calendar(name='MyCal')
        cal.save()
        rule = Rule(frequency="DAILY",
                    end_recurring_period=start + datetime.timedelta(days=10))
        rule.save()
        event = self.__create_recurring_event(
            start, start + datetime.timedelta(hours=1), rule, cal)
        event.save()
        occurrences = list(event.occurrences_after())
        self.assertEqual(len(occurrences), 11)
Пример #16
0
    def test_prevent_TypeError_when_comparing_dates_when_tz_off(self):
        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(2008, 5, 5, 0, 0))
        rule.save()

        event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0),
            datetime.datetime(2008, 1, 5, 9, 0),
            rule,
            cal,
        )
        naive_date = datetime.datetime(2008, 1, 20, 0, 0)
        self.assertIsNone(event.get_occurrence(naive_date, True))
Пример #17
0
 def setUp(self):
     rule = Rule(frequency="WEEKLY",
                 end_recurring_period=datetime.datetime(
                     2008, 5, 5, 0, 0, tzinfo=timezone.utc))
     rule.save()
     cal = Calendar(name="MyCal")
     cal.save()
     data = {
         'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
         'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
         'rule': rule,
         'calendar': cal
     }
     self.recurring_event = Event(**data)
     self.recurring_event.save()
Пример #18
0
 def test_event_inheritence(self):
     cal = Calendar(name="MyCal")
     cal.save()
     event = self.__create_event(
         "Heeello!", datetime.datetime(2013,
                                       1,
                                       5,
                                       8,
                                       0,
                                       tzinfo=timezone.utc),
         datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc), cal)
     event.save()
     occ = event.get_occurrences(
         datetime.datetime(2013, 1, 5, 8, 0, tzinfo=timezone.utc),
         datetime.datetime(2014, 1, 5, 8, 0, tzinfo=timezone.utc))
     self.assertEqual(1, len(occ))
Пример #19
0
    def test_recurring_event_slug_value(self):
        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()

        event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )
        self.assertEqual(event.slug, None)
        event.save()
        self.assertEqual(event.slug, '1-2008-01-05-08-00+0000')
Пример #20
0
    def test_subclassing_queryset(self):
        cal = Calendar(name="MyCal")
        cal.save()
        event = self.__create_event(
            "Heeello!", datetime.datetime(2013,
                                          1,
                                          5,
                                          8,
                                          0,
                                          tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc), cal)
        event.save()
        ev = Event.objects.filter(pk=1)[0]
        self.assertTrue(isinstance(ev, TestSubEvent))

        newev = Event.objects.get(pk=1)
        testev = newev.as_leaf_class()
        self.assertEqual(testev, ev)
Пример #21
0
 def test_get_calendar_for_object(self):
     calendar = Calendar(name='My Cal')
     calendar.save()
     rule = Rule()
     rule.save()
     calendar.create_relation(rule)
     result = Calendar.objects.get_calendar_for_object(rule)
     self.assertEqual(result.name, 'My Cal')
Пример #22
0
    def test_recurring_event_get_occurrences_2(self):
        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2013, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()
        rule2 = Rule(frequency="WEEKLY",
                     end_recurring_period=datetime.datetime(
                         2013, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule2.save()

        recurring_partly = self.__create_recurring_event(
            datetime.datetime(2012, 12, 29, 11, 0, tzinfo=timezone.utc),
            datetime.datetime(2012, 12, 29, 13, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )
        recurring_outside = self.__create_recurring_event(
            datetime.datetime(2012, 12, 29, 13, 0, tzinfo=timezone.utc),
            datetime.datetime(2012, 12, 29, 14, 0, tzinfo=timezone.utc),
            rule2,
            cal,
        )

        recurring_outside.save()
        recurring_partly.save()

        test_window = [
            datetime.datetime(2013, 1, 5, 9, 0, tzinfo=timezone.utc),
            datetime.datetime(2013, 1, 5, 12, 0, tzinfo=timezone.utc)
        ]

        recurrences_partly = recurring_partly.get_occurrences(*test_window)
        self.assertEqual(1, len(recurrences_partly))

        recurrences_outside = recurring_outside.get_occurrences(*test_window)
        self.assertEqual(0, len(recurrences_outside))
Пример #23
0
    def test_recurring_event_get_occurrences_after(self):

        cal = Calendar(name="MyCal")
        cal.save()
        rule = Rule(frequency="WEEKLY",
                    end_recurring_period=datetime.datetime(
                        2008, 5, 5, 0, 0, tzinfo=timezone.utc))
        rule.save()
        recurring_event = self.__create_recurring_event(
            datetime.datetime(2008, 1, 5, 8, 0, tzinfo=timezone.utc),
            datetime.datetime(2008, 1, 5, 9, 0, tzinfo=timezone.utc),
            rule,
            cal,
        )

        recurring_event.save()
        occurrences = recurring_event.get_occurrences(
            start=datetime.datetime(2008, 1, 5, tzinfo=timezone.utc),
            end=datetime.datetime(2008, 1, 6, tzinfo=timezone.utc))
        occurrence = occurrences[0]
        occurrence2 = next(
            recurring_event.occurrences_after(
                datetime.datetime(2008, 1, 5, tzinfo=timezone.utc)))
        self.assertEqual(occurrence, occurrence2)
Пример #24
0
 def setUp(self):
     cal = Calendar(name="MyCal")
     cal.save()
def registration(request):
    # Like before, get the request's context.
    context = RequestContext(request)

    # A boolean value for telling the template whether the registration was successful.
    # Set to False initially. Code changes value to True when registration succeeds.
    registered = False

    # If it's a HTTP POST, we're interested in processing form data.
    if request.method == 'POST':
        # Attempt to grab information from the raw form information.
        # Note that we make use of both UserForm and UserProfileForm.
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileForm(data=request.POST)
        user_type_form = UserTypeForm(data=request.POST)

        # If the two forms are valid...
        if user_form.is_valid() and profile_form.is_valid(
        ) and user_type_form.is_valid():
            # Save the user's form data to the database.
            user = user_form.save()

            # Now we hash the password with the set_password method.
            # Once hashed, we can update the user object.
            user.set_password(user.password)
            user.save()
            nickname = profile_form.cleaned_data['nickname']

            # Now sort out the Student instance.
            # Since we need to set the user attribute ourselves, we set commit=False.
            # This delays saving the model until we're ready to avoid integrity problems.

            user_type = user_type_form.cleaned_data['user_type']
            user_type = int(user_type)
            #user_type = 1
            if user_type:
                profile = Student(nickname=nickname)
            else:
                profile = Instructor(nickname=nickname)
            profile.user = user

            # Add the personal calendar for the user
            calendar = Calendar(name=user.username + "'s personal calendar")
            calendar.save()
            profile.cal = calendar
            profile.school = None
            # Now we save the Student model instance.
            profile.save()

            # Update our variable to tell the template registration was successful.
            registered = True

        # Invalid form or forms - mistakes or something else?
        # Print problems to the terminal.
        # They'll also be shown to the user.
        else:
            print user_form.errors, profile_form.errors, user_type_form.errors

    # Not a HTTP POST, so we render our form using two ModelForm instances.
    # These forms will be blank, ready for user input.
    else:
        user_form = UserForm()
        profile_form = UserProfileForm()
        user_type_form = UserTypeForm()

    # Render the template depending on the context.
    return render_to_response(
        'main/register.html', {
            'user_form': user_form,
            'profile_form': profile_form,
            'user_type_form': user_type_form,
            'registered': registered
        }, context)
Пример #26
0
 def test_get_calendar_for_object_with_more_than_one_calendar(self):
     calendar_1 = Calendar(name='My Cal 1')
     calendar_1.save()
     calendar_2 = Calendar(name='My Cal 2')
     calendar_2.save()
     rule = Rule()
     rule.save()
     calendar_1.create_relation(rule)
     calendar_2.create_relation(rule)
     with self.assertRaises(AssertionError):
         result = Calendar.objects.get_calendar_for_object(rule)
Пример #27
0
 def test_occurrences_after_without_events_is_empty(self):
     calendar = Calendar()
     self.assertEqual(
         list(calendar.occurrences_after(datetime.datetime.min)), [])