def test_get_internal_user(self): """ Verify the function returns all internal users. """ internal_user_group = Group.objects.get(name=INTERNAL_USER_GROUP_NAME) self.assertEqual(get_internal_users(), []) self.user.groups.add(internal_user_group) self.assertEqual(get_internal_users(), [self.user])
def get_context_data(self, **kwargs): context = super(CourseRunDetailView, self).get_context_data(**kwargs) user = self.request.user course_run = CourseRunWrapper(self.get_object()) context['object'] = course_run context['comment_object'] = course_run.course context['can_edit'] = any( [user.has_perm(OrganizationExtension.EDIT_COURSE_RUN, org.organization_extension) for org in course_run.course.organizations.all()] ) # Show role assignment widgets if user is an internal user. if is_internal_user(user): course_roles = course_run.course.course_user_roles.exclude(role=PublisherUserRole.CourseTeam) context['role_widgets'] = self.get_role_widgets_data(course_roles) context['user_list'] = get_internal_users() return context
def get_course_role_widgets_data(user, course, state_object, change_state_url): """ Create role widgets list for course user roles. """ role_widgets = [] for course_role in course.course_user_roles.order_by('role'): role_widget = { 'course_role': course_role, 'heading': ROLE_WIDGET_HEADINGS.get(course_role.role), 'change_state_url': reverse(change_state_url, kwargs={'pk': state_object.id}) } if is_internal_user(user): role_widget['user_list'] = get_internal_users() if course_role.role != PublisherUserRole.CourseTeam: role_widget['can_change_role_assignment'] = True if course_role.role == PublisherUserRole.CourseTeam: role_widget[ 'user_list'] = course.organization_extension.group.user_set.all( ) if user.groups.filter( name=course.organization_extension.group).exists(): role_widget['can_change_role_assignment'] = True if state_object.owner_role == course_role.role: if state_object.owner_role_modified: role_widget['ownership'] = timezone.now( ) - state_object.owner_role_modified if user == course_role.user: role_widget['state_button'] = STATE_BUTTONS.get( state_object.name) if state_object.name == CourseStateChoices.Draft and not state_object.can_send_for_review( ): role_widget['button_disabled'] = True if course_role.role in [ PublisherUserRole.CourseTeam, PublisherUserRole.MarketingReviewer ]: if state_object.name == CourseStateChoices.Approved and course_role.role == state_object.approved_by_role: history_record = state_object.history.filter( name=CourseStateChoices.Approved).order_by( '-modified').first() if history_record: role_widget['reviewed'] = history_record.modified elif ((state_object.name != CourseStateChoices.Draft and course_role.role != state_object.owner_role) or state_object.name == CourseRunStateChoices.Approved): history_record = state_object.history.filter( name=CourseStateChoices.Review).order_by( '-modified').first() if history_record: role_widget['sent_for_review'] = history_record.modified role_widgets.append(role_widget) return role_widgets