From 67ea30a45a0baebdf1ae33a5c31bfe3c79288a1f Mon Sep 17 00:00:00 2001 From: Matthew Piatetsky Date: Wed, 20 Oct 2021 10:20:01 -0400 Subject: [PATCH] fix: ensure we don't update goals while users are masquerading (#697) --- src/course-home/outline-tab/OutlineTab.test.jsx | 15 +++++++++++++++ .../widgets/WeeklyLearningGoalCard.jsx | 13 +++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/course-home/outline-tab/OutlineTab.test.jsx b/src/course-home/outline-tab/OutlineTab.test.jsx index a539c085..a85168a5 100644 --- a/src/course-home/outline-tab/OutlineTab.test.jsx +++ b/src/course-home/outline-tab/OutlineTab.test.jsx @@ -427,6 +427,21 @@ describe('Outline Tab', () => { expect(screen.queryByTestId('weekly-learning-goal-card')).not.toBeInTheDocument(); }); + it('does not post goals while masquerading', async () => { + setMetadata({ is_enrolled: true, original_user_is_staff: true }); + setTabData({ + course_goals: { + weekly_learning_goal_enabled: true, + }, + }); + const spy = jest.spyOn(thunks, 'saveWeeklyLearningGoal'); + + await fetchAndRender(); + const button = await screen.getByTestId('weekly-learning-goal-input-regular'); + fireEvent.click(button); + expect(spy).toHaveBeenCalledTimes(0); + }); + describe('weekly learning goal is not set', () => { beforeEach(async () => { setTabData({ diff --git a/src/course-home/outline-tab/widgets/WeeklyLearningGoalCard.jsx b/src/course-home/outline-tab/widgets/WeeklyLearningGoalCard.jsx index 65f45da7..961d62e9 100644 --- a/src/course-home/outline-tab/widgets/WeeklyLearningGoalCard.jsx +++ b/src/course-home/outline-tab/widgets/WeeklyLearningGoalCard.jsx @@ -8,6 +8,7 @@ import { useSelector } from 'react-redux'; import messages from '../messages'; import LearningGoalButton from './LearningGoalButton'; import { saveWeeklyLearningGoal } from '../../data'; +import { useModel } from '../../../generic/model-store'; function WeeklyLearningGoalCard({ daysPerWeek, @@ -18,6 +19,10 @@ function WeeklyLearningGoalCard({ courseId, } = useSelector(state => state.courseHome); + const { + isMasquerading, + } = useModel('courseHomeMeta', courseId); + const [daysPerWeekGoal, setDaysPerWeekGoal] = useState(daysPerWeek); // eslint-disable-next-line react/prop-types const [isGetReminderSelected, setGetReminderSelected] = useState(subscribedToReminders); @@ -27,13 +32,17 @@ function WeeklyLearningGoalCard({ const selectReminders = daysPerWeekGoal === null ? true : isGetReminderSelected; setGetReminderSelected(selectReminders); setDaysPerWeekGoal(days); - saveWeeklyLearningGoal(courseId, days, selectReminders); + if (!isMasquerading) { // don't save goal updates while masquerading + saveWeeklyLearningGoal(courseId, days, selectReminders); + } } function handleSubscribeToReminders(event) { const isGetReminderChecked = event.target.checked; setGetReminderSelected(isGetReminderChecked); - saveWeeklyLearningGoal(courseId, daysPerWeekGoal, isGetReminderChecked); + if (!isMasquerading) { // don't save goal updates while masquerading + saveWeeklyLearningGoal(courseId, daysPerWeekGoal, isGetReminderChecked); + } } return (