diff --git a/packages/common/src/controllers/AccountController.ts b/packages/common/src/controllers/AccountController.ts index b02b27711..c17004d89 100644 --- a/packages/common/src/controllers/AccountController.ts +++ b/packages/common/src/controllers/AccountController.ts @@ -181,7 +181,7 @@ export default class AccountController { if (error.message.toLowerCase().includes('invalid param email')) { throw new FormValidationError({ email: [i18next.t('account:login.wrong_email')] }); } else { - throw new FormValidationError({ email: [i18next.t('account:login.wrong_combination')] }); + throw new FormValidationError({ form: [i18next.t('account:login.wrong_combination')] }); } } } diff --git a/packages/ui-react/src/containers/Layout/Layout.module.scss b/packages/ui-react/src/containers/Layout/Layout.module.scss index a279f359e..230e9d3b0 100644 --- a/packages/ui-react/src/containers/Layout/Layout.module.scss +++ b/packages/ui-react/src/containers/Layout/Layout.module.scss @@ -11,14 +11,14 @@ flex: 1; } -div.footer { +.footer { padding: 20px 40px; line-height: 18px; letter-spacing: 0.15px; text-align: center; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.14), 0 3px 4px rgba(0, 0, 0, 0.12), 0 1px 5px rgba(0, 0, 0, 0.2); - > div > a, + a, a:visited, a:active, a:hover { diff --git a/packages/ui-react/src/pages/LegacySeries/LegacySeries.tsx b/packages/ui-react/src/pages/LegacySeries/LegacySeries.tsx index 8fed6a372..fb5dec05e 100644 --- a/packages/ui-react/src/pages/LegacySeries/LegacySeries.tsx +++ b/packages/ui-react/src/pages/LegacySeries/LegacySeries.tsx @@ -74,7 +74,7 @@ const LegacySeries = () => { // User, entitlement const { user, subscription } = useAccountStore(({ user, subscription }) => ({ user, subscription }), shallow); - const { isEntitled, mediaOffers } = useEntitlement(episode); + const { isEntitled, mediaOffers } = useEntitlement(episode || firstEpisode); const hasMediaOffers = !!mediaOffers.length; const isLoggedIn = !!user; const hasSubscription = !!subscription; diff --git a/packages/ui-react/src/pages/ScreenRouting/mediaScreens/MediaSeries/MediaSeries.tsx b/packages/ui-react/src/pages/ScreenRouting/mediaScreens/MediaSeries/MediaSeries.tsx index 8718a703f..e95a91a85 100644 --- a/packages/ui-react/src/pages/ScreenRouting/mediaScreens/MediaSeries/MediaSeries.tsx +++ b/packages/ui-react/src/pages/ScreenRouting/mediaScreens/MediaSeries/MediaSeries.tsx @@ -105,7 +105,7 @@ const MediaSeries: ScreenComponent = ({ data: seriesMedia }) => { // User, entitlement const { user, subscription } = useAccountStore(({ user, subscription }) => ({ user, subscription }), shallow); - const { isEntitled, mediaOffers } = useEntitlement(episode); + const { isEntitled, mediaOffers } = useEntitlement(episode || firstEpisode); const hasMediaOffers = !!mediaOffers.length; const isLoggedIn = !!user; diff --git a/platforms/web/.env b/platforms/web/.env index aa4aa1497..9093ba1ec 100644 --- a/platforms/web/.env +++ b/platforms/web/.env @@ -3,6 +3,7 @@ APP_PLAYER_ID=M4qoGvUk ### Web-only env vars (not sent to common/src/env configureEnv()) +APP_FOOTER_TEXT=\u00a9 JW Player | [jwplayer.com](https://www.jwplayer.com/) # the default language that the app should load when the language couldn't be detected APP_DEFAULT_LANGUAGE=en diff --git a/platforms/web/test-e2e/tests/inline_layout_test.ts b/platforms/web/test-e2e/tests/inline_layout_test.ts index 423715e26..601558f11 100644 --- a/platforms/web/test-e2e/tests/inline_layout_test.ts +++ b/platforms/web/test-e2e/tests/inline_layout_test.ts @@ -50,7 +50,7 @@ Scenario('I can see the series inline player layout', async ({ I }) => { I.see(constants.minecraftAnimationWorkshopDescription); I.see('Favorite'); I.see('Share'); - I.seeTextEquals('Minecraft Animation Workshop', 'h2'); + I.seeTextEquals('Minecraft Animation Workshop', 'h1'); I.see('Season 1', locate({ css: 'select' }).inside(videoListLocator)); I.see('S1:E2', locate({ css: 'a[aria-label="Basics Of Blender"]' }).inside(videoListLocator)); I.see('S1:E3', locate({ css: 'a[aria-label="Using Mineways"]' }).inside(videoListLocator)); diff --git a/platforms/web/test-e2e/tests/payments/subscription_test.ts b/platforms/web/test-e2e/tests/payments/subscription_test.ts index f62c3e3b3..ffa3fe8b2 100644 --- a/platforms/web/test-e2e/tests/payments/subscription_test.ts +++ b/platforms/web/test-e2e/tests/payments/subscription_test.ts @@ -13,6 +13,7 @@ const jwProps: ProviderProps = { creditCard: constants.creditCard.inplayer, applicableTax: 0, canRenewSubscription: false, + canOpenReceipts: false, fieldWrapper: '', hasInlineOfferSwitch: true, }; @@ -25,6 +26,7 @@ const cleengProps: ProviderProps = { creditCard: constants.creditCard.cleeng, applicableTax: 21, canRenewSubscription: true, + canOpenReceipts: false, // Cleeng returns an error on Sandbox making this test flaky fieldWrapper: 'iframe', hasInlineOfferSwitch: false, }; @@ -204,13 +206,15 @@ function runTestSuite(props: ProviderProps, providerName: string) { I.scrollPageToBottom(); - // Open the invoice which is opened in a new tab - I.click('Show receipt'); - I.switchToNextTab(); + if (props.canOpenReceipts) { + // Open the invoice which is opened in a new tab + I.click('Show receipt'); + I.switchToNextTab(); - // Assert invoice functionality by validating the presence of the purchase button - I.seeElement('.purchase-button'); - I.closeCurrentTab(); + // Assert invoice functionality by validating the presence of the purchase button + I.seeElement('.purchase-button'); + I.closeCurrentTab(); + } } }); } diff --git a/platforms/web/test/types.ts b/platforms/web/test/types.ts index b86ca280c..5eb66a16f 100644 --- a/platforms/web/test/types.ts +++ b/platforms/web/test/types.ts @@ -21,6 +21,7 @@ export type ProviderProps = { creditCard: string; applicableTax: number; canRenewSubscription: boolean; + canOpenReceipts?: boolean; shouldMakePayment?: boolean; locale?: string | undefined; fieldWrapper?: string;