From 3f0dc71d6c065f416d0f3eacd562d17c315f6705 Mon Sep 17 00:00:00 2001
From: ilkin-overleaf <100852799+ilkin-overleaf@users.noreply.github.com>
Date: Fri, 5 Dec 2025 16:27:29 +0200
Subject: [PATCH] Merge pull request #29823 from
overleaf/ii-domain-capture-member-limit-check
[web] Domain capture member limit check
GitOrigin-RevId: bce12fc67aee9cbcc40a10e91585b39def4dfdf6
---
.../web/app/src/Features/Errors/Errors.js | 3 +++
.../web/frontend/extracted-translations.json | 1 +
services/web/locales/en.json | 1 +
.../components/domain-capture.spec.tsx | 19 +++++++++++++++++++
4 files changed, 24 insertions(+)
diff --git a/services/web/app/src/Features/Errors/Errors.js b/services/web/app/src/Features/Errors/Errors.js
index 7eb37d7a2b..4b06d50203 100644
--- a/services/web/app/src/Features/Errors/Errors.js
+++ b/services/web/app/src/Features/Errors/Errors.js
@@ -198,6 +198,8 @@ class SAMLRequestDeniedError extends SAMLAuthenticationError {
class SAMLDomainCaptureManagedUserMissingEmailError extends OError {}
+class SAMLGroupMemberLimitReachedError extends OError {}
+
class SAMLDomainCaptureManagedOptInUserMissingEmailError extends SAMLDomainCaptureError {}
class SAMLSessionDataMissing extends BackwardCompatibleError {
@@ -385,6 +387,7 @@ module.exports = {
SAMLRequestDeniedError,
SAMLDomainCaptureRegisterError,
SAMLDomainCaptureManagedUserMissingEmailError,
+ SAMLGroupMemberLimitReachedError,
SAMLDomainCaptureManagedOptInUserMissingEmailError,
SLInV2Error,
ThirdPartyIdentityExistsError,
diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json
index 982097f7f6..d5c3036882 100644
--- a/services/web/frontend/extracted-translations.json
+++ b/services/web/frontend/extracted-translations.json
@@ -748,6 +748,7 @@
"good_news_you_are_already_receiving_this_add_on_via_writefull": "",
"group_admin": "",
"group_audit_logs": "",
+ "group_has_no_licenses_available_error": "",
"group_invitations": "",
"group_invite_has_been_sent_to_email": "",
"group_libraries": "",
diff --git a/services/web/locales/en.json b/services/web/locales/en.json
index e4b2016ff5..5502ac64b8 100644
--- a/services/web/locales/en.json
+++ b/services/web/locales/en.json
@@ -963,6 +963,7 @@
"group_admin": "Group admin",
"group_audit_logs": "Group audit logs",
"group_full": "This group is already full",
+ "group_has_no_licenses_available_error": "Sorry, your group has no licenses available. Please contact your administrator to request a license.",
"group_invitations": "Group invitations",
"group_invite_has_been_sent_to_email": "Group invite has been sent to <0>__email__0>",
"group_libraries": "Group Libraries",
diff --git a/services/web/test/frontend/features/group-management/components/domain-capture.spec.tsx b/services/web/test/frontend/features/group-management/components/domain-capture.spec.tsx
index 4f1235e0cc..7059ada075 100644
--- a/services/web/test/frontend/features/group-management/components/domain-capture.spec.tsx
+++ b/services/web/test/frontend/features/group-management/components/domain-capture.spec.tsx
@@ -117,6 +117,25 @@ describe('', function () {
)
})
+ it('renders group limit reached error message', function () {
+ const notificationsInstitution = [
+ { templateKey: 'notification_group_member_limit_reached' },
+ ]
+ cy.window().then(win => {
+ win.metaAttributesCache.set(
+ 'ol-notificationsInstitution',
+ notificationsInstitution
+ )
+ })
+ cy.mount()
+
+ cy.findByRole('alert').should(
+ 'contain.text',
+ 'Sorry, your group has no licenses available. ' +
+ 'Please contact your administrator to request a license.'
+ )
+ })
+
it('renders institution error message', function () {
const errorMsg = 'Error message'
const notificationsInstitution = [