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)