Skip to content

Commit 68f54c8

Browse files
authored
Update styled enrolled button not to show arrow (#3372)
* Update styled enrolled button not to show arrow
1 parent 7975312 commit 68f54c8

3 files changed

Lines changed: 86 additions & 4 deletions

File tree

frontends/main/src/app-pages/ProductPages/ProgramEnrollmentButton.test.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,82 @@ describe("ProgramEnrollmentButton", () => {
217217
expect(button).toHaveTextContent(ENROLL_PROGRAM)
218218
})
219219

220+
test("Hides arrow icon when showArrowIcon is false", async () => {
221+
const program = makeProgram({
222+
enrollment_modes: [makeEnrollmentMode({ requires_payment: true })],
223+
products: [makeProduct({ price: "500" })],
224+
})
225+
226+
setMockResponse.get(mitxUrls.programEnrollments.enrollmentsListV3(), [])
227+
setMockResponse.get(
228+
urls.userMe.get(),
229+
makeUser({ is_authenticated: false }),
230+
)
231+
232+
renderWithProviders(
233+
<ProgramEnrollmentButton
234+
program={program}
235+
variant="primary"
236+
showArrowIcon={false}
237+
/>,
238+
)
239+
240+
await screen.findByRole("button", { name: ENROLL_PROGRAM })
241+
expect(screen.queryByTestId("program-enroll-arrow-icon")).toBeNull()
242+
})
243+
244+
test("Still shows loading spinner when showArrowIcon is false", async () => {
245+
const product = makeProduct({ price: "500" })
246+
const program = makeProgram({
247+
enrollment_modes: [makeEnrollmentMode({ requires_payment: true })],
248+
products: [product],
249+
})
250+
251+
setMockResponse.get(mitxUrls.programEnrollments.enrollmentsListV3(), [])
252+
setMockResponse.get(urls.userMe.get(), makeUser({ is_authenticated: true }))
253+
const { promise } = Promise.withResolvers()
254+
setMockResponse.delete(mitxUrls.baskets.clear(), promise)
255+
256+
renderWithProviders(
257+
<ProgramEnrollmentButton
258+
program={program}
259+
variant="primary"
260+
showArrowIcon={false}
261+
/>,
262+
)
263+
264+
const button = await screen.findByRole("button", { name: ENROLL_PROGRAM })
265+
await user.click(button)
266+
267+
await screen.findByRole("progressbar", { name: "Loading" })
268+
expect(screen.queryByTestId("program-enroll-arrow-icon")).toBeNull()
269+
})
270+
271+
test("Still shows loading spinner during initial loading when showArrowIcon is false", async () => {
272+
const program = makeProgram({
273+
enrollment_modes: [makeEnrollmentMode({ requires_payment: false })],
274+
})
275+
const enrollmentResponse = Promise.withResolvers()
276+
const userResponse = Promise.withResolvers()
277+
278+
setMockResponse.get(
279+
mitxUrls.programEnrollments.enrollmentsListV3(),
280+
enrollmentResponse.promise,
281+
)
282+
setMockResponse.get(urls.userMe.get(), userResponse.promise)
283+
284+
renderWithProviders(
285+
<ProgramEnrollmentButton
286+
program={program}
287+
variant="primary"
288+
showArrowIcon={false}
289+
/>,
290+
)
291+
292+
await screen.findByRole("progressbar", { name: "Loading" })
293+
expect(screen.queryByTestId("program-enroll-arrow-icon")).toBeNull()
294+
})
295+
220296
test("Shows error alert when basket operation fails (paid)", async () => {
221297
const product = makeProduct({ price: "500" })
222298
const program = makeProgram({

frontends/main/src/app-pages/ProductPages/ProgramEnrollmentButton.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,14 @@ type ProgramEnrollmentButtonProps = {
5454
variant?: ButtonProps["variant"]
5555
className?: string
5656
displayAsCourse?: boolean
57+
showArrowIcon?: boolean
5758
}
5859
const ProgramEnrollmentButton: React.FC<ProgramEnrollmentButtonProps> = ({
5960
program,
6061
variant = "primary",
6162
className,
6263
displayAsCourse,
64+
showArrowIcon = true,
6365
}) => {
6466
const [anchor, setAnchor] = React.useState<null | HTMLButtonElement>(null)
6567
const me = useQuery(userQueries.me())
@@ -148,11 +150,11 @@ const ProgramEnrollmentButton: React.FC<ProgramEnrollmentButtonProps> = ({
148150
endIcon={
149151
isLoading || isPending ? (
150152
<LoadingSpinner size="16px" loading={true} color="inherit" />
151-
) : (
152-
<EnrollButtonIcon>
153+
) : showArrowIcon ? (
154+
<EnrollButtonIcon data-testid="program-enroll-arrow-icon">
153155
<RiArrowRightSLine aria-hidden="true" />
154156
</EnrollButtonIcon>
155-
)
157+
) : undefined
156158
}
157159
>
158160
{isLoading ? null : enrollButtonLabel}

frontends/main/src/app-pages/ProductPages/ProgramPage.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,11 @@ const ProgramPage: React.FC<ProgramPageProps> = ({ readableId }) => {
295295
imageSrc={imageSrc}
296296
videoUrl={page.video_url}
297297
enrollmentAction={
298-
<StyledProgramEnrollmentButton program={program} variant="bordered" />
298+
<StyledProgramEnrollmentButton
299+
program={program}
300+
variant="bordered"
301+
showArrowIcon={false}
302+
/>
299303
}
300304
showStayUpdated={
301305
program.enrollment_modes.length > 0 &&

0 commit comments

Comments
 (0)