Commit 31a294cd by Waheed Ahmed

Fixed same role can be added multiple times against an Org or Course.

ECOM-7823
parent 526bda7e
......@@ -195,6 +195,7 @@ class UpdateCourseRunViewTests(TestCase):
super(UpdateCourseRunViewTests, self).setUp()
self.course_run = factories.CourseRunFactory()
self.user = UserFactory()
self.course_team_user = UserFactory()
self.user.groups.add(Group.objects.get(name=INTERNAL_USER_GROUP_NAME))
self.organization_extension = factories.OrganizationExtensionFactory()
......@@ -210,6 +211,12 @@ class UpdateCourseRunViewTests(TestCase):
user=self.user
)
factories.CourseUserRoleFactory(
role=PublisherUserRole.CourseTeam,
course=self.course_run.course,
user=self.course_team_user
)
factories.UserAttributeFactory(user=self.user, enable_email_notification=True)
toggle_switch('enable_publisher_email_notifications', True)
self.client.login(username=self.user.username, password=USER_PASSWORD)
......@@ -272,11 +279,6 @@ class UpdateCourseRunViewTests(TestCase):
# 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,
......@@ -308,7 +310,7 @@ class UpdateCourseRunViewTests(TestCase):
Helper method to assert sent email data.
"""
self.assertEqual(len(mail.outbox), 1)
self.assertEqual([self.user.email], mail.outbox[0].to)
self.assertEqual([self.course_team_user.email], mail.outbox[0].to)
self.assertEqual(str(mail.outbox[0].subject), subject)
body = mail.outbox[0].body.strip()
......@@ -325,9 +327,6 @@ class UpdateCourseRunViewTests(TestCase):
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)
......@@ -340,7 +339,7 @@ class UpdateCourseRunViewTests(TestCase):
run_number=course_key.run
)
self.assertEqual(len(mail.outbox), 1)
self.assertEqual([course_team_role.user.email], mail.outbox[0].to)
self.assertEqual([self.course_team_user.email], mail.outbox[0].to)
self.assertEqual(str(mail.outbox[0].subject), subject)
def test_update_with_invalid_preview_url(self):
......@@ -364,10 +363,7 @@ class UpdateCourseRunViewTests(TestCase):
"""
preview_url = 'https://example.com/abc/course'
factories.CourseRunStateFactory.create(course_run=self.course_run, owner_role=PublisherUserRole.Publisher)
course_team_role = factories.CourseUserRoleFactory(
course=self.course_run.course, role=PublisherUserRole.CourseTeam
)
factories.UserAttributeFactory(user=course_team_role.user, enable_email_notification=False)
factories.UserAttributeFactory(user=self.course_team_user, enable_email_notification=False)
response = self._make_request(preview_url)
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-05-23 10:06
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('course_metadata', '0054_update_program_type_slug_field'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('publisher', '0049_auto_20170518_1017'),
]
operations = [
migrations.AlterUniqueTogether(
name='courseuserrole',
unique_together=set([('course', 'user'), ('course', 'role')]),
),
migrations.AlterUniqueTogether(
name='organizationuserrole',
unique_together=set([('organization', 'role'), ('organization', 'user')]),
),
]
......@@ -398,7 +398,8 @@ class OrganizationUserRole(TimeStampedModel):
class Meta:
unique_together = (
('organization', 'user', 'role'),
('organization', 'user'),
('organization', 'role'),
)
def __str__(self):
......@@ -421,7 +422,8 @@ class CourseUserRole(TimeStampedModel, ChangedByMixin):
class Meta:
unique_together = (
('course', 'user', 'role'),
('course', 'user'),
('course', 'role'),
)
def __str__(self):
......
......@@ -201,8 +201,8 @@ class CourseTests(TestCase):
permitted to access the course AND have not disabled email notifications.
"""
self.assertListEqual(
self.course.get_course_users_emails(),
[self.user1.email, self.user2.email, self.user3.email]
sorted(self.course.get_course_users_emails()),
sorted([self.user1.email, self.user2.email, self.user3.email])
)
# The email addresses of users who have disabled email notifications should NOT be returned.
......
......@@ -1318,9 +1318,9 @@ class DashboardTests(TestCase):
self.assert_dashboard_response(studio_count=0, published_count=0, progress_count=0, preview_count=0)
# assign user course role
factories.CourseUserRoleFactory(
course=self.course_run_3.course, user=internal_user, role=PublisherUserRole.ProjectCoordinator
)
course_role = self.course_run_3.course.course_user_roles.get(role=PublisherUserRole.ProjectCoordinator)
course_role.user = internal_user
course_role.save()
# Verify that user can see 1 published course run
response = self.assert_dashboard_response(studio_count=0, published_count=1, progress_count=0, preview_count=0)
......@@ -1767,6 +1767,9 @@ class CourseDetailViewTests(TestCase):
"""
Verify that user can see approval widget on course detail page with `Mark as Reviewed`.
"""
self.course_team_role.user = UserFactory()
self.course_team_role.save()
factories.CourseUserRoleFactory(
course=self.course, user=self.user, role=PublisherUserRole.MarketingReviewer
)
......@@ -1774,14 +1777,11 @@ class CourseDetailViewTests(TestCase):
self.course_state.name = CourseStateChoices.Review
self.course_state.save()
self.course_team_role.user = UserFactory()
self.course_team_role.save()
self.user.groups.add(self.organization_extension.group)
assign_perm(OrganizationExtension.VIEW_COURSE, self.organization_extension.group, self.organization_extension)
response = self.client.get(self.detail_page_url)
# Verify that content is sent for review and user can see Reviewed button.
# Verify that content is sent for review and user can see "Mark as Reviewed" button.
self.assertContains(response, 'Mark as Reviewed')
self.assertContains(response, '<span class="icon fa fa-check" aria-hidden="true">')
self.assertContains(response, 'Sent for Review')
......
......@@ -11,7 +11,7 @@ from testfixtures import LogCapture
from course_discovery.apps.core.tests.factories import UserFactory
from course_discovery.apps.course_metadata.tests import toggle_switch
from course_discovery.apps.publisher.choices import PublisherUserRole
from course_discovery.apps.publisher.models import CourseRun, CourseUserRole
from course_discovery.apps.publisher.models import CourseRun, CourseUserRole, UserAttributes
from course_discovery.apps.publisher.tests import factories
from course_discovery.apps.publisher.tests.factories import UserAttributeFactory
from course_discovery.apps.publisher_comments.emails import log as comments_email_logger
......@@ -45,11 +45,11 @@ class CommentsEmailTests(TestCase):
# add user in course-user-role table
factories.CourseUserRoleFactory(
course=self.course, role=PublisherUserRole.ProjectCoordinator, user=self.user
course=self.course, role=PublisherUserRole.MarketingReviewer, user=self.user
)
factories.CourseUserRoleFactory(
course=self.course, role=PublisherUserRole.ProjectCoordinator, user=self.user_2
course=self.course, role=PublisherUserRole.CourseTeam, user=self.user_2
)
factories.CourseUserRoleFactory(
......@@ -148,28 +148,16 @@ class CommentsEmailTests(TestCase):
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
)
UserAttributeFactory(user=self.user_2, enable_email_notification=True)
user_attribute, __ = UserAttributes.objects.get_or_create(user=self.user_3)
user_attribute.enable_email_notification = True
user_attribute.save()
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)
self.assertEqual([self.user_2.email, self.user_3.email], mail.outbox[0].to)
def test_email_for_roles_only(self):
""" Verify the emails send to the course roles users even if groups has no users. """
user_4 = UserFactory()
# assign the role against a course
factories.CourseUserRoleFactory(
course=self.course, role=PublisherUserRole.MarketingReviewer, user=user_4
)
self.create_comment(content_object=self.course)
self.assertEqual(len(mail.outbox), 1)
......@@ -192,9 +180,6 @@ class CommentsEmailTests(TestCase):
""" Verify that after editing a comment against a course emails send
to multiple users.
"""
factories.CourseUserRoleFactory(
course=self.course, role=PublisherUserRole.Publisher, user=self.user
)
comment = self.create_comment(content_object=self.course_run)
comment.comment = 'Update the comment'
comment.save() # pylint: disable=no-member
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment