Beispiel #1
0
 def setUp(self):
     """
     3 Users and 3 Courses are created
     """
     self.user1 = UserFactory(email='*****@*****.**',
                              username='******',
                              first_name='vorname1',
                              last_name='nachname1')
     self.user2 = UserFactory(email='*****@*****.**',
                              username='******',
                              first_name='vorname2',
                              last_name='nachname2')
     self.user3 = UserFactory(email='*****@*****.**',
                              username='******',
                              first_name='vorname3',
                              last_name='nachname3')
     self.course1 = CourseFactory(slug='slug1')
     self.course2 = CourseFactory(slug='slug2')
     self.course3 = CourseFactory(slug='slug3')
     self.courseevent1 = CourseEventFactory(slug='slug1',
                                            course=self.course1)
     self.courseevent2 = CourseEventFactory(slug='slug2',
                                            course=self.course2)
     self.courseevent3 = CourseEventFactory(slug='slug3',
                                            course=self.course1)
     self.ownership1 = CourseOwner(course=self.course1, user=self.user1)
     self.ownership1.save()
     self.ownership2 = CourseOwner(course=self.course1, user=self.user2)
     self.ownership2.save()
     self.ownership3 = CourseOwner(course=self.course2, user=self.user2)
     self.ownership3.save()
     self.participation1 = CourseEventParticipation(
         courseevent=self.courseevent1, user=self.user1)
     self.participation1.save()
     self.participation2 = CourseEventParticipation(
         courseevent=self.courseevent3, user=self.user1)
     self.participation2.save()
     self.participation3 = CourseEventParticipation(
         courseevent=self.courseevent2, user=self.user3)
     self.participation3.save()
     self.participation4 = CourseEventParticipation(
         courseevent=self.courseevent3, user=self.user3)
     self.participation4.save()
Beispiel #2
0
    def setUp(self):
        """
        Courses are created:
        --------------------
        course1: "Course 1" slug: "course1"
        course2: "Course 2" slug: "course2"

        Users are created:
        ------------------
        testuser1: "firstname1 lastname1" "username1" "*****@*****.**"
        testuser2: "firstname2 lastname2" "username2" "*****@*****.**"
        testuser3: "firstname3 lastname3" "username3" "*****@*****.**"
        testuser4: is_superuser "username4" "*****@*****.**"

        CourseOwnerships are created
        -----------------------------
        ownership1: testuser1 for course1: display, display_nr=1
        ownership2: testuser2 for course1: display=False, display_nr=2
        ownership3: testuser3 for course2:
        """
        # client
        self.client = Client()

        # create site
        self.domain = '127.0.0.1:8000'
        self.site = SiteFactory.create(name='localhost', domain=self.domain)

        # create courses
        self.course_slug1 = "course1"
        self.course1 = CourseFactory.create(title="Course 1", slug=self.course_slug1)
        self.course_slug2 = "course2"
        self.course2 = CourseFactory.create(title="Course 2", slug=self.course_slug2)

        # create users
        self.email1 = "*****@*****.**"
        self.email2 = "*****@*****.**"
        self.email3 = "*****@*****.**"
        self.user1 = get_user_model().objects.create(
            username='******',
            first_name="firstname1",
            last_name="lastname1",
            email=self.email1)
        self.user2 = get_user_model().objects.create(
            username='******',
            first_name="firstname2",
            last_name="lastname2",
            email=self.email2)
        self.user3 = get_user_model().objects.create(
            username='******',
            first_name="firstname3",
            last_name="lastname3",
            email="*****@*****.**")
        self.user4 = get_user_model().objects.create(
            username='******',
            is_superuser=True,
            email="*****@*****.**")

        # create ownerships
        self.ownership1 = CourseOwner(course=self.course1, user=self.user1,
                                 display_nr=1, display=True)
        self.ownership1.save()
        self.ownership2 = CourseOwner(course=self.course1, user=self.user2,
                                 display_nr=2, display=False)
        self.ownership2.save()
        self.ownership3 = CourseOwner(course=self.course2, user=self.user3,
                                 display_nr=1, display=True)
        self.ownership3.save()
Beispiel #3
0
class CourseandCourseOwnerTest(TestCase):
    """
    Test the methods and attributes and querysets of course and courseowner:
    """
    def setUp(self):
        """
        Courses are created:
        --------------------
        course1: "Course 1" slug: "course1"
        course2: "Course 2" slug: "course2"

        Users are created:
        ------------------
        testuser1: "firstname1 lastname1" "username1" "*****@*****.**"
        testuser2: "firstname2 lastname2" "username2" "*****@*****.**"
        testuser3: "firstname3 lastname3" "username3" "*****@*****.**"
        testuser4: is_superuser "username4" "*****@*****.**"

        CourseOwnerships are created
        -----------------------------
        ownership1: testuser1 for course1: display, display_nr=1
        ownership2: testuser2 for course1: display=False, display_nr=2
        ownership3: testuser3 for course2:
        """
        # client
        self.client = Client()

        # create site
        self.domain = '127.0.0.1:8000'
        self.site = SiteFactory.create(name='localhost', domain=self.domain)

        # create courses
        self.course_slug1 = "course1"
        self.course1 = CourseFactory.create(title="Course 1", slug=self.course_slug1)
        self.course_slug2 = "course2"
        self.course2 = CourseFactory.create(title="Course 2", slug=self.course_slug2)

        # create users
        self.email1 = "*****@*****.**"
        self.email2 = "*****@*****.**"
        self.email3 = "*****@*****.**"
        self.user1 = get_user_model().objects.create(
            username='******',
            first_name="firstname1",
            last_name="lastname1",
            email=self.email1)
        self.user2 = get_user_model().objects.create(
            username='******',
            first_name="firstname2",
            last_name="lastname2",
            email=self.email2)
        self.user3 = get_user_model().objects.create(
            username='******',
            first_name="firstname3",
            last_name="lastname3",
            email="*****@*****.**")
        self.user4 = get_user_model().objects.create(
            username='******',
            is_superuser=True,
            email="*****@*****.**")

        # create ownerships
        self.ownership1 = CourseOwner(course=self.course1, user=self.user1,
                                 display_nr=1, display=True)
        self.ownership1.save()
        self.ownership2 = CourseOwner(course=self.course1, user=self.user2,
                                 display_nr=2, display=False)
        self.ownership2.save()
        self.ownership3 = CourseOwner(course=self.course2, user=self.user3,
                                 display_nr=1, display=True)
        self.ownership3.save()

    def test_course_property_teachersrecord(self):
        """
        apps_data.course.models.course
        model: Course, method: teachersrecord
        -------------------------------------
        Teachers should be shown as a record of names
        with main teacher appearing first
        """
        self.assertEqual(self.course1.teachersrecord,
                         "firstname1 lastname1 und firstname2 lastname2")

    def test_course_property_teachers(self):
        """
        apps_data.course.models.course
        model: Course, method: teachers
        -----------------------------------
        expected: owners as queryset in the appropriate order
        """
        self.assertQuerysetEqual(self.course1.teachers,
                                 [repr(self.user1), repr(self.user2)])
        self.assertQuerysetEqual(self.course2.teachers,
                                 [repr(self.user3)])

    def test_course_method_is_owner(self):
        """
        apps_data.course.models.course
        model: Course, method: is_owner(user)
        ---------------------------------------
        True if user is a teacher
        """
        self.assertEqual(self.course1.is_owner(self.user1), True)
        self.assertEqual(self.course1.is_owner(self.user2), True)
        self.assertEqual(self.course1.is_owner(self.user3), False)

    def test_course_method_get_absolute_url(self):
        """
        apps_data.course.models.course
        model: Course, method: get_absolute_url
        ---------------------------------------
        test absolute_url of course
        """
        url = self.course1.get_absolute_url()
        self.assertEqual(url, '/de/course1/kursvorbereitung/vorlage/')

    def test_courseownermanager_qs_teachers_courseinfo_display(self):
        """
        apps_data.course.models.course
        CourseOwner.objects.teachers_courseeinfo_display
        --------------------------------
        expected ownership records for the teachers whoes profiles should be
        displayed on the public page of the course
        """
        courseowners_qs = CourseOwner.objects.\
            teachers_courseinfo_display(self.course1)
        self.assertQuerysetEqual(courseowners_qs, [repr(self.ownership1)])

    def test_courseownermanager_qs_teachers_courseinfo_all(self):
        """
        apps_data.course.models.course
        model: CourseOwner, manager_method: teachers_courseeinfo_all
        ------------------------------------------------------------
        expected ownership records of all teachers of the course
        """
        courseowners_qs = CourseOwner.objects.\
            teachers_courseinfo_all(self.course1)
        self.assertQuerysetEqual(courseowners_qs, [repr(self.ownership1),
                                                   repr(self.ownership2)])

    def test_courseownermanager_qs_teachers_emails(self):
        """
        apps_data.course.models.course
        model: CourseOwner, manager_method: teachers_emails
        ----------------------------------------------------
        expected flat list of emails of all teachers of the course
        expected: user 1
        """
        courseowners_qs = CourseOwner.objects.\
            teachers_emails(self.course1)
        self.assertQuerysetEqual(courseowners_qs, [repr(self.email1),
                                                   repr(self.email2)])

    def test_courseownermanager_qs_other_teachers_for_display(self):
        """
        apps_data.course.models.course
        model: CourseOwner, manager_method: other_teachers_for_display
        ----------------------------------------------------------------
        expected return ownershiprecords of teachers other then the given
        user, that will be displayed on the public page of the course.
        """
        courseowners_qs = CourseOwner.objects.\
            other_teachers_for_display(self.course1, self.user2)
        self.assertQuerysetEqual(courseowners_qs, [repr(self.ownership1)])
        courseowners_qs = CourseOwner.objects.\
            other_teachers_for_display(self.course2, self.user3)
        self.assertQuerysetEqual(courseowners_qs, [])

    def test_foto_location(self):
        """
        apps_data.course.models.course
        function: foto_location
        --------------------------------
        foto  is stored in the directory with course slug under its filename
        expected:  <course-slug>/<filename>
        """
        instance = self.ownership1
        filename = 'filename'
        foto_location(instance, filename)
        self.assertEqual(foto_location(instance, filename), 'course1/filename')

    def test_courseowner_method_clean(self):
        """
        apps_data.course.models.course
        model: CourseOwner,  method: clean
        --------------------------------
        test clean method of model CourseOwner
        expected: one teacher of the course must be displayed on the public
        page
        """
        self.ownership1.display = False
        self.assertRaises(ValidationError, self.ownership1.clean)

    def test_course_unicode(self):
        """
        apps_data.course.models.course
        model: Course,  method: __unicode__
        --------------------------------------
        self representation of Course
        """
        self.assertEqual(repr(self.course1), '<Course: Course 1>')

    def test_courseowner_unicode(self):
        """
        apps_data.course.models.course
        model: CourseOwner,  method: __unicode__
        ------------------------------------------
        self representation of CourseOwner
        """
        self.assertEqual(repr(self.ownership1), '<CourseOwner: Course 1 testuser1>')

    def test_auth_mixin_coursebackend(self):
        """
        apps_internal.coursebackend.views.mixins.base
        class: AuthMixin method:test_func(user):
        -----------------------------------------
        expected: only owners and the superuser are allowed. In these
        cases the function returns True, otherwise it returns False.
        """
        self.client.login(username='******', password='******')
        url = reverse('coursebackend:course:detail',
                      kwargs={'course_slug': self.course_slug1})
        self.assertEqual(url,'/de-de/course1/kursvorbereitung/vorlage/')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
Beispiel #4
0
class CustomUserModelTest(TestCase):
    """
    Test the Custom User Model
    """
    def setUp(self):
        """
        3 Users and 3 Courses are created
        """
        self.user1 = UserFactory(email='*****@*****.**',
                                 username='******',
                                 first_name='vorname1',
                                 last_name='nachname1')
        self.user2 = UserFactory(email='*****@*****.**',
                                 username='******',
                                 first_name='vorname2',
                                 last_name='nachname2')
        self.user3 = UserFactory(email='*****@*****.**',
                                 username='******',
                                 first_name='vorname3',
                                 last_name='nachname3')
        self.course1 = CourseFactory(slug='slug1')
        self.course2 = CourseFactory(slug='slug2')
        self.course3 = CourseFactory(slug='slug3')
        self.courseevent1 = CourseEventFactory(slug='slug1',
                                               course=self.course1)
        self.courseevent2 = CourseEventFactory(slug='slug2',
                                               course=self.course2)
        self.courseevent3 = CourseEventFactory(slug='slug3',
                                               course=self.course1)
        self.ownership1 = CourseOwner(course=self.course1, user=self.user1)
        self.ownership1.save()
        self.ownership2 = CourseOwner(course=self.course1, user=self.user2)
        self.ownership2.save()
        self.ownership3 = CourseOwner(course=self.course2, user=self.user2)
        self.ownership3.save()
        self.participation1 = CourseEventParticipation(
            courseevent=self.courseevent1, user=self.user1)
        self.participation1.save()
        self.participation2 = CourseEventParticipation(
            courseevent=self.courseevent3, user=self.user1)
        self.participation2.save()
        self.participation3 = CourseEventParticipation(
            courseevent=self.courseevent2, user=self.user3)
        self.participation3.save()
        self.participation4 = CourseEventParticipation(
            courseevent=self.courseevent3, user=self.user3)
        self.participation4.save()

    def test_get_short_name(self):
        """
        The shortname of a User is his first name: user1 has shortname vorname1
        """
        self.assertEquals(self.user1.get_short_name(), 'vorname1')

    def test_get_full_name(self):
        """
        The fullname of a User is his firstname and his lastname seperated by a
        blank
        """
        self.assertEquals(self.user1.get_full_name(), 'vorname1 nachname1')

    def test_teaching(self):
        """
        What Courses does a user teach?
        user1 teaches course1
        user2 teaches course1 and course2
        user3 teaches nothing
        """
        self.assertQuerysetEqual(self.user1.teaching(), [repr(self.course1)],
                                 ordered=False)
        self.assertQuerysetEqual(
            self.user2.teaching(),
            [repr(self.course1), repr(self.course2)],
            ordered=False)
        self.assertQuerysetEqual(self.user3.teaching(), [], ordered=False)

    def test_studying(self):
        """
        What Courses does a user study?
        user1 studies courseevent1 and courseevent3
        user2 studies nothing
        user3 studies courseevent2 and courseevent3
        """
        self.assertQuerysetEqual(
            self.user1.studying(),
            [repr(self.courseevent1),
             repr(self.courseevent3)],
            ordered=False)
        self.assertQuerysetEqual(self.user2.studying(), [], ordered=False)
        self.assertQuerysetEqual(
            self.user3.studying(),
            [repr(self.courseevent2),
             repr(self.courseevent3)],
            ordered=False)

    def test_create_user(self):
        """
        create a regular user with username, email, first and lastname.
        Check whether the databasecount of users is raised one afterwards.
        Check alos that the user is created without special permissions
        """
        usercount = User.objects.all().count()
        User.objects.create_user(username='******',
                                 email='*****@*****.**',
                                 first_name='vorname4',
                                 last_name='nachname4',
                                 password=None)
        usercount_after = usercount + 1
        self.assertEquals(User.objects.all().count(), usercount_after)
        user = User.objects.get(username='******')
        self.assertEquals(user.is_lektor, False)
        self.assertEquals(user.is_superuser, False)
        self.assertEquals(user.is_teacher, False)
        self.assertEquals(user.is_staff, False)
        self.assertEquals(user.is_student, False)

    def test_create_user_username_required(self):
        """
        creating user without username should not be allowed
        """
        with self.assertRaises(ValueError):
            User.objects.create_user(email='*****@*****.**',
                                     username='',
                                     first_name='vorname5',
                                     last_name='nachname5',
                                     password=None)

    def test_create_user_email_required(self):
        """
        creating user without email is not allowed
        """
        with self.assertRaises(ValueError):
            User.objects.create_user(username='******',
                                     email='',
                                     first_name='vorname5',
                                     last_name='nachname5',
                                     password=None)

    def test_no_double_user_email(self):
        with self.assertRaises(IntegrityError):
            User.objects.create_user(username='******',
                                     email='*****@*****.**',
                                     first_name='vorname5',
                                     last_name='nachname5',
                                     password=None)

    def test_no_double_username(self):
        with self.assertRaises(IntegrityError):
            User.objects.create_user(username='******',
                                     email='*****@*****.**',
                                     first_name='vorname5',
                                     last_name='nachname5',
                                     password=None)
Beispiel #5
0
    def setUp(self):
        """
        Courses are created:
        --------------------
        course1: "Course 1" slug: "course1"
        course2: "Course 2" slug: "course2"

        Users are created:
        ------------------
        testuser1: "firstname1 lastname1" "username1" "*****@*****.**"
        testuser2: "firstname2 lastname2" "username2" "*****@*****.**"
        testuser3: "firstname3 lastname3" "username3" "*****@*****.**"
        testuser4: "firstname4 lastname4" "username4" "*****@*****.**"
        testuser5: "firstname5 lastname5" "username5" "*****@*****.**"
        testuser6: "firstname6 lastname6" "username6" "*****@*****.**"

        CourseOwnerships are created
        -----------------------------
        ownership1: testuser1 for course1:
        ownership2: testuser2 for course1:
        ownership3: testuser3 for course2:

        Courseevents are created
        -------------------------
        event1: "Event 1" slug: "event1" belongs to: course1
        event2: "Event 2" slug: "event2  belongs to: course1
        event3: "Event 3" slug: "event3  belongs to: course2

        Participants are created
        ------------------------
        participant1: user3 for event1
        participant2: user4 for event1
        participant3: user5 for event2
        participant4: user6 for event3

        Announcements are created:
        ---------------------------
        announcement1: "Announcement 1" for "event1": published
        announcement2: "Announcement 2" for "event1": published=False
        announcement3: "Announcement 3" for "event2": published
        announcement4: "Announcement 4" for "event2": published=False
        announcement5: "Announcement 5" for "event3": published
        announcement6: "Announcement 6" for "event3": published=False
        """

        # client
        self.client = Client()

        # create site
        self.domain = '127.0.0.1:8000'
        self.site = SiteFactory.create(name='localhost', domain=self.domain)

        # create courses
        self.course_slug1 = "course1"
        self.course1 = CourseFactory.create(title="Course 1",
                                            slug=self.course_slug1)
        self.course_slug2 = "course2"
        self.course2 = CourseFactory.create(title="Course 2",
                                            slug=self.course_slug2)

        # create users
        self.email1 = "*****@*****.**"
        self.email2 = "*****@*****.**"
        self.email3 = "*****@*****.**"
        self.email4 = "*****@*****.**"
        self.email5 = "*****@*****.**"
        self.email6 = "*****@*****.**"
        self.user1 = get_user_model().objects.create(
            username='******',
            first_name="firstname1",
            last_name="lastname1",
            email=self.email1)
        self.user2 = get_user_model().objects.create(
            username='******',
            first_name="firstname2",
            last_name="lastname2",
            email=self.email2)
        self.user3 = get_user_model().objects.create(
            username='******',
            first_name="firstname3",
            last_name="lastname3",
            email="*****@*****.**")
        self.user4 = get_user_model().objects.create(
            username='******',
            first_name="firstname4",
            last_name="lastname4",
            email="*****@*****.**")
        self.user5 = get_user_model().objects.create(
            username='******',
            first_name="firstname5",
            last_name="lastname5",
            email="*****@*****.**")
        self.user6 = get_user_model().objects.create(
            username='******',
            first_name="firstname6",
            last_name="lastname6",
            email="*****@*****.**")

        # create ownerships
        self.ownership1 = CourseOwner(course=self.course1, user=self.user1)
        self.ownership1.save()
        self.ownership2 = CourseOwner(course=self.course1, user=self.user2)
        self.ownership2.save()
        self.ownership3 = CourseOwner(course=self.course2, user=self.user3)
        self.ownership3.save()

        #create courseevents
        self.event_slug1 = "event1"
        self.event1 = CourseEventFactory.create(title="Event 1",
                                                 slug=self.event_slug1,
                                                 course=self.course1)
        self.event_slug2 = "event2"
        self.event2 = CourseEventFactory.create(title="Event 2",
                                                 slug=self.event_slug2,
                                                 course=self.course1)
        self.event_slug3 = "event3"
        self.event3 = CourseEventFactory.create(title="Event 3",
                                                 slug=self.event_slug3,
                                                 course=self.course2)
        # create ownerships
        self.participation1 = CourseEventParticipation(
            courseevent=self.event1, user=self.user3)
        self.participation1.save()
        self.participation2 = CourseEventParticipation(
            courseevent=self.event1, user=self.user4)
        self.participation2.save()
        self.participation3 = CourseEventParticipation(
            courseevent=self.event2, user=self.user5)
        self.participation3.save()
        self.participation4 = CourseEventParticipation(
            courseevent=self.event3, user=self.user6)
        self.participation4.save()

        # set up announcements in the background so that we know whether
        # the announcements get differentiated
        self.announcement1 = Announcement(title='title1', text="text1",
                                         courseevent=self.event1,
                                         published=True)
        self.announcement1.save()
        self.announcement2 = Announcement(title='title2', text="text2",
                                         courseevent=self.event2,
                                         published=True)
        self.announcement2.save()
        self.announcement3 = Announcement(title='title3', text="text3",
                                         courseevent=self.event3,
                                         published=True)
        self.announcement3.save()
        self.announcement4 = Announcement(title='title4', text="text4",
                                         courseevent=self.event1,
                                         published=False)
        self.announcement4.save()
        self.announcement5 = Announcement(title='title5', text="text5",
                                         courseevent=self.event2,
                                         published=False)
        self.announcement5.save()
        self.announcement6 = Announcement(title='title6', text="text6",
                                         courseevent=self.event3,
                                         published=False)
        self.announcement6.save()
Beispiel #6
0
class AnnouncementModelTest(TestCase):
    """
    Tests everything for announcements: creation, delete, publication,
    archive them, etc.
    """
    def setUp(self):
        """
        Courses are created:
        --------------------
        course1: "Course 1" slug: "course1"
        course2: "Course 2" slug: "course2"

        Users are created:
        ------------------
        testuser1: "firstname1 lastname1" "username1" "*****@*****.**"
        testuser2: "firstname2 lastname2" "username2" "*****@*****.**"
        testuser3: "firstname3 lastname3" "username3" "*****@*****.**"
        testuser4: "firstname4 lastname4" "username4" "*****@*****.**"
        testuser5: "firstname5 lastname5" "username5" "*****@*****.**"
        testuser6: "firstname6 lastname6" "username6" "*****@*****.**"

        CourseOwnerships are created
        -----------------------------
        ownership1: testuser1 for course1:
        ownership2: testuser2 for course1:
        ownership3: testuser3 for course2:

        Courseevents are created
        -------------------------
        event1: "Event 1" slug: "event1" belongs to: course1
        event2: "Event 2" slug: "event2  belongs to: course1
        event3: "Event 3" slug: "event3  belongs to: course2

        Participants are created
        ------------------------
        participant1: user3 for event1
        participant2: user4 for event1
        participant3: user5 for event2
        participant4: user6 for event3

        Announcements are created:
        ---------------------------
        announcement1: "Announcement 1" for "event1": published
        announcement2: "Announcement 2" for "event1": published=False
        announcement3: "Announcement 3" for "event2": published
        announcement4: "Announcement 4" for "event2": published=False
        announcement5: "Announcement 5" for "event3": published
        announcement6: "Announcement 6" for "event3": published=False
        """

        # client
        self.client = Client()

        # create site
        self.domain = '127.0.0.1:8000'
        self.site = SiteFactory.create(name='localhost', domain=self.domain)

        # create courses
        self.course_slug1 = "course1"
        self.course1 = CourseFactory.create(title="Course 1",
                                            slug=self.course_slug1)
        self.course_slug2 = "course2"
        self.course2 = CourseFactory.create(title="Course 2",
                                            slug=self.course_slug2)

        # create users
        self.email1 = "*****@*****.**"
        self.email2 = "*****@*****.**"
        self.email3 = "*****@*****.**"
        self.email4 = "*****@*****.**"
        self.email5 = "*****@*****.**"
        self.email6 = "*****@*****.**"
        self.user1 = get_user_model().objects.create(
            username='******',
            first_name="firstname1",
            last_name="lastname1",
            email=self.email1)
        self.user2 = get_user_model().objects.create(
            username='******',
            first_name="firstname2",
            last_name="lastname2",
            email=self.email2)
        self.user3 = get_user_model().objects.create(
            username='******',
            first_name="firstname3",
            last_name="lastname3",
            email="*****@*****.**")
        self.user4 = get_user_model().objects.create(
            username='******',
            first_name="firstname4",
            last_name="lastname4",
            email="*****@*****.**")
        self.user5 = get_user_model().objects.create(
            username='******',
            first_name="firstname5",
            last_name="lastname5",
            email="*****@*****.**")
        self.user6 = get_user_model().objects.create(
            username='******',
            first_name="firstname6",
            last_name="lastname6",
            email="*****@*****.**")

        # create ownerships
        self.ownership1 = CourseOwner(course=self.course1, user=self.user1)
        self.ownership1.save()
        self.ownership2 = CourseOwner(course=self.course1, user=self.user2)
        self.ownership2.save()
        self.ownership3 = CourseOwner(course=self.course2, user=self.user3)
        self.ownership3.save()

        #create courseevents
        self.event_slug1 = "event1"
        self.event1 = CourseEventFactory.create(title="Event 1",
                                                 slug=self.event_slug1,
                                                 course=self.course1)
        self.event_slug2 = "event2"
        self.event2 = CourseEventFactory.create(title="Event 2",
                                                 slug=self.event_slug2,
                                                 course=self.course1)
        self.event_slug3 = "event3"
        self.event3 = CourseEventFactory.create(title="Event 3",
                                                 slug=self.event_slug3,
                                                 course=self.course2)
        # create ownerships
        self.participation1 = CourseEventParticipation(
            courseevent=self.event1, user=self.user3)
        self.participation1.save()
        self.participation2 = CourseEventParticipation(
            courseevent=self.event1, user=self.user4)
        self.participation2.save()
        self.participation3 = CourseEventParticipation(
            courseevent=self.event2, user=self.user5)
        self.participation3.save()
        self.participation4 = CourseEventParticipation(
            courseevent=self.event3, user=self.user6)
        self.participation4.save()

        # set up announcements in the background so that we know whether
        # the announcements get differentiated
        self.announcement1 = Announcement(title='title1', text="text1",
                                         courseevent=self.event1,
                                         published=True)
        self.announcement1.save()
        self.announcement2 = Announcement(title='title2', text="text2",
                                         courseevent=self.event2,
                                         published=True)
        self.announcement2.save()
        self.announcement3 = Announcement(title='title3', text="text3",
                                         courseevent=self.event3,
                                         published=True)
        self.announcement3.save()
        self.announcement4 = Announcement(title='title4', text="text4",
                                         courseevent=self.event1,
                                         published=False)
        self.announcement4.save()
        self.announcement5 = Announcement(title='title5', text="text5",
                                         courseevent=self.event2,
                                         published=False)
        self.announcement5.save()
        self.announcement6 = Announcement(title='title6', text="text6",
                                         courseevent=self.event3,
                                         published=False)
        self.announcement6.save()


    def test_create_announcement(self):
        """
        apps_data.course.models.course
        model: Announcement,  method: create, delete
        --------------------------------------
        Asserts that an announcement exists after the creation
        """
        self.assertEqual(Announcement.objects.all().count(), 6)
        self.announcement = Announcement(title='title1', text="text1",
                                         courseevent=self.event1)
        self.announcement.save()
        self.assertEqual(Announcement.objects.all().count(), 7)
        self.announcement.delete()
        self.assertEqual(Announcement.objects.all().count(), 6)

    def test_create_without_courseevent(self):
        """
        apps_data.course.models.course
        model: Announcement,  method: create
        ---------------------------------------------
        it is important that each announcement has a courseevent.
        """
        self.announcement = Announcement(title='title1', text="text1")
        self.assertRaises(IntegrityError, self.announcement.save)

    def test_lifecycle_of_annnouncement_that_starts_as_draft(self):
        """
        apps_data.course.models.course
        model: Announcement,  method: archive_announcement,
        unarchive_announcement publish_announcement
        model manager: Announcement, method:archived_announcements
        published_in_class, drafts_in_backend
        ----------------------------------------------------------
        it is important that each announcement has a courseevent.
        """
        self.assertEqual(Announcement.objects.all().count(), 6)
        self.assertEqual(Announcement.objects.archived_announcements(
            courseevent=self.event1
        ).count(), 0)
        self.assertEqual(Announcement.objects.published_in_class(
            courseevent=self.event1
        ).count(), 1)
        self.assertEqual(Announcement.objects.drafts_in_backend(
            courseevent=self.event1
        ).count(), 1)

        # establish one announcement as draft, the other as published
        self.announcement = Announcement(title='title1', text="text1",
                                         courseevent=self.event1)
        self.announcement.save()
        self.assertEqual(Announcement.objects.archived_announcements(
            courseevent=self.event1
        ).count(), 0)
        self.assertEqual(Announcement.objects.published_in_class(
            courseevent=self.event1
        ).count(), 1)
        self.assertEqual(Announcement.objects.drafts_in_backend(
            courseevent=self.event1
        ).count(), 2)

        # archivation of drafts should not be possible
        #self.assertRaises(IntegrityError,
        #                  self.announcement.archive_announcement())

        # publish the draft
        # during publication, there is a mail distributor established,
        # when the view tries to mail it out
        self.announcement.publish_announcement(mail_distributor=[])
        self.assertEqual(Announcement.objects.archived_announcements(
            courseevent=self.event1
        ).count(), 0)
        self.assertEqual(Announcement.objects.published_in_class(
            courseevent=self.event1
        ).count(), 2)
        self.assertEqual(Announcement.objects.drafts_in_backend(
            courseevent=self.event1
        ).count(), 1)

        # archive the announcement
        self.announcement.archive_announcement()
        self.assertEqual(Announcement.objects.archived_announcements(
            courseevent=self.event1
        ).count(), 1)
        self.assertEqual(Announcement.objects.published_in_class(
            courseevent=self.event1
        ).count(), 1)
        self.assertEqual(Announcement.objects.drafts_in_backend(
            courseevent=self.event1
        ).count(), 1)

        # pull the announcement back from archivation
        self.announcement.unarchive_announcement()
        self.assertEqual(Announcement.objects.archived_announcements(
            courseevent=self.event1
        ).count(), 0)
        self.assertEqual(Announcement.objects.published_in_class(
            courseevent=self.event1
        ).count(), 2)
        self.assertEqual(Announcement.objects.drafts_in_backend(
            courseevent=self.event1
        ).count(), 1)