From dde570ad9bab5abab4dc47e76ed34dd8bdae4390 Mon Sep 17 00:00:00 2001 From: Jessica Lawshe <5312836+lawshe@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:55:18 -0500 Subject: [PATCH] Merge pull request #35065 from overleaf/jel-cleanup-domain-captured-by-group [web] Remove `domain-captured-by-group` rollout flag for user settings GitOrigin-RevId: f7fe0e66649e4cd4b94124f8f2eefa150758203a --- .../src/Features/User/UserPagesController.mjs | 6 +---- .../settings/components/emails/add-email.tsx | 23 +++++-------------- .../settings/components/emails/row.tsx | 11 ++------- .../components/emails/emails-row.test.tsx | 19 +++++++-------- .../emails-section-add-new-email.test.tsx | 15 ++++-------- 5 files changed, 21 insertions(+), 53 deletions(-) diff --git a/services/web/app/src/Features/User/UserPagesController.mjs b/services/web/app/src/Features/User/UserPagesController.mjs index 1a7c57dd45..482d2af984 100644 --- a/services/web/app/src/Features/User/UserPagesController.mjs +++ b/services/web/app/src/Features/User/UserPagesController.mjs @@ -123,11 +123,7 @@ async function settingsPage(req, res) { } await SplitTestHandler.promises.getAssignment(req, res, 'email-notifications') - await SplitTestHandler.promises.getAssignment( - req, - res, - 'domain-captured-by-group' - ) + res.render('user/settings', { title: 'account_settings', user: { diff --git a/services/web/frontend/js/features/settings/components/emails/add-email.tsx b/services/web/frontend/js/features/settings/components/emails/add-email.tsx index d2722c269d..609f7df31c 100644 --- a/services/web/frontend/js/features/settings/components/emails/add-email.tsx +++ b/services/web/frontend/js/features/settings/components/emails/add-email.tsx @@ -22,16 +22,12 @@ import { ConfirmEmailForm } from '@/features/settings/components/emails/confirm- import RecaptchaConditions from '@/shared/components/recaptcha-conditions' import SsoLinkingInfoGroup from './add-email/sso-linking-info-group' import Notification from '@/shared/components/notification' -import { useFeatureFlag } from '@/shared/context/split-test-context' -function isDomainCapturedByGroup( - domainInfo: DomainInfo, - domainCapturedByGroupRolloutFlagEnabled: boolean -): boolean { - return domainCapturedByGroupRolloutFlagEnabled - ? (domainInfo.capturedByGroup && domainInfo.group?.domainCaptureEnabled) || - false - : domainInfo.group?.domainCaptureEnabled || false +function isDomainCapturedByGroup(domainInfo: DomainInfo): boolean { + return ( + (domainInfo.capturedByGroup && domainInfo.group?.domainCaptureEnabled) || + false + ) } function AddEmail() { @@ -60,10 +56,6 @@ function AddEmail() { const emailAddressLimit = getMeta('ol-emailAddressLimit') || 10 const { ref: recaptchaRef, getReCaptchaToken } = useRecaptcha() - const domainCapturedByGroupRolloutFlagEnabled = useFeatureFlag( - 'domain-captured-by-group' - ) - useEffect(() => { setUserEmailsContextLoading(isLoading) }, [setUserEmailsContextLoading, isLoading]) @@ -212,10 +204,7 @@ function AddEmail() { } const isDomainCaptured = newEmailMatchedDomain - ? isDomainCapturedByGroup( - newEmailMatchedDomain, - domainCapturedByGroupRolloutFlagEnabled - ) + ? isDomainCapturedByGroup(newEmailMatchedDomain) : false const isSsoAvailableForDomain = newEmailMatchedDomain && diff --git a/services/web/frontend/js/features/settings/components/emails/row.tsx b/services/web/frontend/js/features/settings/components/emails/row.tsx index 592162c1e8..20415d0bd2 100644 --- a/services/web/frontend/js/features/settings/components/emails/row.tsx +++ b/services/web/frontend/js/features/settings/components/emails/row.tsx @@ -8,7 +8,6 @@ import Actions from './actions' import { institutionAlreadyLinked } from '../../utils/selectors' import { useUserEmailsContext } from '../../context/user-email-context' import getMeta from '../../../../utils/meta' -import { useFeatureFlag } from '@/shared/context/split-test-context' import { ssoAvailableForInstitution } from '../../utils/sso' import ReconfirmationInfo from './reconfirmation-info' import { useLocation } from '../../../../shared/hooks/use-location' @@ -72,10 +71,6 @@ function SSOAffiliationInfo({ userEmailData }: SSOAffiliationInfoProps) { const [linkAccountsButtonDisabled, setLinkAccountsButtonDisabled] = useState(false) - const domainCapturedByGroupRolloutFlagEnabled = useFeatureFlag( - 'domain-captured-by-group' - ) - function handleLinkAccountsButtonClick() { setLinkAccountsButtonDisabled(true) location.assign( @@ -145,10 +140,8 @@ function SSOAffiliationInfo({ userEmailData }: SSOAffiliationInfoProps) { } const domainAlsoForGroupWithDomainCapture = - domainCapturedByGroupRolloutFlagEnabled - ? userEmailData?.affiliation?.domainCapturedByGroup && - userEmailData?.affiliation?.group?.domainCaptureEnabled - : userEmailData?.affiliation?.group?.domainCaptureEnabled + userEmailData?.affiliation?.domainCapturedByGroup && + userEmailData?.affiliation?.group?.domainCaptureEnabled if (domainAlsoForGroupWithDomainCapture) { // user is not linked via Commons and should link via groups diff --git a/services/web/test/frontend/features/settings/components/emails/emails-row.test.tsx b/services/web/test/frontend/features/settings/components/emails/emails-row.test.tsx index 4f8fe2b5ce..7fdb7822bf 100644 --- a/services/web/test/frontend/features/settings/components/emails/emails-row.test.tsx +++ b/services/web/test/frontend/features/settings/components/emails/emails-row.test.tsx @@ -150,6 +150,7 @@ describe('', function () { }) it('does not prompt the user to link to their institutional account', function () { + affiliatedEmailWithDomainCaptureAndCommons.affiliation.domainCapturedByGroup = true renderEmailsRow(affiliatedEmailWithDomainCaptureAndCommons) expect(() => getByTextContent( @@ -170,16 +171,13 @@ describe('', function () { .null }) - it('uses `domainCapturedByGroup` when the feature flag is enabled', function () { + it('uses `domainCapturedByGroup`', function () { affiliatedEmailWithDomainCaptureAndCommons.affiliation.group = { _id: 'grou123', domainCaptureEnabled: true, managedUsersEnabled: true, } affiliatedEmailWithDomainCaptureAndCommons.affiliation.domainCapturedByGroup = true - window.metaAttributesCache.set('ol-splitTestVariants', { - 'domain-captured-by-group': 'enabled', - }) renderEmailsRow(affiliatedEmailWithDomainCaptureAndCommons) @@ -187,17 +185,16 @@ describe('', function () { .null }) - it('ignores group domain capture when the feature flag is enabled and the domain is not captured', function () { + it('still prompts to link Commons SSO when domainCaptureEnabled but domain not captured by group', function () { + affiliatedEmailWithDomainCaptureAndCommons.affiliation.group = { + _id: 'grou123', + domainCaptureEnabled: true, + managedUsersEnabled: true, + } affiliatedEmailWithDomainCaptureAndCommons.affiliation.domainCapturedByGroup = false - window.metaAttributesCache.set('ol-splitTestVariants', { - 'domain-captured-by-group': 'enabled', - }) renderEmailsRow(affiliatedEmailWithDomainCaptureAndCommons) - getByTextContent( - 'You can now link your Overleaf account to your Overleaf institutional account.' - ) screen.getByRole('button', { name: 'Link accounts' }) }) }) diff --git a/services/web/test/frontend/features/settings/components/emails/emails-section-add-new-email.test.tsx b/services/web/test/frontend/features/settings/components/emails/emails-section-add-new-email.test.tsx index 59e34c5b8d..781159b34f 100644 --- a/services/web/test/frontend/features/settings/components/emails/emails-section-add-new-email.test.tsx +++ b/services/web/test/frontend/features/settings/components/emails/emails-section-add-new-email.test.tsx @@ -768,6 +768,7 @@ describe('', function () { enabled: true, }, }, + capturedByGroup: true, } fetchMock.get('express:/institutions/domains', [institution]) @@ -811,6 +812,7 @@ describe('', function () { enabled: true, }, }, + capturedByGroup: true, } fetchMock.get('express:/institutions/domains', [institution]) @@ -903,6 +905,7 @@ describe('', function () { enabled: true, }, }, + capturedByGroup: true, } fetchMock.get('express:/institutions/domains', [institution]) @@ -936,17 +939,7 @@ describe('', function () { }) }) - describe('when the domain-captured-by-group feature flag is enabled', function () { - beforeEach(function () { - window.metaAttributesCache.set('ol-splitTestVariants', { - 'domain-captured-by-group': 'enabled', - }) - }) - - afterEach(function () { - window.metaAttributesCache.set('ol-splitTestVariants', {}) - }) - + describe('domain capturedByGroup', function () { describe('and capturedByGroup is true with managedUsersEnabled', function () { beforeEach(async function () { await fetchMock.callHistory.flush(true)