Remove k5_parent_support flag
closes LS-2984 flag = k5_parent_support [fsc-timeout=45] [fsc-max-nodes=20] Test plan: - Visit the k5 dashboard as an observer with several students - Expect to see the observer picker - Expect switching students to function normally - Open a course and expect the selected student to remain selected in the picker - Open dashboard as a non-observer user and expect the picker to be gone Change-Id: I0f6aa230976b6929ceba7621c1ff34a400226340 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/284783 Reviewed-by: Ed Schiebel <eschiebel@instructure.com> QA-Review: Ed Schiebel <eschiebel@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Product-Review: Jackson Howe <jackson.howe@instructure.com>
This commit is contained in:
parent
47a302159c
commit
f6173a54b8
|
@ -276,9 +276,8 @@ class ApplicationController < ActionController::Base
|
|||
# put feature checks on Account.site_admin and @domain_root_account that we're loading for every page in here
|
||||
# so altogether we can get them faster the vast majority of the time
|
||||
JS_ENV_SITE_ADMIN_FEATURES = %i[
|
||||
featured_help_links feature_flag_filters k5_parent_support
|
||||
conferencing_in_planner word_count_in_speed_grader observer_picker lti_platform_storage
|
||||
scale_equation_images new_equation_editor buttons_and_icons_cropper
|
||||
featured_help_links feature_flag_filters conferencing_in_planner word_count_in_speed_grader observer_picker
|
||||
lti_platform_storage scale_equation_images new_equation_editor buttons_and_icons_cropper
|
||||
].freeze
|
||||
JS_ENV_ROOT_ACCOUNT_FEATURES = %i[
|
||||
product_tours files_dnd usage_rights_discussion_topics
|
||||
|
|
|
@ -531,7 +531,7 @@ class UsersController < ApplicationController
|
|||
})
|
||||
|
||||
# prefetch dashboard cards with the right observer url param
|
||||
if @current_user.roles(@domain_root_account).include?("observer") && (Account.site_admin.feature_enabled?(:k5_parent_support) || Account.site_admin.feature_enabled?(:observer_picker))
|
||||
if @current_user.roles(@domain_root_account).include?("observer")
|
||||
@cards_prefetch_observed_param = @selected_observed_user&.id
|
||||
end
|
||||
|
||||
|
|
|
@ -1200,7 +1200,7 @@ module ApplicationHelper
|
|||
|
||||
def planner_enabled?
|
||||
!!@current_user&.has_student_enrollment? ||
|
||||
(Account.site_admin.feature_enabled?(:k5_parent_support) && @current_user&.roles(@domain_root_account)&.include?("observer") && k5_user?) ||
|
||||
(@current_user&.roles(@domain_root_account)&.include?("observer") && k5_user?) ||
|
||||
(!!@current_user&.roles(@domain_root_account)&.include?("observer") && Account.site_admin.feature_enabled?(:observer_picker)) # TODO: ensure observee is a student?
|
||||
end
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<% provide :page_title do %><%= dashboard_title %><% end %>
|
||||
<%
|
||||
is_observer = Account.site_admin.feature_enabled?(:k5_parent_support) && @current_user&.roles(@domain_root_account)&.include?('observer')
|
||||
is_observer = @current_user&.roles(@domain_root_account)&.include?('observer')
|
||||
if show_planner?
|
||||
# fire off these `fetch` requests now so they are ready sooner
|
||||
six_months_ago = CGI.escape Time.now.utc.at_beginning_of_day.months_ago(6).iso8601(3)
|
||||
|
|
|
@ -25,11 +25,6 @@ auto_show_cc:
|
|||
Automatically show closed captions in the user's current
|
||||
language (if available) when playing canvas media.
|
||||
applies_to: User
|
||||
k5_parent_support:
|
||||
state: hidden
|
||||
display_name: 'Canvas for Elementary: Parent Support'
|
||||
description: Enables support for observers within Canvas for Elementary.
|
||||
applies_to: SiteAdmin
|
||||
pace_plans:
|
||||
state: hidden
|
||||
display_name: 'Pace Plans'
|
||||
|
|
|
@ -2730,7 +2730,6 @@ describe UsersController do
|
|||
|
||||
context "@cards_prefetch_observed_param" do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
@user1 = user_factory(active_all: true, account: @account)
|
||||
@course = course_factory(active_all: true, account: @account)
|
||||
end
|
||||
|
|
|
@ -839,47 +839,35 @@ describe ApplicationHelper do
|
|||
@course1.enroll_user(@observer, "ObserverEnrollment", { associated_user_id: @student1.id })
|
||||
end
|
||||
|
||||
context "with the k5_parent_support flag enabled" do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature! :k5_parent_support
|
||||
end
|
||||
|
||||
it "still returns true for the observed student" do
|
||||
@current_user = @student1
|
||||
expect(planner_enabled?).to be true
|
||||
end
|
||||
|
||||
it "returns false for the observer if not k5_user" do
|
||||
allow(helper).to receive(:k5_user?).and_return(false)
|
||||
@current_user = @observer
|
||||
expect(helper.planner_enabled?).to be false
|
||||
end
|
||||
|
||||
it "returns true for the observer if k5_user" do
|
||||
allow(helper).to receive(:k5_user?).and_return(true)
|
||||
@current_user = @observer
|
||||
expect(helper.planner_enabled?).to be true
|
||||
end
|
||||
|
||||
it "still returns false for a teacher" do
|
||||
teacher = user_factory(active_all: true)
|
||||
@course1.enroll_teacher(teacher)
|
||||
@current_user = teacher
|
||||
expect(planner_enabled?).to be false
|
||||
end
|
||||
it "still returns true for the observed student" do
|
||||
@current_user = @student1
|
||||
expect(planner_enabled?).to be true
|
||||
end
|
||||
|
||||
context "with the k5_parent_support flag disabled" do
|
||||
it "returns false as an observer" do
|
||||
@current_user = @observer
|
||||
expect(planner_enabled?).to be false
|
||||
end
|
||||
it "returns false for the observer if not k5_user and observer_picker flag is disabled" do
|
||||
allow(helper).to receive(:k5_user?).and_return(false)
|
||||
@current_user = @observer
|
||||
expect(helper.planner_enabled?).to be false
|
||||
end
|
||||
|
||||
it "returns true as an observer with observer_picker flag enabled" do
|
||||
Account.site_admin.enable_feature! :observer_picker
|
||||
@current_user = @observer
|
||||
expect(planner_enabled?).to be true
|
||||
end
|
||||
it "returns true for the observer if k5_user" do
|
||||
allow(helper).to receive(:k5_user?).and_return(true)
|
||||
@current_user = @observer
|
||||
expect(helper.planner_enabled?).to be true
|
||||
end
|
||||
|
||||
it "still returns false for a teacher" do
|
||||
teacher = user_factory(active_all: true)
|
||||
@course1.enroll_teacher(teacher)
|
||||
@current_user = teacher
|
||||
expect(planner_enabled?).to be false
|
||||
end
|
||||
|
||||
it "returns true as an observer with observer_picker flag enabled" do
|
||||
allow(helper).to receive(:k5_user?).and_return(false)
|
||||
Account.site_admin.enable_feature! :observer_picker
|
||||
@current_user = @observer
|
||||
expect(helper.planner_enabled?).to be true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -101,7 +101,6 @@ describe "dashboard" do
|
|||
|
||||
context "as an observer" do
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
course_with_student(active_all: true)
|
||||
@student = @user
|
||||
@observer = user_factory(active_all: true)
|
||||
|
|
|
@ -42,7 +42,6 @@ describe "observer k5 dashboard" do
|
|||
include ObserverEnrollmentsHelper
|
||||
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
student_setup
|
||||
observer_setup
|
||||
end
|
||||
|
|
|
@ -32,7 +32,6 @@ describe "observer k5 dashboard important dates" do
|
|||
include K5ImportantDatesSectionPageObject
|
||||
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
student_setup
|
||||
observer_setup
|
||||
end
|
||||
|
|
|
@ -185,7 +185,6 @@ shared_examples_for "k5 important dates calendar picker" do |context|
|
|||
end
|
||||
user_session(@homeroom_teacher)
|
||||
when :observer
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
@observer = user_with_pseudonym(name: "Mom", email: "bestmom@example.com", workflow_state: "available")
|
||||
add_linked_observer(@student, @observer, root_account: @account)
|
||||
# For now, The calendar picker is only available if the observer is viewing his own enrollments
|
||||
|
|
|
@ -34,7 +34,6 @@ shared_examples_for "k5 subject navigation tabs" do
|
|||
let(:navigation_names) { ["Home", "Schedule", "Modules", "Grades", "Groups", lti_a, lti_b] }
|
||||
|
||||
before :once do
|
||||
Account.site_admin.enable_feature!(:k5_parent_support)
|
||||
@resource_a = "context_external_tool_#{create_lti_resource(lti_a).id}"
|
||||
@resource_b = "context_external_tool_#{create_lti_resource(lti_b).id}"
|
||||
end
|
||||
|
|
|
@ -56,7 +56,6 @@ ready(() => {
|
|||
pagesPath={ENV.COURSE.pages_url}
|
||||
hasWikiPages={ENV.COURSE.has_wiki_pages}
|
||||
hasSyllabusBody={ENV.COURSE.has_syllabus_body}
|
||||
parentSupportEnabled={ENV.FEATURES?.k5_parent_support}
|
||||
observedUsersList={ENV.OBSERVED_USERS_LIST}
|
||||
selfEnrollment={ENV.COURSE.self_enrollment}
|
||||
tabContentOnly={ENV.TAB_CONTENT_ONLY}
|
||||
|
|
|
@ -462,7 +462,6 @@ export function K5Course({
|
|||
pagesPath,
|
||||
hasWikiPages,
|
||||
hasSyllabusBody,
|
||||
parentSupportEnabled,
|
||||
observedUsersList,
|
||||
selfEnrollment,
|
||||
tabContentOnly,
|
||||
|
@ -497,8 +496,7 @@ export function K5Course({
|
|||
const tabsPaddingRef = useRef(null)
|
||||
const [modulesExist, setModulesExist] = useState(true)
|
||||
const [windowSize, setWindowSize] = useState(() => getWindowSize())
|
||||
const showObserverOptions =
|
||||
parentSupportEnabled && shouldShowObserverOptions(observedUsersList, currentUser)
|
||||
const showObserverOptions = shouldShowObserverOptions(observedUsersList, currentUser)
|
||||
const showingMobileNav = windowSize.width < MOBILE_NAV_BREAKPOINT_PX
|
||||
useEffect(() => {
|
||||
modulesRef.current = document.getElementById('k5-modules-container')
|
||||
|
@ -627,7 +625,6 @@ export function K5Course({
|
|||
showStudentView={showStudentView}
|
||||
studentViewPath={`${studentViewPath + window.location.hash}`}
|
||||
courseContext={name}
|
||||
parentSupportEnabled={parentSupportEnabled}
|
||||
observedUsersList={observedUsersList}
|
||||
currentUser={currentUser}
|
||||
handleChangeObservedUser={setObservedUserId}
|
||||
|
@ -740,7 +737,6 @@ K5Course.propTypes = {
|
|||
pagesPath: PropTypes.string.isRequired,
|
||||
hasWikiPages: PropTypes.bool.isRequired,
|
||||
hasSyllabusBody: PropTypes.bool.isRequired,
|
||||
parentSupportEnabled: PropTypes.bool.isRequired,
|
||||
observedUsersList: ObservedUsersListShape.isRequired,
|
||||
selfEnrollment: PropTypes.object,
|
||||
tabContentOnly: PropTypes.bool,
|
||||
|
|
|
@ -105,8 +105,7 @@ const defaultProps = {
|
|||
pagesPath: '/courses/30/pages',
|
||||
hasWikiPages: true,
|
||||
hasSyllabusBody: true,
|
||||
parentSupportEnabled: false,
|
||||
observedUsersList: MOCK_OBSERVED_USERS_LIST,
|
||||
observedUsersList: [{id: currentUser.id, name: currentUser.display_name}],
|
||||
selfEnrollment: {
|
||||
option: null,
|
||||
url: null
|
||||
|
@ -789,7 +788,9 @@ describe('K-5 Subject Course', () => {
|
|||
})
|
||||
|
||||
it('shows picker when user is an observer', () => {
|
||||
const {getByRole} = render(<K5Course {...defaultProps} parentSupportEnabled />)
|
||||
const {getByRole} = render(
|
||||
<K5Course {...defaultProps} observedUsersList={MOCK_OBSERVED_USERS_LIST} />
|
||||
)
|
||||
const select = getByRole('combobox', {name: 'Select a student to view'})
|
||||
expect(select).toBeInTheDocument()
|
||||
expect(select.value).toBe('Zelda')
|
||||
|
@ -797,7 +798,11 @@ describe('K-5 Subject Course', () => {
|
|||
|
||||
it('shows the observee grades on the Grades Tab', async () => {
|
||||
const {getByRole, getByText} = render(
|
||||
<K5Course {...defaultProps} parentSupportEnabled defaultTab={TAB_IDS.GRADES} />
|
||||
<K5Course
|
||||
{...defaultProps}
|
||||
observedUsersList={MOCK_OBSERVED_USERS_LIST}
|
||||
defaultTab={TAB_IDS.GRADES}
|
||||
/>
|
||||
)
|
||||
const select = getByRole('combobox', {name: 'Select a student to view'})
|
||||
act(() => select.click())
|
||||
|
|
|
@ -39,7 +39,6 @@ ready(() => {
|
|||
restrictCourseCreation={ENV.CREATE_COURSES_PERMISSIONS.RESTRICT_TO_MCC_ACCOUNT}
|
||||
selectedContextCodes={ENV.SELECTED_CONTEXT_CODES}
|
||||
selectedContextsLimit={ENV.SELECTED_CONTEXTS_LIMIT}
|
||||
parentSupportEnabled={ENV.FEATURES?.k5_parent_support}
|
||||
observedUsersList={ENV.OBSERVED_USERS_LIST}
|
||||
canAddObservee={ENV.CAN_ADD_OBSERVEE}
|
||||
openTodosInNewTab={ENV.OPEN_TEACHER_TODOS_IN_NEW_TAB}
|
||||
|
|
|
@ -54,7 +54,7 @@ const ImportantDates = ({
|
|||
const [selectedContextCodes, setSelectedContextCodes] = useState(null)
|
||||
const previousContextsRef = useRef(null)
|
||||
const [fetchEventsPath, setFetchEventsPath] = useState('/api/v1/calendar_events')
|
||||
const observerMode = !!(ENV.FEATURES?.k5_parent_support && observedUserId)
|
||||
const observerMode = !!observedUserId
|
||||
const isObservingUser = observerMode && observedUserId !== ENV.current_user_id
|
||||
|
||||
useEffect(() => {
|
||||
|
|
|
@ -138,7 +138,6 @@ export const K5Dashboard = ({
|
|||
hideGradesTabForStudents = false,
|
||||
selectedContextCodes,
|
||||
selectedContextsLimit,
|
||||
parentSupportEnabled,
|
||||
observedUsersList,
|
||||
canAddObservee,
|
||||
openTodosInNewTab,
|
||||
|
@ -168,7 +167,7 @@ export const K5Dashboard = ({
|
|||
})
|
||||
const canDisableElementaryDashboard = currentUserRoles.some(r => ['admin', 'teacher'].includes(r))
|
||||
const useImportantDatesTray = responsiveSize !== 'large'
|
||||
const observerMode = parentSupportEnabled && currentUserRoles.includes('observer')
|
||||
const observerMode = currentUserRoles.includes('observer')
|
||||
|
||||
// If the view width increases while the tray is open, change the state to close the tray
|
||||
if (trayOpen && !useImportantDatesTray) {
|
||||
|
@ -421,7 +420,6 @@ K5Dashboard.propTypes = {
|
|||
hideGradesTabForStudents: PropTypes.bool,
|
||||
selectedContextCodes: PropTypes.arrayOf(PropTypes.string),
|
||||
selectedContextsLimit: PropTypes.number.isRequired,
|
||||
parentSupportEnabled: PropTypes.bool.isRequired,
|
||||
observedUsersList: ObservedUsersListShape.isRequired,
|
||||
canAddObservee: PropTypes.bool.isRequired,
|
||||
openTodosInNewTab: PropTypes.bool.isRequired
|
||||
|
|
|
@ -229,10 +229,7 @@ describe('ImportantDates', () => {
|
|||
describe('Parent Support', () => {
|
||||
beforeEach(() => {
|
||||
global.ENV = {
|
||||
current_user_id: currentUserId,
|
||||
FEATURES: {
|
||||
k5_parent_support: true
|
||||
}
|
||||
current_user_id: currentUserId
|
||||
}
|
||||
fetchMock.get(OBSERVER_ASSIGNMENTS_URL, JSON.stringify(MOCK_OBSERVEE_ASSIGNMENTS))
|
||||
fetchMock.get(OBSERVER_EVENTS_URL, JSON.stringify(MOCK_OBSERVEE_EVENTS))
|
||||
|
|
|
@ -188,9 +188,8 @@ const defaultProps = {
|
|||
hideGradesTabForStudents: false,
|
||||
selectedContextCodes: ['course_1', 'course_3'],
|
||||
selectedContextsLimit: 2,
|
||||
parentSupportEnabled: false,
|
||||
canAddObservee: false,
|
||||
observedUsersList: MOCK_OBSERVED_USERS_LIST,
|
||||
observedUsersList: [{id: currentUser.id, name: currentUser.display_name}],
|
||||
openTodosInNewTab: true
|
||||
}
|
||||
function createPlannerMocks() {
|
||||
|
@ -602,7 +601,6 @@ describe('K-5 Dashboard', () => {
|
|||
{...defaultProps}
|
||||
defaultTab="tab-schedule"
|
||||
plannerEnabled
|
||||
parentSupportEnabled
|
||||
canAddObservee
|
||||
currentUserRoles={['user', 'observer']}
|
||||
observedUsersList={observedUsersList}
|
||||
|
@ -782,9 +780,9 @@ describe('K-5 Dashboard', () => {
|
|||
const {getByRole} = render(
|
||||
<K5Dashboard
|
||||
{...defaultProps}
|
||||
parentSupportEnabled
|
||||
canAddObservee
|
||||
currentUserRoles={['user', 'observer']}
|
||||
observedUsersList={MOCK_OBSERVED_USERS_LIST}
|
||||
/>
|
||||
)
|
||||
const select = getByRole('combobox', {name: 'Select a student to view'})
|
||||
|
@ -803,7 +801,7 @@ describe('K-5 Dashboard', () => {
|
|||
{...defaultProps}
|
||||
currentUserRoles={['user', 'observer', 'teacher']}
|
||||
canAddObservee
|
||||
parentSupportEnabled
|
||||
observedUsersList={MOCK_OBSERVED_USERS_LIST}
|
||||
/>
|
||||
)
|
||||
// let the dashboard execute all its queries and render
|
||||
|
@ -832,8 +830,8 @@ describe('K-5 Dashboard', () => {
|
|||
<K5Dashboard
|
||||
{...defaultProps}
|
||||
currentUserRoles={['user', 'observer', 'teacher']}
|
||||
parentSupportEnabled
|
||||
canAddObservee
|
||||
observedUsersList={MOCK_OBSERVED_USERS_LIST}
|
||||
/>
|
||||
)
|
||||
expect(await findByText('Economics 101')).toBeInTheDocument()
|
||||
|
@ -889,7 +887,7 @@ describe('K-5 Dashboard', () => {
|
|||
<K5Dashboard
|
||||
{...defaultProps}
|
||||
currentUserRoles={['user', 'observer', 'teacher']}
|
||||
parentSupportEnabled
|
||||
observedUsersList={MOCK_OBSERVED_USERS_LIST}
|
||||
canAddObservee
|
||||
plannerEnabled
|
||||
/>
|
||||
|
|
|
@ -185,7 +185,7 @@ export default class Navigation extends React.Component {
|
|||
// only retrive the courses for my observee
|
||||
if (type === 'courses' && ENV.current_user_roles.includes('observer')) {
|
||||
let forceLoad = false
|
||||
const k5_observed_user_id = savedObservedId(ENV.current_user_id) // only returns a value if k5_parent_support is on
|
||||
const k5_observed_user_id = savedObservedId(ENV.current_user_id)
|
||||
if (k5_observed_user_id) {
|
||||
url = `${url}&observed_user=${k5_observed_user_id}`
|
||||
if (k5_observed_user_id !== this.state.observedUserId) {
|
||||
|
|
Loading…
Reference in New Issue