@oneuptime/common 13.0.8 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/BaseAPI.ts +26 -5
- package/Server/API/GlobalConfigAPI.ts +228 -462
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/StatusPageAPI.ts +100 -42
- package/Server/API/TeamMemberAPI.ts +10 -1
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/UserAuthorization.ts +38 -16
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +56 -4
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/ProjectService.ts +284 -0
- package/Server/Services/RumSessionPinService.ts +25 -6
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Markdown.test.ts +181 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +26 -5
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +93 -43
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +8 -1
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -4
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +214 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +24 -6
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import {
|
|
3
|
+
afterEach,
|
|
4
|
+
beforeEach,
|
|
5
|
+
describe,
|
|
6
|
+
expect,
|
|
7
|
+
jest,
|
|
8
|
+
test,
|
|
9
|
+
} from "@jest/globals";
|
|
10
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
11
|
+
import React, { FunctionComponent, ReactElement, ReactNode } from "react";
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* Settings > Enterprise Licenses and one license: the core shells left at the
|
|
15
|
+
* old page paths after the license server's screens moved to
|
|
16
|
+
* ee/AdminDashboard/EnterpriseLicenses.
|
|
17
|
+
*
|
|
18
|
+
* The screens belong to the OneUptime Cloud license server, so the shells
|
|
19
|
+
* render the Enterprise plugin only when billing is enabled, and otherwise
|
|
20
|
+
* keep the "Only available on OneUptime Cloud" state the page has always shown
|
|
21
|
+
* on self-hosted installs. A Cloud deployment whose Admin Dashboard was built
|
|
22
|
+
* without the Enterprise plugin says so instead.
|
|
23
|
+
*
|
|
24
|
+
* Billing is pinned in every test (CI's config.env sets BILLING_ENABLED=true).
|
|
25
|
+
* The plugins are the Community stub unless a test hands in a fake - this is
|
|
26
|
+
* core, and must pass with ee/ deleted.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
let billingEnabledForTest: boolean = false;
|
|
30
|
+
|
|
31
|
+
jest.mock("../../../UI/Config", () => {
|
|
32
|
+
const actual: Record<string, unknown> = jest.requireActual(
|
|
33
|
+
"../../../UI/Config",
|
|
34
|
+
) as Record<string, unknown>;
|
|
35
|
+
|
|
36
|
+
const mocked: Record<string, unknown> = { ...actual };
|
|
37
|
+
|
|
38
|
+
Object.defineProperty(mocked, "BILLING_ENABLED", {
|
|
39
|
+
get: (): boolean => {
|
|
40
|
+
return billingEnabledForTest;
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
return mocked;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
jest.mock("react-i18next", () => {
|
|
48
|
+
return {
|
|
49
|
+
useTranslation: () => {
|
|
50
|
+
return {
|
|
51
|
+
t: (key: string): string => {
|
|
52
|
+
return key;
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// The page frame is not what this suite is about; keep its title and children.
|
|
60
|
+
jest.mock("../../../UI/Components/Page/Page", () => {
|
|
61
|
+
return {
|
|
62
|
+
__esModule: true,
|
|
63
|
+
default: (props: { title?: string; children: ReactNode }): ReactElement => {
|
|
64
|
+
return (
|
|
65
|
+
<div data-testid="page" data-title={props.title}>
|
|
66
|
+
{props.children}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* The plugin door, pointed at whatever the test sets. Starts as the real
|
|
75
|
+
* Community stub (what "@oneuptime/ee-admin-dashboard" is in core).
|
|
76
|
+
*/
|
|
77
|
+
let mockPluginsForTest: Record<string, unknown> = {};
|
|
78
|
+
|
|
79
|
+
jest.mock(
|
|
80
|
+
"../../../../App/FeatureSet/AdminDashboard/src/Enterprise/Plugins",
|
|
81
|
+
() => {
|
|
82
|
+
return {
|
|
83
|
+
getAdminDashboardPlugins: (): Record<string, unknown> => {
|
|
84
|
+
return mockPluginsForTest;
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
import CommunityPlugins from "../../../../App/FeatureSet/AdminDashboard/src/Enterprise/CommunityPlugins";
|
|
91
|
+
import EnterpriseLicenses from "../../../../App/FeatureSet/AdminDashboard/src/Pages/EnterpriseLicenses/Index";
|
|
92
|
+
import EnterpriseLicenseView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/EnterpriseLicenses/View/Index";
|
|
93
|
+
|
|
94
|
+
const FakeLicensesList: FunctionComponent = (): ReactElement => {
|
|
95
|
+
return <div data-testid="ee-licenses-list" />;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const FakeLicenseView: FunctionComponent = (): ReactElement => {
|
|
99
|
+
return <div data-testid="ee-license-view" />;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const CLOUD_ONLY_TITLE: string = "Only available on OneUptime Cloud";
|
|
103
|
+
const ENTERPRISE_BUILD_TITLE: string =
|
|
104
|
+
"Requires the OneUptime Enterprise Edition";
|
|
105
|
+
|
|
106
|
+
interface ShellCase {
|
|
107
|
+
name: string;
|
|
108
|
+
Shell: FunctionComponent;
|
|
109
|
+
pluginKey: "EnterpriseLicensesList" | "EnterpriseLicenseView";
|
|
110
|
+
Fake: FunctionComponent;
|
|
111
|
+
testId: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const SHELLS: Array<ShellCase> = [
|
|
115
|
+
{
|
|
116
|
+
name: "the license list",
|
|
117
|
+
Shell: EnterpriseLicenses,
|
|
118
|
+
pluginKey: "EnterpriseLicensesList",
|
|
119
|
+
Fake: FakeLicensesList,
|
|
120
|
+
testId: "ee-licenses-list",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "one license",
|
|
124
|
+
Shell: EnterpriseLicenseView,
|
|
125
|
+
pluginKey: "EnterpriseLicenseView",
|
|
126
|
+
Fake: FakeLicenseView,
|
|
127
|
+
testId: "ee-license-view",
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
|
|
131
|
+
beforeEach(() => {
|
|
132
|
+
billingEnabledForTest = false;
|
|
133
|
+
mockPluginsForTest = CommunityPlugins as unknown as Record<string, unknown>;
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
afterEach(() => {
|
|
137
|
+
cleanup();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe.each(SHELLS)(
|
|
141
|
+
"Enterprise Licenses shell: $name",
|
|
142
|
+
(shell: ShellCase) => {
|
|
143
|
+
test("the Community build has no license screens at all", () => {
|
|
144
|
+
expect(CommunityPlugins).toEqual({});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("self-hosted Community Edition: the Cloud-only empty state", () => {
|
|
148
|
+
const { Shell } = shell;
|
|
149
|
+
|
|
150
|
+
render(<Shell />);
|
|
151
|
+
|
|
152
|
+
expect(screen.getByText(CLOUD_ONLY_TITLE)).toBeInTheDocument();
|
|
153
|
+
expect(
|
|
154
|
+
screen.getByText(
|
|
155
|
+
"Enterprise licenses are issued and tracked on the hosted oneuptime.com, where billing is enabled. This self-hosted instance does not manage licenses.",
|
|
156
|
+
),
|
|
157
|
+
).toBeInTheDocument();
|
|
158
|
+
expect(screen.getByTestId("page")).toHaveAttribute(
|
|
159
|
+
"data-title",
|
|
160
|
+
"pages.enterpriseLicenses.title",
|
|
161
|
+
);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("self-hosted Enterprise Edition: still the Cloud-only empty state - the plugin is never rendered", () => {
|
|
165
|
+
const { Shell, Fake } = shell;
|
|
166
|
+
|
|
167
|
+
mockPluginsForTest = { [shell.pluginKey]: Fake };
|
|
168
|
+
|
|
169
|
+
render(<Shell />);
|
|
170
|
+
|
|
171
|
+
expect(screen.getByText(CLOUD_ONLY_TITLE)).toBeInTheDocument();
|
|
172
|
+
expect(screen.queryByTestId(shell.testId)).not.toBeInTheDocument();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test("OneUptime Cloud with the Enterprise plugin: the Enterprise screen", () => {
|
|
176
|
+
const { Shell, Fake } = shell;
|
|
177
|
+
|
|
178
|
+
billingEnabledForTest = true;
|
|
179
|
+
mockPluginsForTest = { [shell.pluginKey]: Fake };
|
|
180
|
+
|
|
181
|
+
render(<Shell />);
|
|
182
|
+
|
|
183
|
+
expect(screen.getByTestId(shell.testId)).toBeInTheDocument();
|
|
184
|
+
expect(screen.queryByText(CLOUD_ONLY_TITLE)).not.toBeInTheDocument();
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test("OneUptime Cloud built without the plugin: says the Enterprise Edition is required", () => {
|
|
188
|
+
const { Shell } = shell;
|
|
189
|
+
|
|
190
|
+
billingEnabledForTest = true;
|
|
191
|
+
|
|
192
|
+
render(<Shell />);
|
|
193
|
+
|
|
194
|
+
expect(screen.getByText(ENTERPRISE_BUILD_TITLE)).toBeInTheDocument();
|
|
195
|
+
expect(screen.queryByText(CLOUD_ONLY_TITLE)).not.toBeInTheDocument();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("reads only its own plugin key", () => {
|
|
199
|
+
const { Shell, Fake } = shell;
|
|
200
|
+
const otherKey: string =
|
|
201
|
+
shell.pluginKey === "EnterpriseLicensesList"
|
|
202
|
+
? "EnterpriseLicenseView"
|
|
203
|
+
: "EnterpriseLicensesList";
|
|
204
|
+
|
|
205
|
+
billingEnabledForTest = true;
|
|
206
|
+
mockPluginsForTest = { [otherKey]: Fake };
|
|
207
|
+
|
|
208
|
+
render(<Shell />);
|
|
209
|
+
|
|
210
|
+
expect(screen.queryByTestId(shell.testId)).not.toBeInTheDocument();
|
|
211
|
+
expect(screen.getByText(ENTERPRISE_BUILD_TITLE)).toBeInTheDocument();
|
|
212
|
+
});
|
|
213
|
+
},
|
|
214
|
+
);
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import {
|
|
3
|
+
afterEach,
|
|
4
|
+
beforeEach,
|
|
5
|
+
describe,
|
|
6
|
+
expect,
|
|
7
|
+
jest,
|
|
8
|
+
test,
|
|
9
|
+
} from "@jest/globals";
|
|
10
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
11
|
+
import React, { FunctionComponent, ReactElement, ReactNode } from "react";
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* Settings > Global SSO and Global OIDC (the provider lists and one
|
|
15
|
+
* provider's page) are Enterprise Edition screens
|
|
16
|
+
* (ee/AdminDashboard/GlobalSSO). Core keeps a shell at each page's original
|
|
17
|
+
* path, so App.tsx and its routes never changed: the shell renders the
|
|
18
|
+
* Enterprise screen on the Enterprise Edition when the bundle includes it,
|
|
19
|
+
* and otherwise the upsell card the page used to show, inside the settings
|
|
20
|
+
* layout.
|
|
21
|
+
*
|
|
22
|
+
* "@oneuptime/ee-admin-dashboard" is replaced by a plugin object the tests
|
|
23
|
+
* fill in, standing in for the Enterprise bundle; left empty it is the
|
|
24
|
+
* Community bundle. Billing and the edition are pinned in every test: CI's
|
|
25
|
+
* config.env sets BILLING_ENABLED=true, and the admin rule must not depend
|
|
26
|
+
* on it. The page chrome (Page, the settings side menu) is replaced by a
|
|
27
|
+
* plain wrapper that shows the side menu and breadcrumbs.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
let billingEnabledForTest: boolean = false;
|
|
31
|
+
let enterpriseEditionForTest: boolean = false;
|
|
32
|
+
|
|
33
|
+
jest.mock("../../../UI/Config", () => {
|
|
34
|
+
const actual: Record<string, unknown> = jest.requireActual(
|
|
35
|
+
"../../../UI/Config",
|
|
36
|
+
) as Record<string, unknown>;
|
|
37
|
+
|
|
38
|
+
const mocked: Record<string, unknown> = { ...actual };
|
|
39
|
+
|
|
40
|
+
Object.defineProperty(mocked, "BILLING_ENABLED", {
|
|
41
|
+
get: (): boolean => {
|
|
42
|
+
return billingEnabledForTest;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
Object.defineProperty(mocked, "IS_ENTERPRISE_EDITION", {
|
|
47
|
+
get: (): boolean => {
|
|
48
|
+
return enterpriseEditionForTest;
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return mocked;
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
jest.mock("../../../UI/Components/Page/Page", () => {
|
|
56
|
+
return {
|
|
57
|
+
__esModule: true,
|
|
58
|
+
default: (props: {
|
|
59
|
+
title?: string;
|
|
60
|
+
breadcrumbLinks?: Array<{ title: string }>;
|
|
61
|
+
sideMenu?: ReactNode;
|
|
62
|
+
children?: ReactNode;
|
|
63
|
+
}): ReactElement => {
|
|
64
|
+
return (
|
|
65
|
+
<div data-testid="settings-page">
|
|
66
|
+
{props.sideMenu}
|
|
67
|
+
<div data-testid="settings-page-breadcrumbs">
|
|
68
|
+
{(props.breadcrumbLinks || [])
|
|
69
|
+
.map((link: { title: string }) => {
|
|
70
|
+
return link.title;
|
|
71
|
+
})
|
|
72
|
+
.join(" > ")}
|
|
73
|
+
</div>
|
|
74
|
+
{props.children}
|
|
75
|
+
</div>
|
|
76
|
+
);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
jest.mock(
|
|
82
|
+
"../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/SideMenu",
|
|
83
|
+
() => {
|
|
84
|
+
return {
|
|
85
|
+
__esModule: true,
|
|
86
|
+
default: (): ReactElement => {
|
|
87
|
+
return <nav data-testid="settings-side-menu" />;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* What getAdminDashboardPlugins() returns in this suite. The shells read it
|
|
95
|
+
* on every render, so each test fills it in after the shells were imported.
|
|
96
|
+
*/
|
|
97
|
+
const mockAdminEnterprisePlugins: Record<string, unknown> = {};
|
|
98
|
+
|
|
99
|
+
jest.mock("@oneuptime/ee-admin-dashboard", () => {
|
|
100
|
+
return { __esModule: true, default: mockAdminEnterprisePlugins };
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
import SettingsGlobalOIDC from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalOIDC/Index";
|
|
104
|
+
import SettingsGlobalOIDCView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalOIDC/View";
|
|
105
|
+
import SettingsGlobalSSO from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalSSO/Index";
|
|
106
|
+
import SettingsGlobalSSOView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalSSO/View";
|
|
107
|
+
import { AdminDashboardEnterprisePluginKey } from "../../../../App/FeatureSet/AdminDashboard/src/Enterprise/EnterprisePlugins";
|
|
108
|
+
|
|
109
|
+
interface ShellCase {
|
|
110
|
+
name: string;
|
|
111
|
+
Shell: FunctionComponent;
|
|
112
|
+
pluginKey: AdminDashboardEnterprisePluginKey;
|
|
113
|
+
// The upsell copy (and breadcrumb) the page showed before it moved to ee/.
|
|
114
|
+
provider: "Global SSO" | "Global OIDC";
|
|
115
|
+
upsellDescription: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const GLOBAL_SSO_DESCRIPTION: string =
|
|
119
|
+
"Instance-wide SAML 2.0 identity providers that can be connected to any project on this OneUptime server.";
|
|
120
|
+
const GLOBAL_OIDC_DESCRIPTION: string =
|
|
121
|
+
"Instance-wide OpenID Connect identity providers that can be connected to any project on this OneUptime server.";
|
|
122
|
+
|
|
123
|
+
const SHELLS: Array<ShellCase> = [
|
|
124
|
+
{
|
|
125
|
+
name: "Global SSO list",
|
|
126
|
+
Shell: SettingsGlobalSSO,
|
|
127
|
+
pluginKey: "GlobalSSOList",
|
|
128
|
+
provider: "Global SSO",
|
|
129
|
+
upsellDescription: GLOBAL_SSO_DESCRIPTION,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "Global SSO provider",
|
|
133
|
+
Shell: SettingsGlobalSSOView,
|
|
134
|
+
pluginKey: "GlobalSSOView",
|
|
135
|
+
provider: "Global SSO",
|
|
136
|
+
upsellDescription: GLOBAL_SSO_DESCRIPTION,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: "Global OIDC list",
|
|
140
|
+
Shell: SettingsGlobalOIDC,
|
|
141
|
+
pluginKey: "GlobalOIDCList",
|
|
142
|
+
provider: "Global OIDC",
|
|
143
|
+
upsellDescription: GLOBAL_OIDC_DESCRIPTION,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "Global OIDC provider",
|
|
147
|
+
Shell: SettingsGlobalOIDCView,
|
|
148
|
+
pluginKey: "GlobalOIDCView",
|
|
149
|
+
provider: "Global OIDC",
|
|
150
|
+
upsellDescription: GLOBAL_OIDC_DESCRIPTION,
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
const makeFakeScreen: (pluginKey: string) => FunctionComponent = (
|
|
155
|
+
pluginKey: string,
|
|
156
|
+
): FunctionComponent => {
|
|
157
|
+
const FakeScreen: FunctionComponent = (): ReactElement => {
|
|
158
|
+
return <div data-testid="enterprise-screen">{pluginKey}</div>;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
return FakeScreen;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const installPlugins: (
|
|
165
|
+
keys: Array<AdminDashboardEnterprisePluginKey>,
|
|
166
|
+
) => void = (keys: Array<AdminDashboardEnterprisePluginKey>): void => {
|
|
167
|
+
for (const key of keys) {
|
|
168
|
+
mockAdminEnterprisePlugins[key] = makeFakeScreen(key);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const clearPlugins: () => void = (): void => {
|
|
173
|
+
for (const key of Object.keys(mockAdminEnterprisePlugins)) {
|
|
174
|
+
delete mockAdminEnterprisePlugins[key];
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
beforeEach(() => {
|
|
179
|
+
billingEnabledForTest = false;
|
|
180
|
+
enterpriseEditionForTest = false;
|
|
181
|
+
clearPlugins();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
afterEach(() => {
|
|
185
|
+
cleanup();
|
|
186
|
+
clearPlugins();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
describe.each(SHELLS)("$name shell", (shell: ShellCase) => {
|
|
190
|
+
test.each([false, true])(
|
|
191
|
+
"Community Edition (billing=%s): the upsell inside the settings layout, even when a plugin is present",
|
|
192
|
+
(billing: boolean) => {
|
|
193
|
+
billingEnabledForTest = billing;
|
|
194
|
+
installPlugins([shell.pluginKey]);
|
|
195
|
+
|
|
196
|
+
render(<shell.Shell />);
|
|
197
|
+
|
|
198
|
+
expect(screen.getByTestId("settings-page")).toBeInTheDocument();
|
|
199
|
+
expect(screen.getByTestId("settings-side-menu")).toBeInTheDocument();
|
|
200
|
+
expect(screen.getByTestId("settings-page-breadcrumbs")).toHaveTextContent(
|
|
201
|
+
shell.provider,
|
|
202
|
+
);
|
|
203
|
+
expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
|
|
204
|
+
expect(
|
|
205
|
+
screen.getAllByText("Learn about Enterprise Edition").length,
|
|
206
|
+
).toBeGreaterThan(0);
|
|
207
|
+
expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
|
|
208
|
+
},
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
test.each([false, true])(
|
|
212
|
+
"Enterprise Edition (billing=%s): the Enterprise screen, on its own",
|
|
213
|
+
(billing: boolean) => {
|
|
214
|
+
billingEnabledForTest = billing;
|
|
215
|
+
enterpriseEditionForTest = true;
|
|
216
|
+
installPlugins([shell.pluginKey]);
|
|
217
|
+
|
|
218
|
+
render(<shell.Shell />);
|
|
219
|
+
|
|
220
|
+
expect(screen.getByTestId("enterprise-screen")).toHaveTextContent(
|
|
221
|
+
shell.pluginKey,
|
|
222
|
+
);
|
|
223
|
+
// The Enterprise screen brings its own layout.
|
|
224
|
+
expect(screen.queryByTestId("settings-page")).not.toBeInTheDocument();
|
|
225
|
+
expect(
|
|
226
|
+
screen.queryByText(shell.upsellDescription),
|
|
227
|
+
).not.toBeInTheDocument();
|
|
228
|
+
},
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
test("Enterprise Edition on a Community bundle: the upsell", () => {
|
|
232
|
+
enterpriseEditionForTest = true;
|
|
233
|
+
|
|
234
|
+
render(<shell.Shell />);
|
|
235
|
+
|
|
236
|
+
expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
|
|
237
|
+
expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
test("renders its own plugin key when every Global SSO screen is present", () => {
|
|
241
|
+
enterpriseEditionForTest = true;
|
|
242
|
+
installPlugins(
|
|
243
|
+
SHELLS.map((each: ShellCase) => {
|
|
244
|
+
return each.pluginKey;
|
|
245
|
+
}),
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
render(<shell.Shell />);
|
|
249
|
+
|
|
250
|
+
expect(screen.getByTestId("enterprise-screen")).toHaveTextContent(
|
|
251
|
+
shell.pluginKey,
|
|
252
|
+
);
|
|
253
|
+
expect(screen.getAllByTestId("enterprise-screen")).toHaveLength(1);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test("ignores the other Global SSO screens", () => {
|
|
257
|
+
enterpriseEditionForTest = true;
|
|
258
|
+
installPlugins(
|
|
259
|
+
SHELLS.map((each: ShellCase) => {
|
|
260
|
+
return each.pluginKey;
|
|
261
|
+
}).filter((key: AdminDashboardEnterprisePluginKey) => {
|
|
262
|
+
return key !== shell.pluginKey;
|
|
263
|
+
}),
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
render(<shell.Shell />);
|
|
267
|
+
|
|
268
|
+
expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
|
|
269
|
+
expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
|
|
270
|
+
});
|
|
271
|
+
});
|