From 50d9012082ad24e6d957b5ab8b007cb0a8298501 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Tue, 23 Jul 2024 23:06:32 +0200 Subject: [PATCH 01/10] Removes refs to process.env and EnvironmentPlugin. Moves all env vars to APP_SETTINGS, properties renamed to align, supplied via envalid. --- frontends/README.md | 8 --- frontends/api/jest.config.ts | 4 +- frontends/api/src/axios.ts | 3 +- frontends/api/src/clients.ts | 4 +- frontends/api/src/test-utils/urls.ts | 2 +- frontends/api/src/types/settings.d.ts | 4 +- frontends/mit-open/.storybook/main.ts | 5 +- frontends/mit-open/jest.config.ts | 5 +- frontends/mit-open/src/App.tsx | 8 ++- frontends/mit-open/src/AppProviders.test.tsx | 4 +- frontends/mit-open/src/AppProviders.tsx | 8 ++- frontends/mit-open/src/common/urls.ts | 6 +- .../src/page-components/Footer/Footer.tsx | 2 +- .../LearningResourceDrawer.test.tsx | 2 +- .../LearningResourceDrawer.tsx | 8 +-- .../LearningPathListingPage.test.tsx | 2 +- .../src/pages/PrivacyPage/PrivacyPage.tsx | 3 +- .../UserListListingPage.test.tsx | 4 +- frontends/mit-open/src/types/settings.d.ts | 21 ++---- frontends/mit-open/webpack.config.js | 65 ++++++++++++------- frontends/ol-ckeditor/jest.config.ts | 8 +-- .../src/components/cloudServices.test.ts | 4 +- .../src/components/cloudServices.ts | 2 +- frontends/ol-ckeditor/src/types/settings.d.ts | 8 +-- frontends/ol-components/jest.config.ts | 2 +- .../src/components/EmbedlyCard/util.ts | 4 +- .../LearningResourceCard.tsx | 2 +- .../LearningResourceListCard.tsx | 2 +- .../ol-components/src/constants/imgConfigs.ts | 12 ++-- .../src/components/MITLogoLink.tsx | 2 +- .../ol-utilities/src/types/settings.d.ts | 19 +++--- frontends/ol-widgets/jest.config.ts | 2 +- frontends/package.json | 1 - package.json | 1 - 34 files changed, 122 insertions(+), 115 deletions(-) diff --git a/frontends/README.md b/frontends/README.md index cb4af9149d..dd252c2115 100644 --- a/frontends/README.md +++ b/frontends/README.md @@ -56,11 +56,3 @@ yarn watch ``` **Warning:** Depending on your host operating system (e.g., Macs), node packages installed on your host vs on the container may not be compatible. You may need to reinstall node_modules in order to run on host. - -### Running locally against RC - -For frontend-only work, you can run your frontend against the RC backend via - -```bash -yarn workspace frontends watch:rc -``` diff --git a/frontends/api/jest.config.ts b/frontends/api/jest.config.ts index 4ac2f039a7..39fac4ccc7 100644 --- a/frontends/api/jest.config.ts +++ b/frontends/api/jest.config.ts @@ -9,8 +9,8 @@ const config: Config.InitialOptions = { ], globals: { APP_SETTINGS: { - axios_with_credentials: "False", - axios_base_path: "", + MITOPEN_AXIOS_WITH_CREDENTIALS: false, + MIT_OPEN_API_BASE_URL: "", }, }, } diff --git a/frontends/api/src/axios.ts b/frontends/api/src/axios.ts index 15f955b9de..bdbe07e8be 100644 --- a/frontends/api/src/axios.ts +++ b/frontends/api/src/axios.ts @@ -7,8 +7,7 @@ const instance = axios.create({ xsrfCookieName: "csrftoken", xsrfHeaderName: "X-CSRFToken", withXSRFToken: true, - withCredentials: - APP_SETTINGS.axios_with_credentials?.toLowerCase() === "true", + withCredentials: APP_SETTINGS.MITOPEN_AXIOS_WITH_CREDENTIALS, }) export default instance diff --git a/frontends/api/src/clients.ts b/frontends/api/src/clients.ts index b0768a3f5a..f3500fafab 100644 --- a/frontends/api/src/clients.ts +++ b/frontends/api/src/clients.ts @@ -24,7 +24,9 @@ import { import axiosInstance from "./axios" -const BASE_PATH = process.env.MITOPEN_API_BASE_URL?.replace(/\/+$/, "") ?? "" +const { MITOPEN_API_BASE_URL } = APP_SETTINGS + +const BASE_PATH = MITOPEN_API_BASE_URL?.replace(/\/+$/, "") ?? "" const learningResourcesApi = new LearningResourcesApi( undefined, diff --git a/frontends/api/src/test-utils/urls.ts b/frontends/api/src/test-utils/urls.ts index ca3575339f..3f608c939a 100644 --- a/frontends/api/src/test-utils/urls.ts +++ b/frontends/api/src/test-utils/urls.ts @@ -26,7 +26,7 @@ import type { import type { BaseAPI } from "../generated/v1/base" import type { BaseAPI as BaseAPIv0 } from "../generated/v0/base" -const API_BASE_URL = process.env.MITOPEN_API_BASE_URL +const { MITOPEN_API_BASE_URL: API_BASE_URL } = APP_SETTINGS // OpenAPI Generator declares parameters using interfaces, which makes passing // them to functions a little annoying. diff --git a/frontends/api/src/types/settings.d.ts b/frontends/api/src/types/settings.d.ts index 21d40e72ae..0354c84532 100644 --- a/frontends/api/src/types/settings.d.ts +++ b/frontends/api/src/types/settings.d.ts @@ -2,7 +2,7 @@ export declare global { const APP_SETTINGS: { - axios_with_credentials?: string - axios_base_path?: string + MITOPEN_AXIOS_WITH_CREDENTIALS?: boolean + MITOPEN_API_BASE_URL?: string } } diff --git a/frontends/mit-open/.storybook/main.ts b/frontends/mit-open/.storybook/main.ts index 704846239a..9a386af71c 100644 --- a/frontends/mit-open/.storybook/main.ts +++ b/frontends/mit-open/.storybook/main.ts @@ -34,10 +34,9 @@ const config = { }, env: (config: any) => ({ ...config, - PUBLIC_URL: process.env.PUBLIC_URL || "", - EMBEDLY_KEY: process.env.EMBEDLY_KEY || "", APP_SETTINGS: { - embedlyKey: process.env.EMBEDLY_KEY || "", + PUBLIC_URL: process.env.PUBLIC_URL || "", + EMBEDLY_KEY: process.env.EMBEDLY_KEY || "", }, }), } diff --git a/frontends/mit-open/jest.config.ts b/frontends/mit-open/jest.config.ts index 0f60c4a731..5206bce005 100644 --- a/frontends/mit-open/jest.config.ts +++ b/frontends/mit-open/jest.config.ts @@ -15,10 +15,9 @@ const config: Config.InitialOptions = { transformIgnorePatterns: ["/node_modules/(?!(" + "yaml", ")/)"], globals: { APP_SETTINGS: { - embedlyKey: "embedly_key", - axios_base_path: "https://api.mitopen-test.odl.mit.edu", + EMBEDLY_KEY: "embedly_key", + MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", }, - MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", }, } diff --git a/frontends/mit-open/src/App.tsx b/frontends/mit-open/src/App.tsx index 0183305b97..46fbe7182c 100644 --- a/frontends/mit-open/src/App.tsx +++ b/frontends/mit-open/src/App.tsx @@ -8,11 +8,13 @@ import routes from "./routes" import AppProviders from "./AppProviders" Sentry.init({ - dsn: APP_SETTINGS.sentry_dsn, - release: APP_SETTINGS.release_version, - environment: APP_SETTINGS.environment, + dsn: APP_SETTINGS.SENTRY_DSN, + release: APP_SETTINGS.VERSION, + environment: APP_SETTINGS.ENVIRONMENT, }) +console.log("APP_SETTINGS", APP_SETTINGS) + const container = document.getElementById("app-container") invariant(container, "Could not find container element") const root = createRoot(container) diff --git a/frontends/mit-open/src/AppProviders.test.tsx b/frontends/mit-open/src/AppProviders.test.tsx index 5349863e37..2fdd906635 100644 --- a/frontends/mit-open/src/AppProviders.test.tsx +++ b/frontends/mit-open/src/AppProviders.test.tsx @@ -10,7 +10,7 @@ jest.mock("posthog-js/react", () => ({ describe("PostHogProvider", () => { it("Renders with PostHog support if enabled", async () => { - APP_SETTINGS.posthog = { + APP_SETTINGS.POSTHOG = { api_key: "12345", // pragma: allowlist secret } @@ -22,7 +22,7 @@ describe("PostHogProvider", () => { }) it("Renders without PostHog support if disabled", async () => { - APP_SETTINGS.posthog = { + APP_SETTINGS.POSTHOG = { api_key: "", // pragma: allowlist secret } diff --git a/frontends/mit-open/src/AppProviders.tsx b/frontends/mit-open/src/AppProviders.tsx index 22695357af..9748d40793 100644 --- a/frontends/mit-open/src/AppProviders.tsx +++ b/frontends/mit-open/src/AppProviders.tsx @@ -8,7 +8,6 @@ import { Provider as NiceModalProvider } from "@ebay/nice-modal-react" import { ThemeProvider } from "ol-components" import GlobalStyles from "./GlobalStyles" import { PostHogProvider } from "posthog-js/react" - import type { PostHogSettings } from "./types/settings" interface AppProps { @@ -16,16 +15,19 @@ interface AppProps { queryClient: QueryClient } +const { POSTHOG } = APP_SETTINGS + /** * Renders child with Router, QueryClientProvider, and other such context provides. */ const AppProviders: React.FC = ({ router, queryClient }) => { const phSettings: PostHogSettings = - APP_SETTINGS.posthog?.api_key && APP_SETTINGS.posthog.api_key.length > 0 - ? APP_SETTINGS.posthog + POSTHOG?.api_key && POSTHOG.api_key.length > 0 + ? POSTHOG : { api_key: "", } + const phOptions = { feature_flag_request_timeout_ms: phSettings.timeout || 3000, bootstrap: { diff --git a/frontends/mit-open/src/common/urls.ts b/frontends/mit-open/src/common/urls.ts index f38cb155a9..51eaaa4076 100644 --- a/frontends/mit-open/src/common/urls.ts +++ b/frontends/mit-open/src/common/urls.ts @@ -40,8 +40,10 @@ export const makeChannelManageWidgetsPath = ( name: string, ) => generatePath(CHANNEL_EDIT_WIDGETS, { channelType, name }) -export const LOGIN = `${process.env.MITOPEN_API_BASE_URL}/login/ol-oidc/` -export const LOGOUT = `${process.env.MITOPEN_API_BASE_URL}/logout/` +const { MITOPEN_API_BASE_URL } = APP_SETTINGS + +export const LOGIN = `${MITOPEN_API_BASE_URL}/login/ol-oidc/` +export const LOGOUT = `${MITOPEN_API_BASE_URL}/logout/` /** * Returns the URL to the login page, with a `next` parameter to redirect back diff --git a/frontends/mit-open/src/page-components/Footer/Footer.tsx b/frontends/mit-open/src/page-components/Footer/Footer.tsx index 2de4695d0e..d6df910d08 100644 --- a/frontends/mit-open/src/page-components/Footer/Footer.tsx +++ b/frontends/mit-open/src/page-components/Footer/Footer.tsx @@ -3,7 +3,7 @@ import { MITLogoLink } from "ol-utilities" import * as urls from "@/common/urls" import React, { FunctionComponent } from "react" -const PUBLIC_URL = process.env.PUBLIC_URL || "" +const PUBLIC_URL = APP_SETTINGS.PUBLIC_URL const HOME_URL = `${PUBLIC_URL}/` const FooterContainer = styled.div(({ theme }) => ({ diff --git a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx index f76fcd2b7f..ddbd22ec33 100644 --- a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx +++ b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx @@ -40,7 +40,7 @@ describe("LearningResourceDrawer", () => { ])( "Renders drawer content when resource=id is in the URL and captures the view if PostHog $descriptor", async (descriptor, enablePostHog) => { - APP_SETTINGS.posthog = { + APP_SETTINGS.POSTHOG = { api_key: enablePostHog ? "test1234" : "", // pragma: allowlist secret } const resource = factories.learningResources.resource() diff --git a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx index 1e0ff15c02..13196124b1 100644 --- a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx +++ b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx @@ -12,16 +12,14 @@ import { usePostHog } from "posthog-js/react" const RESOURCE_DRAWER_PARAMS = [RESOURCE_DRAWER_QUERY_PARAM] as const +const { POSTHOG } = APP_SETTINGS + const useCapturePageView = (resourceId: number) => { const { data, isSuccess } = useLearningResourcesDetail(Number(resourceId)) const posthog = usePostHog() useEffect(() => { - if ( - !APP_SETTINGS.posthog?.api_key || - APP_SETTINGS.posthog.api_key.length < 1 - ) - return + if (!POSTHOG?.api_key || POSTHOG.api_key.length < 1) return if (!isSuccess) return posthog.capture("lrd_view", { resourceId: data?.id, diff --git a/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.test.tsx b/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.test.tsx index 75fac9d5b7..b1eca00d5c 100644 --- a/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.test.tsx +++ b/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.test.tsx @@ -10,7 +10,7 @@ import { user, waitFor, } from "../../test-utils" -import type { User } from "../../types/settings" +import type { User } from "../../test-utils" /** * Set up the mock API responses for lists pages. diff --git a/frontends/mit-open/src/pages/PrivacyPage/PrivacyPage.tsx b/frontends/mit-open/src/pages/PrivacyPage/PrivacyPage.tsx index bad2f7d98d..a10cdd1590 100644 --- a/frontends/mit-open/src/pages/PrivacyPage/PrivacyPage.tsx +++ b/frontends/mit-open/src/pages/PrivacyPage/PrivacyPage.tsx @@ -51,8 +51,7 @@ const UnorderedList = styled.ul(({ theme }) => ({ ...theme.typography.body1, })) -const { SITE_NAME } = process.env -const { MITOPEN_SUPPORT_EMAIL } = process.env +const { SITE_NAME, MITOPEN_SUPPORT_EMAIL } = APP_SETTINGS const PrivacyPage: React.FC = () => { return ( diff --git a/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx b/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx index 5b737e0eb6..0719c9d9e8 100644 --- a/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx +++ b/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx @@ -9,7 +9,9 @@ import { expectProps, waitFor, } from "../../test-utils" -import type { User } from "../../types/settings" +// import type { User } from "../../types/settings" +import type { User } from "../../test-utils" + import { UserListListingPage } from "./UserListListingPage" import UserListCardTemplate from "@/page-components/UserListCardTemplate/UserListCardTemplate" import { manageListDialogs } from "@/page-components/ManageListDialogs/ManageListDialogs" diff --git a/frontends/mit-open/src/types/settings.d.ts b/frontends/mit-open/src/types/settings.d.ts index c59600fde5..d5c99ea243 100644 --- a/frontends/mit-open/src/types/settings.d.ts +++ b/frontends/mit-open/src/types/settings.d.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-var */ export type User = { id: number | null first_name: string | null @@ -15,22 +14,10 @@ export type PostHogSettings = { } export declare global { - interface Window { - SETTINGS: SETTINGS - } - - /** - * Settings injected by Django - */ - interface SETTINGS { - user: User - posthog?: PostHogSettings - } const APP_SETTINGS: { - search_page_size: number - sentry_dsn?: string - release_version?: string - environment?: string - embedlyKey: string + SENTRY_DSN?: string + VERSION?: string + ENVIRONMENT?: string + posthog?: PostHogSettings } } diff --git a/frontends/mit-open/webpack.config.js b/frontends/mit-open/webpack.config.js index 37ae525c2d..dce670cff1 100644 --- a/frontends/mit-open/webpack.config.js +++ b/frontends/mit-open/webpack.config.js @@ -26,14 +26,20 @@ const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin" const { cleanEnv, str, bool, port } = require("envalid") const { - NODE_ENV, ENVIRONMENT, + NODE_ENV, PORT, + VERSION, MITOPEN_API_BASE_URL, API_DEV_PROXY_BASE_URL, WEBPACK_ANALYZE, SITE_NAME, + PUBLIC_URL, MITOPEN_SUPPORT_EMAIL, + MITOPEN_AXIOS_WITH_CREDENTIALS, + EMBEDLY_KEY, + CKEDITOR_UPLOAD_URL, + SENTRY_DSN, } = cleanEnv(process.env, { ENVIRONMENT: str({ choices: ["local", "docker", "production"], @@ -47,6 +53,10 @@ const { desc: "Port to run the development server on", default: 8062, }), + VERSION: str({ + desc: "The current release version", + devDefault: "", + }), MITOPEN_API_BASE_URL: str({ desc: "Base URL for API requests", devDefault: "", @@ -61,13 +71,33 @@ const { default: false, }), SITE_NAME: str({ - desc: ["The name of the site, used in page titles"], + desc: "The name of the site, used in page titles", default: "MIT Open", }), + PUBLIC_URL: str({ + desc: "The site URL, for display", + default: "", + }), MITOPEN_SUPPORT_EMAIL: str({ desc: "Email address for support", default: "mitopen-support@mit.edu", }), + MITOPEN_AXIOS_WITH_CREDENTIALS: bool({ + desc: "Instructs the Axios API client to send credentials with requests", + default: false, + }), + EMBEDLY_KEY: str({ + desc: "Public API key for Embedly", + devDefault: "", + }), + CKEDITOR_UPLOAD_URL: str({ + desc: "Location of the CKEditor uploads handler", + default: "https://35904.cke-cs.com/easyimage/upload/", + }), + SENTRY_DSN: str({ + desc: "Sentry Data Source Name", + default: "", + }), }) const MITOPEN_FEATURES_PREFIX = "FEATURE_" @@ -182,28 +212,19 @@ module.exports = (env, argv) => { }), new webpack.DefinePlugin({ APP_SETTINGS: { - axios_with_credentials: JSON.stringify( - process.env.MITOPEN_AXIOS_WITH_CREDENTIALS, - ), - axios_base_path: JSON.stringify(process.env.MITOPEN_API_BASE_URL), - embedlyKey: JSON.stringify(process.env.EMBEDLY_KEY), - search_page_size: JSON.stringify( - process.env.OPENSEARCH_DEFAULT_PAGE_SIZE, - ), - ckeditor_upload_url: JSON.stringify(process.env.CKEDITOR_UPLOAD_URL), - environment: JSON.stringify(process.env.ENVIRONMENT), - sentry_dsn: JSON.stringify(process.env.SENTRY_DSN), - release_version: JSON.stringify(process.env.VERSION), - posthog: getPostHogSettings(), + MITOPEN_AXIOS_WITH_CREDENTIALS, + MITOPEN_API_BASE_URL: JSON.stringify(MITOPEN_API_BASE_URL), + EMBEDLY_KEY: JSON.stringify(EMBEDLY_KEY), + CKEDITOR_UPLOAD_URL: JSON.stringify(CKEDITOR_UPLOAD_URL), + ENVIRONMENT: JSON.stringify(ENVIRONMENT), + VERSION: JSON.stringify(VERSION), + SENTRY_DSN: JSON.stringify(SENTRY_DSN), + POSTHOG: getPostHogSettings(), + SITE_NAME: JSON.stringify(SITE_NAME), + MITOPEN_SUPPORT_EMAIL: JSON.stringify(MITOPEN_SUPPORT_EMAIL), + PUBLIC_URL: JSON.stringify(PUBLIC_URL), }, }), - new webpack.EnvironmentPlugin({ - // within app, define process.env.VAR_NAME with default from cleanEnv - MITOPEN_API_BASE_URL, - ENVIRONMENT, - SITE_NAME, - MITOPEN_SUPPORT_EMAIL, - }), ] .concat( isProduction diff --git a/frontends/ol-ckeditor/jest.config.ts b/frontends/ol-ckeditor/jest.config.ts index c481eb357b..c61fbbc330 100644 --- a/frontends/ol-ckeditor/jest.config.ts +++ b/frontends/ol-ckeditor/jest.config.ts @@ -13,10 +13,10 @@ const config: Config.InitialOptions = { ], globals: { APP_SETTINGS: { - ckeditor_upload_url: "https://meowmeow.com", - embedlyKey: "embedly_key", - axios_with_credentials: "False", - axios_base_path: "", + CKEDITOR_UPLOAD_URL: "https://meowmeow.com", + EMBEDLY_KEY: "embedly_key", + MITOPEN_AXIOS_WITH_CREDENTIALS: false, + MITOPEN_API_BASE_URL: "", }, }, } diff --git a/frontends/ol-ckeditor/src/components/cloudServices.test.ts b/frontends/ol-ckeditor/src/components/cloudServices.test.ts index 6cfa5435e0..fd5c8ccfe6 100644 --- a/frontends/ol-ckeditor/src/components/cloudServices.test.ts +++ b/frontends/ol-ckeditor/src/components/cloudServices.test.ts @@ -12,8 +12,8 @@ describe("cloudServicesConfig", () => { expect(token).toBe("the-cool-token") }) - test("ckeditor_upload_url is set from global SETTINGS", () => { - APP_SETTINGS.ckeditor_upload_url = "https://meowmeow.com" + test("CKEDITOR_UPLOAD_URL is set from global APP_SETTINGS", () => { + APP_SETTINGS.CKEDITOR_UPLOAD_URL = "https://meowmeow.com" const cloud = getCloudServicesConfig() expect(cloud.uploadUrl).toBe("https://meowmeow.com") }) diff --git a/frontends/ol-ckeditor/src/components/cloudServices.ts b/frontends/ol-ckeditor/src/components/cloudServices.ts index ad5df57ca4..7399e95bdf 100644 --- a/frontends/ol-ckeditor/src/components/cloudServices.ts +++ b/frontends/ol-ckeditor/src/components/cloudServices.ts @@ -3,7 +3,7 @@ import axios from "axios" const cloudServicesConfig = () => ({ - uploadUrl: APP_SETTINGS.ckeditor_upload_url, + uploadUrl: APP_SETTINGS.CKEDITOR_UPLOAD_URL, tokenUrl: async () => { const { data } = await axios.get("/api/v0/ckeditor/") return data.token as string diff --git a/frontends/ol-ckeditor/src/types/settings.d.ts b/frontends/ol-ckeditor/src/types/settings.d.ts index 5621faacd0..8f728b44e3 100644 --- a/frontends/ol-ckeditor/src/types/settings.d.ts +++ b/frontends/ol-ckeditor/src/types/settings.d.ts @@ -2,9 +2,9 @@ export declare global { const APP_SETTINGS: { - embedlyKey: string - ckeditor_upload_url?: string - axios_with_credentials: string - axios_base_path: string + EMBEDLY_KEY: string + CKEDITOR_UPLOAD_URL?: string + MITOPEN_AXIOS_WITH_CREDENTIALS: boolean + MITOPEN_API_BASE_URL: string } } diff --git a/frontends/ol-components/jest.config.ts b/frontends/ol-components/jest.config.ts index 964c95c06f..93803471a4 100644 --- a/frontends/ol-components/jest.config.ts +++ b/frontends/ol-components/jest.config.ts @@ -5,7 +5,7 @@ const config: Config.InitialOptions = { ...baseConfig, globals: { APP_SETTINGS: { - embedlyKey: "fake-embedly-key", + EMBEDLY_KEY: "fake-embedly-key", }, }, } diff --git a/frontends/ol-components/src/components/EmbedlyCard/util.ts b/frontends/ol-components/src/components/EmbedlyCard/util.ts index 49c72fcbc7..401896a75a 100644 --- a/frontends/ol-components/src/components/EmbedlyCard/util.ts +++ b/frontends/ol-components/src/components/EmbedlyCard/util.ts @@ -82,9 +82,9 @@ const createStylesheet = (doc: Document, css: string) => { } const getEmbedlyKey = (): string | null => { - const key = APP_SETTINGS.embedlyKey + const key = APP_SETTINGS.EMBEDLY_KEY if (typeof key === "string") return key - console.warn("APP_SETTINGS.embedlyKey should be a string.") + console.warn("APP_SETTINGS.EMBEDLY_KEY should be a string.") return null } diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index c8b0aa4b33..ca5831d490 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -44,7 +44,7 @@ const getEmbedlyUrl = ( isMedia: boolean, ) => { return embedlyCroppedImage(resource.image!.url!, { - key: APP_SETTINGS.embedlyKey || process.env.EMBEDLY_KEY!, + key: APP_SETTINGS.EMBEDLY_KEY, ...getImageDimensions(size, isMedia), }) } diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx index 8935db3c9b..a3738e21d7 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx @@ -93,7 +93,7 @@ type ResourceIdCallback = ( const getEmbedlyUrl = (url: string, isMobile: boolean) => { return embedlyCroppedImage(url, { - key: APP_SETTINGS.embedlyKey || process.env.EMBEDLY_KEY!, + key: APP_SETTINGS.EMBEDLY_KEY, ...IMAGE_SIZES[isMobile ? "mobile" : "desktop"], }) } diff --git a/frontends/ol-components/src/constants/imgConfigs.ts b/frontends/ol-components/src/constants/imgConfigs.ts index 1835da9c7f..1d7df45ae4 100644 --- a/frontends/ol-components/src/constants/imgConfigs.ts +++ b/frontends/ol-components/src/constants/imgConfigs.ts @@ -1,28 +1,30 @@ import type { EmbedlyConfig } from "ol-utilities" +const { EMBEDLY_KEY } = APP_SETTINGS + const imgConfigs = { row: { - key: APP_SETTINGS.embedlyKey, + key: EMBEDLY_KEY, width: 170, height: 130, }, "row-reverse": { - key: APP_SETTINGS.embedlyKey, + key: EMBEDLY_KEY, width: 170, height: 130, }, "row-reverse-small": { - key: APP_SETTINGS.embedlyKey, + key: EMBEDLY_KEY, width: 160, height: 100, }, column: { - key: APP_SETTINGS.embedlyKey, + key: EMBEDLY_KEY, width: 302, height: 182, }, large: { - key: APP_SETTINGS.embedlyKey, + key: EMBEDLY_KEY, width: 385, height: 200, }, diff --git a/frontends/ol-utilities/src/components/MITLogoLink.tsx b/frontends/ol-utilities/src/components/MITLogoLink.tsx index ea0bbe0e20..f2cb5fee79 100644 --- a/frontends/ol-utilities/src/components/MITLogoLink.tsx +++ b/frontends/ol-utilities/src/components/MITLogoLink.tsx @@ -1,6 +1,6 @@ import React from "react" -const PUBLIC_URL = process.env.PUBLIC_URL || "" +const PUBLIC_URL = APP_SETTINGS.PUBLIC_URL const HOME_URL = `${PUBLIC_URL}/` const MIT_LOGO_URL = `${PUBLIC_URL}/static/images/mit-logo-transparent4.svg` diff --git a/frontends/ol-utilities/src/types/settings.d.ts b/frontends/ol-utilities/src/types/settings.d.ts index 163628022f..c07998375d 100644 --- a/frontends/ol-utilities/src/types/settings.d.ts +++ b/frontends/ol-utilities/src/types/settings.d.ts @@ -8,13 +8,16 @@ export type PostHogSettings = { export declare global { declare const APP_SETTINGS: { - axios_with_credentials?: string - axios_base_path?: string - embedlyKey: string - ckeditor_upload_url?: string - sentry_dsn?: string - release_version?: string - environment?: string - posthog?: PostHogSettings + MITOPEN_AXIOS_WITH_CREDENTIALS?: boolean + MITOPEN_API_BASE_URL: string + EMBEDLY_KEY: string + CKEDITOR_UPLOAD_URL?: string + SENTRY_DSN?: string + VERSION?: string + ENVIRONMENT?: string + POSTHOG?: PostHogSettings + SITE_NAME: string + MITOPEN_SUPPORT_EMAIL: string + PUBLIC_URL: string } } diff --git a/frontends/ol-widgets/jest.config.ts b/frontends/ol-widgets/jest.config.ts index 14e9ba4e4b..06ab03c5f6 100644 --- a/frontends/ol-widgets/jest.config.ts +++ b/frontends/ol-widgets/jest.config.ts @@ -6,7 +6,7 @@ const config: Config.InitialOptions = { setupFilesAfterEnv: [...baseConfig.setupFilesAfterEnv, "./setupJest.ts"], globals: { APP_SETTINGS: { - embedlyKey: "fake-embedly-key", + EMBEDLY_KEY: "fake-embedly-key", }, }, } diff --git a/frontends/package.json b/frontends/package.json index d1ba3e57f9..a8a1c82490 100644 --- a/frontends/package.json +++ b/frontends/package.json @@ -15,7 +15,6 @@ "scripts": { "watch": "yarn workspace mit-open watch", "watch:docker": "yarn workspace mit-open watch:docker", - "watch:rc": "yarn workspace mit-open watch:rc", "build": "yarn workspace mit-open build", "lint-check": "eslint . --ext .js,.jsx,.ts,.tsx,.mdx", "lint-fix": "yarn lint-check --fix", diff --git a/package.json b/package.json index 16fb54b84d..ac3fb7d375 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "scripts": { "build": "yarn workspace mit-open run build", "watch": "yarn workspace mit-open run watch", - "watch:rc": "yarn workspace mit-open run watch:rc", "style-lint": "yarn workspace frontends run style-lint", "test": "MITOPEN_API_BASE_URL=https://api.mitopen-test.odl.mit.edu yarn workspace frontends global:test", "test-watch": "MITOPEN_API_BASE_URL=https://api.mitopen-test.odl.mit.edu yarn workspace frontends test-watch", From ff99f8a935c7460cc28a4bce5d5ab25598e212b5 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Wed, 24 Jul 2024 18:31:46 +0200 Subject: [PATCH 02/10] Provide base url for tests --- frontends/api/jest.config.ts | 2 +- frontends/mit-open/jest.config.ts | 1 + frontends/mit-open/webpack.config.js | 4 ++-- frontends/ol-ckeditor/jest.config.ts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/frontends/api/jest.config.ts b/frontends/api/jest.config.ts index 39fac4ccc7..6fd5ec7cba 100644 --- a/frontends/api/jest.config.ts +++ b/frontends/api/jest.config.ts @@ -10,7 +10,7 @@ const config: Config.InitialOptions = { globals: { APP_SETTINGS: { MITOPEN_AXIOS_WITH_CREDENTIALS: false, - MIT_OPEN_API_BASE_URL: "", + MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", }, }, } diff --git a/frontends/mit-open/jest.config.ts b/frontends/mit-open/jest.config.ts index 5206bce005..f084af41b6 100644 --- a/frontends/mit-open/jest.config.ts +++ b/frontends/mit-open/jest.config.ts @@ -17,6 +17,7 @@ const config: Config.InitialOptions = { APP_SETTINGS: { EMBEDLY_KEY: "embedly_key", MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", + PUBLIC_URL: "", }, }, } diff --git a/frontends/mit-open/webpack.config.js b/frontends/mit-open/webpack.config.js index dce670cff1..f702f44d21 100644 --- a/frontends/mit-open/webpack.config.js +++ b/frontends/mit-open/webpack.config.js @@ -55,7 +55,7 @@ const { }), VERSION: str({ desc: "The current release version", - devDefault: "", + default: "0.0.0", }), MITOPEN_API_BASE_URL: str({ desc: "Base URL for API requests", @@ -88,7 +88,7 @@ const { }), EMBEDLY_KEY: str({ desc: "Public API key for Embedly", - devDefault: "", + default: "EMBEDLY_KEY", }), CKEDITOR_UPLOAD_URL: str({ desc: "Location of the CKEditor uploads handler", diff --git a/frontends/ol-ckeditor/jest.config.ts b/frontends/ol-ckeditor/jest.config.ts index c61fbbc330..43cac65181 100644 --- a/frontends/ol-ckeditor/jest.config.ts +++ b/frontends/ol-ckeditor/jest.config.ts @@ -16,7 +16,7 @@ const config: Config.InitialOptions = { CKEDITOR_UPLOAD_URL: "https://meowmeow.com", EMBEDLY_KEY: "embedly_key", MITOPEN_AXIOS_WITH_CREDENTIALS: false, - MITOPEN_API_BASE_URL: "", + MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", }, }, } From 63e3a35b17df2b67b37f2753326251d462c9560f Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:37:15 +0200 Subject: [PATCH 03/10] Read value inside component render for tests --- frontends/mit-open/src/AppProviders.tsx | 15 +++++++-------- .../LearningResourceDrawer.test.tsx | 8 +++++--- .../LearningResourceDrawer.tsx | 5 +++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/frontends/mit-open/src/AppProviders.tsx b/frontends/mit-open/src/AppProviders.tsx index 9748d40793..99fac0f5a3 100644 --- a/frontends/mit-open/src/AppProviders.tsx +++ b/frontends/mit-open/src/AppProviders.tsx @@ -15,18 +15,17 @@ interface AppProps { queryClient: QueryClient } -const { POSTHOG } = APP_SETTINGS - /** * Renders child with Router, QueryClientProvider, and other such context provides. */ const AppProviders: React.FC = ({ router, queryClient }) => { - const phSettings: PostHogSettings = - POSTHOG?.api_key && POSTHOG.api_key.length > 0 - ? POSTHOG - : { - api_key: "", - } + const { POSTHOG } = APP_SETTINGS + + const phSettings: PostHogSettings = POSTHOG?.api_key?.length + ? POSTHOG + : { + api_key: "", + } const phOptions = { feature_flag_request_timeout_ms: phSettings.timeout || 3000, diff --git a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx index ddbd22ec33..87704724bd 100644 --- a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx +++ b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.test.tsx @@ -35,11 +35,11 @@ jest.mock("posthog-js/react", () => ({ describe("LearningResourceDrawer", () => { it.each([ - ["is enabled", true], - ["is not enabled", false], + { descriptor: "is enabled", enablePostHog: true }, + { descriptor: "is not enabled", enablePostHog: false }, ])( "Renders drawer content when resource=id is in the URL and captures the view if PostHog $descriptor", - async (descriptor, enablePostHog) => { + async ({ enablePostHog }) => { APP_SETTINGS.POSTHOG = { api_key: enablePostHog ? "test1234" : "", // pragma: allowlist secret } @@ -48,6 +48,7 @@ describe("LearningResourceDrawer", () => { urls.learningResources.details({ id: resource.id }), resource, ) + renderWithProviders(, { url: `?dog=woof&${RESOURCE_DRAWER_QUERY_PARAM}=${resource.id}`, }) @@ -56,6 +57,7 @@ describe("LearningResourceDrawer", () => { expectProps(LearningResourceExpanded, { resource }) }) await screen.findByRole("heading", { name: resource.title }) + if (enablePostHog) { expect(mockedPostHogCapture).toHaveBeenCalled() } else { diff --git a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx index 13196124b1..64724f2427 100644 --- a/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx +++ b/frontends/mit-open/src/page-components/LearningResourceDrawer/LearningResourceDrawer.tsx @@ -12,12 +12,12 @@ import { usePostHog } from "posthog-js/react" const RESOURCE_DRAWER_PARAMS = [RESOURCE_DRAWER_QUERY_PARAM] as const -const { POSTHOG } = APP_SETTINGS - const useCapturePageView = (resourceId: number) => { const { data, isSuccess } = useLearningResourcesDetail(Number(resourceId)) const posthog = usePostHog() + const { POSTHOG } = APP_SETTINGS + useEffect(() => { if (!POSTHOG?.api_key || POSTHOG.api_key.length < 1) return if (!isSuccess) return @@ -34,6 +34,7 @@ const useCapturePageView = (resourceId: number) => { data?.readable_id, data?.platform?.code, data?.resource_type, + POSTHOG?.api_key, ]) } From 2411c5d269acfe3a17f6f0337e910be164d1bb29 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:48:29 +0200 Subject: [PATCH 04/10] Type fix --- frontends/ol-ckeditor/src/types/settings.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontends/ol-ckeditor/src/types/settings.d.ts b/frontends/ol-ckeditor/src/types/settings.d.ts index 8f728b44e3..2e6bf39f98 100644 --- a/frontends/ol-ckeditor/src/types/settings.d.ts +++ b/frontends/ol-ckeditor/src/types/settings.d.ts @@ -6,5 +6,6 @@ export declare global { CKEDITOR_UPLOAD_URL?: string MITOPEN_AXIOS_WITH_CREDENTIALS: boolean MITOPEN_API_BASE_URL: string + PUBLIC_URL: string } } From 27490976f95371dfd319f8616ca7dee2cec8db51 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 15:09:58 +0200 Subject: [PATCH 05/10] Remove console log --- frontends/mit-open/src/App.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontends/mit-open/src/App.tsx b/frontends/mit-open/src/App.tsx index 46fbe7182c..828a739c2d 100644 --- a/frontends/mit-open/src/App.tsx +++ b/frontends/mit-open/src/App.tsx @@ -13,8 +13,6 @@ Sentry.init({ environment: APP_SETTINGS.ENVIRONMENT, }) -console.log("APP_SETTINGS", APP_SETTINGS) - const container = document.getElementById("app-container") invariant(container, "Could not find container element") const root = createRoot(container) From 04b0e8f3a61c5915e2406469fe63382c27abf38a Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 20:56:20 +0200 Subject: [PATCH 06/10] Removes remaining SITE_NAME refs on process.env --- frontends/jest.jsdom.config.ts | 2 - .../SignupPopover/SignupPopover.tsx | 2 +- .../src/pages/AboutPage/AboutPage.tsx | 6 +- frontends/mit-open/webpack.config.js | 2 +- .../InfoSection.test.tsx | 76 +++++++++++++++++++ .../ol-utilities/src/components/MetaTags.tsx | 2 +- 6 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx diff --git a/frontends/jest.jsdom.config.ts b/frontends/jest.jsdom.config.ts index 246e6514bd..6c7ce2b08f 100644 --- a/frontends/jest.jsdom.config.ts +++ b/frontends/jest.jsdom.config.ts @@ -1,8 +1,6 @@ import { resolve } from "path" import type { Config } from "@jest/types" -process.env.SITE_NAME = "MIT Open" - /** * Base configuration for jest tests. */ diff --git a/frontends/mit-open/src/page-components/SignupPopover/SignupPopover.tsx b/frontends/mit-open/src/page-components/SignupPopover/SignupPopover.tsx index 3e034c9279..64487d1b25 100644 --- a/frontends/mit-open/src/page-components/SignupPopover/SignupPopover.tsx +++ b/frontends/mit-open/src/page-components/SignupPopover/SignupPopover.tsx @@ -31,7 +31,7 @@ const SignupPopover: React.FC = (props) => { return ( - Join {process.env.SITE_NAME} for free. + Join {APP_SETTINGS.SITE_NAME} for free. As a member, get personalized recommendations, curate learning lists, diff --git a/frontends/mit-open/src/pages/AboutPage/AboutPage.tsx b/frontends/mit-open/src/pages/AboutPage/AboutPage.tsx index 1f13a0fd8a..b298de0651 100644 --- a/frontends/mit-open/src/pages/AboutPage/AboutPage.tsx +++ b/frontends/mit-open/src/pages/AboutPage/AboutPage.tsx @@ -165,11 +165,11 @@ const AboutPage: React.FC = () => { component="h2" id={WHAT_IS_MIT_OPEN_FRAGMENT_IDENTIFIER} > - What is {process.env.SITE_NAME}? + What is {APP_SETTINGS.SITE_NAME}? - {process.env.SITE_NAME} offers a single platform for accessing all - of MIT's non-degree learning resources. This includes courses, + {APP_SETTINGS.SITE_NAME} offers a single platform for accessing + all of MIT's non-degree learning resources. This includes courses, programs, and various educational materials from different MIT units such as MITx, MIT Bootcamps, MIT OpenCourseWare, MIT Professional Education, MIT Sloan Executive Education, MIT xPRO, diff --git a/frontends/mit-open/webpack.config.js b/frontends/mit-open/webpack.config.js index f702f44d21..63900495d2 100644 --- a/frontends/mit-open/webpack.config.js +++ b/frontends/mit-open/webpack.config.js @@ -92,7 +92,7 @@ const { }), CKEDITOR_UPLOAD_URL: str({ desc: "Location of the CKEditor uploads handler", - default: "https://35904.cke-cs.com/easyimage/upload/", + default: "", }), SENTRY_DSN: str({ desc: "Sentry Data Source Name", diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx new file mode 100644 index 0000000000..973b3ebe4a --- /dev/null +++ b/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx @@ -0,0 +1,76 @@ +import React from "react" +import { render, screen } from "@testing-library/react" +import { courses } from "../LearningResourceCard/testUtils" +import InfoSection from "./InfoSection" + +describe("Learning resource info section pricing", () => { + test("Free course, no certificate", () => { + render() + + screen.getByText("Free") + expect(screen.queryByText("Paid")).toBeNull() + expect(screen.queryByText("Earn a certificate:")).toBeNull() + expect(screen.queryByText("Certificate included")).toBeNull() + }) + + test("Free course, with certificate, one price", () => { + render() + + screen.getByText("Free") + expect(screen.queryByText("Paid")).toBeNull() + screen.getByText("Earn a certificate:") + screen.getByText("$49") + }) + + test("Free course, with certificate, price range", () => { + render() + + screen.getByText("Free") + expect(screen.queryByText("Paid")).toBeNull() + screen.getByText("Earn a certificate:") + screen.getByText("$49 – $99") + }) + + test("Unknown price, no certificate", () => { + render() + + screen.getByText("Paid") + expect(screen.queryByText("Free")).toBeNull() + expect(screen.queryByText("Earn a certificate:")).toBeNull() + expect(screen.queryByText("Certificate included")).toBeNull() + }) + + test("Unknown price, with certificate", () => { + render() + + screen.getByText("Paid") + expect(screen.queryByText("Free")).toBeNull() + screen.getByText("Certificate included") + }) + + test("Paid course, no certificate", () => { + render() + + screen.getByText("$49") + expect(screen.queryByText("Paid")).toBeNull() + expect(screen.queryByText("Free")).toBeNull() + expect(screen.queryByText("Earn a certificate:")).toBeNull() + expect(screen.queryByText("Certificate included")).toBeNull() + }) + + test("Paid course, with certificate, one price", () => { + render() + + screen.getByText("$49") + expect(screen.queryByText("Paid")).toBeNull() + screen.getByText("Certificate included") + }) + + test("Paid course, with certificate, price range", () => { + render() + + screen.getByText("$49 – $99") + expect(screen.queryByText("Paid")).toBeNull() + screen.getByText("Certificate included") + }) +}) diff --git a/frontends/ol-utilities/src/components/MetaTags.tsx b/frontends/ol-utilities/src/components/MetaTags.tsx index 6564a0a933..10662a17c6 100644 --- a/frontends/ol-utilities/src/components/MetaTags.tsx +++ b/frontends/ol-utilities/src/components/MetaTags.tsx @@ -27,7 +27,7 @@ const MetaTags: React.FC = ({ return ( - {[...title, process.env.SITE_NAME].join(" | ")} + {[...title, APP_SETTINGS.SITE_NAME].join(" | ")} {children} {canonicalLink ? ( From a2a772fd9676ec4739a7d811027922456283441d Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:08:40 +0200 Subject: [PATCH 07/10] Add to type --- frontends/ol-ckeditor/src/types/settings.d.ts | 1 + .../InfoSection.test.tsx | 76 ------------------- 2 files changed, 1 insertion(+), 76 deletions(-) delete mode 100644 frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx diff --git a/frontends/ol-ckeditor/src/types/settings.d.ts b/frontends/ol-ckeditor/src/types/settings.d.ts index 2e6bf39f98..e3c4ebdb16 100644 --- a/frontends/ol-ckeditor/src/types/settings.d.ts +++ b/frontends/ol-ckeditor/src/types/settings.d.ts @@ -7,5 +7,6 @@ export declare global { MITOPEN_AXIOS_WITH_CREDENTIALS: boolean MITOPEN_API_BASE_URL: string PUBLIC_URL: string + SITE_NAME: string } } diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx deleted file mode 100644 index 973b3ebe4a..0000000000 --- a/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.test.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from "react" -import { render, screen } from "@testing-library/react" -import { courses } from "../LearningResourceCard/testUtils" -import InfoSection from "./InfoSection" - -describe("Learning resource info section pricing", () => { - test("Free course, no certificate", () => { - render() - - screen.getByText("Free") - expect(screen.queryByText("Paid")).toBeNull() - expect(screen.queryByText("Earn a certificate:")).toBeNull() - expect(screen.queryByText("Certificate included")).toBeNull() - }) - - test("Free course, with certificate, one price", () => { - render() - - screen.getByText("Free") - expect(screen.queryByText("Paid")).toBeNull() - screen.getByText("Earn a certificate:") - screen.getByText("$49") - }) - - test("Free course, with certificate, price range", () => { - render() - - screen.getByText("Free") - expect(screen.queryByText("Paid")).toBeNull() - screen.getByText("Earn a certificate:") - screen.getByText("$49 – $99") - }) - - test("Unknown price, no certificate", () => { - render() - - screen.getByText("Paid") - expect(screen.queryByText("Free")).toBeNull() - expect(screen.queryByText("Earn a certificate:")).toBeNull() - expect(screen.queryByText("Certificate included")).toBeNull() - }) - - test("Unknown price, with certificate", () => { - render() - - screen.getByText("Paid") - expect(screen.queryByText("Free")).toBeNull() - screen.getByText("Certificate included") - }) - - test("Paid course, no certificate", () => { - render() - - screen.getByText("$49") - expect(screen.queryByText("Paid")).toBeNull() - expect(screen.queryByText("Free")).toBeNull() - expect(screen.queryByText("Earn a certificate:")).toBeNull() - expect(screen.queryByText("Certificate included")).toBeNull() - }) - - test("Paid course, with certificate, one price", () => { - render() - - screen.getByText("$49") - expect(screen.queryByText("Paid")).toBeNull() - screen.getByText("Certificate included") - }) - - test("Paid course, with certificate, price range", () => { - render() - - screen.getByText("$49 – $99") - expect(screen.queryByText("Paid")).toBeNull() - screen.getByText("Certificate included") - }) -}) From a71d65f42474c7f66fec286b32849f7de1c76e7d Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:30:58 +0200 Subject: [PATCH 08/10] Add to test globals --- frontends/mit-open/jest.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontends/mit-open/jest.config.ts b/frontends/mit-open/jest.config.ts index f084af41b6..d85982912e 100644 --- a/frontends/mit-open/jest.config.ts +++ b/frontends/mit-open/jest.config.ts @@ -18,6 +18,7 @@ const config: Config.InitialOptions = { EMBEDLY_KEY: "embedly_key", MITOPEN_API_BASE_URL: "https://api.mitopen-test.odl.mit.edu", PUBLIC_URL: "", + SITE_NAME: "MIT Open", }, }, } From 7d60f3fa01273a114457f4b95e227072b73dffa5 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:51:26 +0200 Subject: [PATCH 09/10] Remove comment --- .../src/pages/UserListListingPage/UserListListingPage.test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx b/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx index 0719c9d9e8..753b9e9c39 100644 --- a/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx +++ b/frontends/mit-open/src/pages/UserListListingPage/UserListListingPage.test.tsx @@ -9,7 +9,6 @@ import { expectProps, waitFor, } from "../../test-utils" -// import type { User } from "../../types/settings" import type { User } from "../../test-utils" import { UserListListingPage } from "./UserListListingPage" From 90b62fd74c108312b64de6140ec4e1f72fb6c03d Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Thu, 25 Jul 2024 22:14:33 +0200 Subject: [PATCH 10/10] Use APP_SETTINGS in urls test --- frontends/mit-open/src/common/urls.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontends/mit-open/src/common/urls.test.ts b/frontends/mit-open/src/common/urls.test.ts index d1f3ed85dc..0fbdc25aec 100644 --- a/frontends/mit-open/src/common/urls.test.ts +++ b/frontends/mit-open/src/common/urls.test.ts @@ -1,6 +1,6 @@ import { login } from "./urls" -const { MITOPEN_API_BASE_URL } = process.env +const { MITOPEN_API_BASE_URL } = APP_SETTINGS test("login encodes the next parameter appropriately", () => { expect(login()).toBe(