Exemplo n.º 1
0
    def test_change_course_state(self):
        """
        Verify that if marketing user change course state, owner role will be changed to `CourseTeam`.
        """
        self.assertNotEqual(self.course_state.name, CourseStateChoices.Review)
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user
        )

        course_team_user = UserFactory()
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.CourseTeam, user=course_team_user
        )

        response = self.client.patch(
            self.change_state_url,
            data=json.dumps({'name': CourseStateChoices.Review}),
            content_type=JSON_CONTENT_TYPE
        )

        self.assertEqual(response.status_code, 200)

        self.course_state = CourseState.objects.get(course=self.course)

        self.assertEqual(self.course_state.name, CourseStateChoices.Review)
        self.assertEqual(self.course_state.owner_role, PublisherUserRole.CourseTeam)
        # Verify that course is marked as reviewed by marketing.
        self.assertTrue(self.course_state.marketing_reviewed)

        subject = 'Review requested: {title}'.format(title=self.course.title)
        self._assert_email_sent(course_team_user, subject)
Exemplo n.º 2
0
    def setUp(self):
        super(CourseRunMarkAsReviewedEmailTests, self).setUp()
        self.user = UserFactory()
        self.user_2 = UserFactory()
        self.user_3 = UserFactory()

        self.seat = factories.SeatFactory()
        self.course_run = self.seat.course_run
        self.course = self.course_run.course
        self.course.organizations.add(OrganizationFactory())

        # add user in course-user-role table
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=self.user_2)
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.Publisher,
                                        user=self.user_3)
        self.course_run_state = factories.CourseRunStateFactory(
            course_run=self.course_run)

        self.course_run.lms_course_id = 'course-v1:edX+DemoX+Demo_Course'
        self.course_run.save()

        toggle_switch('enable_publisher_email_notifications', True)
Exemplo n.º 3
0
    def test_mark_as_reviewed(self):
        """
        Verify that user can mark course as reviewed.
        """
        self.course_state.name = CourseStateChoices.Review
        self.course_state.save()

        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user
        )
        course_team_user = UserFactory()
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.CourseTeam, user=course_team_user
        )

        response = self.client.patch(
            self.change_state_url,
            data=json.dumps({'name': CourseStateChoices.Approved}),
            content_type=JSON_CONTENT_TYPE
        )

        self.assertEqual(response.status_code, 200)

        self.course_state = CourseState.objects.get(course=self.course)

        self.assertEqual(self.course_state.name, CourseStateChoices.Approved)

        subject = 'Review complete: {title}'.format(title=self.course.title)
        self._assert_email_sent(course_team_user, subject)
    def setUp(self):
        super(CourseTests, self).setUp()
        self.org_extension_1 = factories.OrganizationExtensionFactory()
        self.org_extension_2 = factories.OrganizationExtensionFactory()

        self.course = factories.CourseFactory(organizations=[self.org_extension_1.organization])
        self.course2 = factories.CourseFactory(organizations=[self.org_extension_2.organization])

        self.user1 = UserFactory()
        self.user2 = UserFactory()
        self.user3 = UserFactory()

        self.user1.groups.add(self.org_extension_1.group)
        self.user2.groups.add(self.org_extension_2.group)

        # add user in course-user-role table
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.ProjectCoordinator, user=self.user1
        )

        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user2
        )

        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.Publisher, user=self.user3
        )
Exemplo n.º 5
0
    def test_update_preview_url(self):
        """Verify the user can update course preview url."""
        self.course_run.lms_course_id = 'course-v1:testX+TC167+2018T1'
        self.course_run.save()
        preview_url = 'https://example.com/abc/course'
        factories.CourseRunStateFactory.create(course_run=self.course_run, owner_role=PublisherUserRole.Publisher)
        factories.CourseUserRoleFactory(
            course=self.course_run.course, role=PublisherUserRole.Publisher
        )
        course_team_role = factories.CourseUserRoleFactory(
            course=self.course_run.course, role=PublisherUserRole.CourseTeam
        )
        response = self._make_request(preview_url)

        self.assertEqual(response.status_code, 200)
        course_run = CourseRun.objects.get(id=self.course_run.id)
        self.assertEqual(course_run.preview_url, preview_url)

        course_key = CourseKey.from_string(course_run.lms_course_id)
        subject = 'Review requested: Preview for {course_name} {run_number}'.format(
            course_name=self.course_run.course.title,
            run_number=course_key.run
        )
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual([course_team_role.user.email], mail.outbox[0].to)
        self.assertEqual(str(mail.outbox[0].subject), subject)
Exemplo n.º 6
0
    def test_change_course_state(self):
        """
        Verify that marketing user can change course workflow state
        and owner role changed to `CourseTeam`.
        """
        self.assertNotEqual(self.course_state.name, CourseStateChoices.Review)
        factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.MarketingReviewer,
            user=self.user)

        course_team_user = UserFactory()
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=course_team_user)

        response = self.client.patch(self.change_state_url,
                                     data=json.dumps(
                                         {'name': CourseStateChoices.Review}),
                                     content_type=JSON_CONTENT_TYPE)

        self.assertEqual(response.status_code, 200)

        self.course_state = CourseState.objects.get(course=self.course)

        self.assertEqual(self.course_state.name, CourseStateChoices.Review)
        self.assertEqual(self.course_state.owner_role,
                         PublisherUserRole.CourseTeam)

        subject = 'Changes to {title} are ready for review'.format(
            title=self.course.title)
        self._assert_email_sent(course_team_user, subject)
Exemplo n.º 7
0
    def setUp(self):
        super(CourseRunPublishedEmailTests, self).setUp()
        self.user = UserFactory()

        self.run_state = factories.CourseRunStateFactory()
        self.course_run = self.run_state.course_run
        self.course = self.course_run.course

        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=self.user)
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.Publisher,
                                        user=UserFactory())
Exemplo n.º 8
0
    def test_save_method_add_course_user_roles(self):
        """
        Verify that save method will not create the duplicate course user roles.
        """
        # for course 3 add course roles
        user = UserFactory()
        course3 = CourseFactory()
        course3.organizations.add(self.organization)
        factories.CourseUserRoleFactory(
            course=course3,
            role=PublisherUserRole.MarketingReviewer,
            user=user)

        # for course 4 add course roles
        project_coordinator = UserFactory()
        course4 = CourseFactory()
        course4.organizations.add(self.organization)
        factories.CourseUserRoleFactory(
            course=course4,
            role=PublisherUserRole.ProjectCoordinator,
            user=project_coordinator)

        test_user = UserFactory()
        post_data = {
            'organization': self.organization.id,
            'user': test_user.id,
            'role': PublisherUserRole.MarketingReviewer
        }
        self.client.post(self.admin_page_url, data=post_data)

        # for course-4 course-user-role does not change
        self.assertTrue(
            course4.course_user_roles.filter(
                role=PublisherUserRole.ProjectCoordinator,
                user=project_coordinator).exists())

        # for course-3 course-user-role also changes to test_user
        self.assertTrue(
            course3.course_user_roles.filter(
                role=PublisherUserRole.MarketingReviewer,
                user=test_user).exists())

        self.assertTrue(
            self.course1.course_user_roles.filter(
                role=PublisherUserRole.MarketingReviewer,
                user=test_user).exists())
        self.assertTrue(
            self.course2.course_user_roles.filter(
                role=PublisherUserRole.MarketingReviewer,
                user=test_user).exists())
Exemplo n.º 9
0
    def setUp(self):
        super(CourseChangeRoleAssignmentEmailTests, self).setUp()
        self.user = UserFactory()

        self.marketing_role = factories.CourseUserRoleFactory(
            role=PublisherUserRole.MarketingReviewer, user=self.user)
        self.course = self.marketing_role.course
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.Publisher)
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.ProjectCoordinator)
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.CourseTeam)

        toggle_switch('enable_publisher_email_notifications', True)
Exemplo n.º 10
0
    def setUp(self):
        super(CourseChangeRoleAssignmentEmailTests, self).setUp()
        self.user = UserFactory()

        self.marketing_role = factories.CourseUserRoleFactory(
            role=PublisherUserRole.MarketingReviewer, user=self.user)
        self.course = self.marketing_role.course
        self.course_team_role = factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.CourseTeam,
            user=self.user)
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.Publisher)
        factories.CourseUserRoleFactory(
            course=self.course, role=PublisherUserRole.ProjectCoordinator)
Exemplo n.º 11
0
 def test_course_autocomplete_with_internal_user(self):
     """ Verify course autocomplete returns all courses for publisher admin. """
     self.user.groups.remove(self.organization_extension.group)
     self.user.groups.add(Group.objects.get(name=INTERNAL_USER_GROUP_NAME))
     factories.CourseUserRoleFactory(course=self.course2, user=self.user, role=PublisherUserRole.MarketingReviewer)
     response = self.client.get(self.course_autocomplete_url.format(title='test'))
     self._assert_response(response, 1)
Exemplo n.º 12
0
    def test_update_course_key(self):
        """
        Test that internal user can update `lms_course_id` for a course run.
        """
        # By default `lms_course_id` and `changed_by` are None
        self.assert_course_key_and_changed_by()

        # create course team role for email
        factories.CourseUserRoleFactory(
            course=self.course_run.course, role=PublisherUserRole.CourseTeam, user=self.user
        )

        lms_course_id = 'course-v1:edxTest+TC12+2050Q1'
        response = self.client.patch(
            self.update_course_run_url,
            data=json.dumps({'lms_course_id': lms_course_id}),
            content_type=JSON_CONTENT_TYPE
        )
        self.assertEqual(response.status_code, 200)

        # Verify that `lms_course_id` and `changed_by` are not None
        self.assert_course_key_and_changed_by(lms_course_id=lms_course_id, changed_by=self.user)

        course_key = CourseKey.from_string(lms_course_id)
        # Assert email sent
        self.assert_email_sent(
            reverse('publisher:publisher_course_run_detail', kwargs={'pk': self.course_run.id}),
            'Studio URL created: {title} {run}'.format(title=self.course_run.course.title, run=course_key.run),
            'has created a Studio URL'
        )
Exemplo n.º 13
0
    def test_course_published_email(self):
        """
        Verify that course published email functionality works fine.
        """
        project_coordinator = UserFactory()
        factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.ProjectCoordinator,
            user=project_coordinator)
        self.course_run.lms_course_id = 'course-v1:testX+test45+2017T2'
        self.course_run.save()
        person = PersonFactory()
        DiscoveryCourseRunFactory(key=self.course_run.lms_course_id,
                                  staff=[person])
        emails.send_course_run_published_email(self.course_run, self.site)

        course_key = CourseKey.from_string(self.course_run.lms_course_id)
        subject = 'Publication complete: About page for {course_name} {run_number}'.format(
            course_name=self.course_run.course.title,
            run_number=course_key.run)
        assert len(mail.outbox) == 1

        message = mail.outbox[0]
        assert message.to == [self.user.email]
        assert message.cc == [project_coordinator.email]

        self.assertEqual(str(mail.outbox[0].subject), subject)
        body = mail.outbox[0].body.strip()
        self.assertIn(self.course_run.preview_url, body)
        self.assertIn('has been published', body)
Exemplo n.º 14
0
    def setUp(self):
        super(CourseRunPublishedEmailTests, self).setUp()
        self.user = UserFactory()

        self.run_state = factories.CourseRunStateFactory()
        self.course_run = self.run_state.course_run
        self.course = self.course_run.course

        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=self.user)
        factories.CourseUserRoleFactory(course=self.course,
                                        role=PublisherUserRole.Publisher,
                                        user=UserFactory())

        toggle_switch('enable_publisher_email_notifications', True)
Exemplo n.º 15
0
    def setUp(self):
        super(CourseRoleAssignmentViewTests, self).setUp()
        self.course = factories.CourseFactory()

        # Create an internal user group and assign four users because we have
        # four different roles for every course.
        self.internal_user = UserFactory()
        self.internal_user_group = Group.objects.get(
            name=INTERNAL_USER_GROUP_NAME)

        self.internal_user_group.user_set.add(self.internal_user)
        self.other_internal_users = UserFactory.create_batch(4)
        self.internal_user_group.user_set.add(*self.other_internal_users)

        self.organization_extension = factories.OrganizationExtensionFactory()
        self.course.organizations.add(self.organization_extension.organization)

        # Create three internal user course roles for internal users against a course
        # so we can test change role assignment on these roles.
        roles = [role for role, __ in PublisherUserRole.choices]
        for user, role in zip(self.other_internal_users, roles):
            factories.CourseUserRoleFactory(course=self.course,
                                            user=user,
                                            role=role)

        self.client.login(username=self.internal_user.username,
                          password=USER_PASSWORD)
Exemplo n.º 16
0
 def setUpClass(cls):
     super(CourseStateTests, cls).setUpClass()
     cls.course_state = factories.CourseStateFactory(name=CourseStateChoices.Draft)
     cls.user = UserFactory()
     factories.CourseUserRoleFactory(
         course=cls.course_state.course, role=PublisherUserRole.CourseTeam, user=cls.user
     )
Exemplo n.º 17
0
 def setUp(self):
     super(CourseUserRoleTests, self).setUp()
     self.course_user_role = factories.CourseUserRoleFactory(
         role=PublisherUserRole.ProjectCoordinator)
     self.course = factories.CourseFactory()
     self.user = UserFactory()
     self.marketing_reviewer_role = PublisherUserRole.MarketingReviewer
Exemplo n.º 18
0
 def test_email_sent_by_course_team(self):
     """ Verify that email works successfully."""
     factories.CourseUserRoleFactory(
         course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user
     )
     emails.send_email_for_mark_as_reviewed_course_run(self.course_run_state.course_run, self.user_2)
     self.assert_email_sent(self.user)
Exemplo n.º 19
0
    def test_published_course_run_editing_email(self):
        """
        Verify that on edit the published course-run email send to publisher.
        """
        factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.ProjectCoordinator,
            user=self.user)
        self.course_run.lms_course_id = 'course-v1:testX+test45+2017T2'
        self.course_run.save()
        emails.send_email_for_published_course_run_editing(self.course_run)

        course_key = CourseKey.from_string(self.course_run.lms_course_id)

        subject = 'Changes to published course run: {title} {run_number}'.format(
            title=self.course_run.course.title, run_number=course_key.run)

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual([self.course.publisher.email], mail.outbox[0].to)
        self.assertEqual(str(mail.outbox[0].subject), subject)
        body = mail.outbox[0].body.strip()
        self.assertIn(
            'has made changes to the following published course run.', body)
        page_path = reverse('publisher:publisher_course_run_detail',
                            kwargs={'pk': self.run_state.course_run.id})
        self.assertIn(page_path, body)
Exemplo n.º 20
0
    def setUp(self):
        super(CourseCreatedEmailTests, self).setUp()
        self.user = UserFactory()
        self.course_run = factories.CourseRunFactory()

        # add user in course-user-role table
        factories.CourseUserRoleFactory(
            course=self.course_run.course,
            role=PublisherUserRole.ProjectCoordinator,
            user=self.user)

        self.course_team = UserFactory()
        factories.CourseUserRoleFactory(course=self.course_run.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=self.course_team)

        UserAttributeFactory(user=self.user, enable_email_notification=True)
Exemplo n.º 21
0
    def test_has_role_for_course(self):
        """
        Verify the function returns a boolean indicating if the user has a role for course.
        """

        self.assertFalse(has_role_for_course(self.course, self.user))
        factories.CourseUserRoleFactory(course=self.course, user=self.user)
        self.assertTrue(has_role_for_course(self.course, self.user))
Exemplo n.º 22
0
 def test_email_sent_by_course_team(self):
     """ Verify that email works successfully."""
     factories.CourseUserRoleFactory(
         course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user
     )
     emails.send_email_for_send_for_review_course_run(self.course_run_state.course_run, self.user_2)
     subject = 'Changes to {title} are ready for review'.format(title=self.course_run.course.title)
     self.assert_email_sent(subject, self.user)
Exemplo n.º 23
0
    def test_publisher(self):
        """ Verify that the publisher property returns user if exist. """
        self.assertIsNone(self.course2.publisher)

        factories.CourseUserRoleFactory(
            course=self.course2, user=self.user1, role=PublisherUserRole.Publisher
        )

        self.assertEqual(self.user1, self.course2.publisher)
Exemplo n.º 24
0
    def test_marketing_reviewer(self):
        """ Verify that the marketing_reviewer property returns user if exist. """
        self.assertIsNone(self.course2.marketing_reviewer)

        factories.CourseUserRoleFactory(
            course=self.course2, user=self.user1, role=PublisherUserRole.MarketingReviewer
        )

        self.assertEqual(self.user1, self.course2.marketing_reviewer)
Exemplo n.º 25
0
    def test_course_team_admin(self):
        """ Verify that the course_team_admin property returns user if exist. """
        self.assertIsNone(self.course2.course_team_admin)

        factories.CourseUserRoleFactory(
            course=self.course2, user=self.user1, role=PublisherUserRole.CourseTeam
        )

        self.assertEqual(self.user1, self.course2.course_team_admin)
Exemplo n.º 26
0
 def test_email_sent_by_course_team(self):
     """ Verify that email works successfully for course team user."""
     factories.CourseUserRoleFactory(
         course=self.course,
         role=PublisherUserRole.ProjectCoordinator,
         user=self.user)
     emails.send_email_for_mark_as_reviewed_course_run(
         self.course_run_state.course_run, self.user_2, self.site)
     self.assert_email_sent(self.user)
Exemplo n.º 27
0
 def test_email_sent_to_publisher(self):
     """ Verify that email works successfully."""
     factories.CourseUserRoleFactory(
         course=self.course,
         role=PublisherUserRole.ProjectCoordinator,
         user=self.user)
     emails.send_email_to_publisher(self.course_run_state.course_run,
                                    self.user)
     self.assert_email_sent(self.user_3)
Exemplo n.º 28
0
 def test_email_not_sent_by_project_coordinator(self):
     """ Verify that no email is sent if approving person is project coordinator. """
     factories.CourseUserRoleFactory(
         course=self.course,
         role=PublisherUserRole.ProjectCoordinator,
         user=self.user)
     emails.send_email_for_mark_as_reviewed_course_run(
         self.course_run_state.course_run, self.user)
     self.assertEqual(len(mail.outbox), 0)
Exemplo n.º 29
0
    def test_email_with_roles(self):
        """ Verify that emails send to the users against course-user-roles also."""
        user_4 = UserFactory()
        user_5 = UserFactory()

        # assign the role against a course
        factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.MarketingReviewer,
            user=user_4)
        factories.CourseUserRoleFactory(
            course=self.course,
            role=PublisherUserRole.ProjectCoordinator,
            user=user_5)
        self.create_comment(content_object=self.course_run)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual([self.user_2.email, user_4.email, user_5.email],
                         mail.outbox[0].to)
Exemplo n.º 30
0
    def setUpClass(cls):
        super(CourseRunStateTests, cls).setUpClass()
        cls.seat = factories.SeatFactory(type=Seat.VERIFIED, price=100)
        cls.course_run_state = factories.CourseRunStateFactory(
            course_run=cls.seat.course_run, name=CourseRunStateChoices.Draft)
        cls.course_run = cls.course_run_state.course_run
        cls.course = cls.course_run.course
        cls.user = UserFactory()

        factories.CourseStateFactory(name=CourseStateChoices.Approved,
                                     course=cls.course)
        factories.CourseUserRoleFactory(course=cls.course_run.course,
                                        role=PublisherUserRole.CourseTeam,
                                        user=cls.user)
        factories.CourseUserRoleFactory(
            course=cls.course_run.course,
            role=PublisherUserRole.MarketingReviewer,
            user=UserFactory())