Skip to content

refactor: split oauth2 settings form#1034

Draft
saw-jan wants to merge 8 commits into
release/2.11from
refactor/separate-oauth2-settings
Draft

refactor: split oauth2 settings form#1034
saw-jan wants to merge 8 commits into
release/2.11from
refactor/separate-oauth2-settings

Conversation

@saw-jan
Copy link
Copy Markdown
Collaborator

@saw-jan saw-jan commented Jun 2, 2026

Description

Related Issue or Workpackage

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Tests only (no source changes)

Checklist:

  • Code changes
  • Unit tests added
  • Acceptance tests added
  • Updated CHANGELOG.md file

saw-jan added 6 commits June 1, 2026 09:37
* refactor: split sso settings form

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* refactor: remove unused code

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

fix: remove form stepper

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: fix jest unit tests

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: add FormSSOSettings component unit test

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

fix: consistent styles

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

---------

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
@saw-jan saw-jan self-assigned this Jun 2, 2026
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the admin settings UI by extracting the OAuth2 and OIDC/SSO configuration sections from AdminSettings.vue into dedicated components, and reorganizes Jest coverage accordingly. This aligns with the goal of reducing the size/complexity of AdminSettings.vue while keeping the multi-step admin setup behavior.

Changes:

  • Split OAuth2 settings into a new FormOAuthSettings.vue component and corresponding Jest spec/snapshots.
  • Split OIDC/SSO settings into a new FormSSOSettings.vue component and corresponding Jest spec.
  • Simplify AdminSettings.vue by removing the inline OAuth/SSO forms and the now-unused settingsFlowGenerator.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/components/AdminSettings.vue Removes inline OAuth/SSO blocks and renders new form components; adjusts completion logic/watchers.
src/components/admin/FormOAuthSettings.vue New OAuth2 settings component (OpenProject + Nextcloud OAuth client handling).
src/components/admin/FormSSOSettings.vue New SSO/OIDC settings component.
src/components/admin/FormOpenProjectHost.vue Removes stepper-based gating (currentSetting) and always shows the server host form.
src/components/admin/FormAuthMethod.vue Switches from currentSetting gating to formState.serverHost.complete.
src/utils.js Removes settingsFlowGenerator; updates comments on form ordering.
src/api/settings.js / src/api/endpoints.js Adds API helper + endpoint for creating a Nextcloud OAuth client.
tests/jest/components/AdminSettings.spec.js Drops large in-component OAuth/SSO tests (moved to new component specs); updates remaining setup tests.
tests/jest/components/admin/FormOAuthSettings.spec.js + snapshot Adds unit tests and snapshots for new OAuth settings component.
tests/jest/components/admin/FormSSOSettings.spec.js Adds unit tests for new SSO settings component.
tests/jest/components/admin/FormOpenProjectHost.spec.js Updates tests to match removal of currentSetting.
tests/jest/components/admin/FormAuthMethod.spec.js + snapshot Updates tests and snapshots to use formState instead of currentSetting.
tests/jest/components/__snapshots__/AdminSettings.spec.js.snap Removes snapshots for sections moved out of AdminSettings.vue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Comment thread src/components/admin/FormOAuthSettings.vue
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

JS Code Coverage

Coverage after merging refactor/separate-oauth2-settings into release/2.11 will be
91.36%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
src
   adminSettings.js0%0%0%0%1, 1, 10–19, 2–9
   bootstrap.js0%0%0%0%1, 1, 10–12, 2–9
   dashboard.js0%0%0%0%1, 1, 10–19, 2–9
   fileActions.js0%0%0%0%1, 1, 10–19, 2, 20–23, 3–9
   personalSettings.js0%0%0%0%1, 1, 10–19, 2–9
   projectTab.js0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50, 6–9
   reference.js0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–45, 5–9
   utils.js85.92%33.33%50%87.59%12–20, 23–32
src/api
   endpoints.js100%100%100%100%
   settings.js59.09%100%0%68.42%10–11, 14–15, 18–19
src/components
   AdminSettings.vue96.05%94.26%96.08%96.31%448–453, 456–461, 527–528, 532–533, 536–537, 541–542, 552–557, 588–590, 609–611, 691–693, 727–729
   ErrorLabel.vue100%100%100%100%
   OAuthConnectButton.vue91.85%75%100%93.28%64–69, 72–76
   PersonalSettings.vue92.02%95.65%90%91.71%133–134, 144–149, 152–161
src/components/admin
   FieldValue.vue100%100%100%100%
   FormAuthMethod.vue98.12%96.88%100%98.12%222–224, 247–250
   FormHeading.vue100%100%100%100%
   FormOAuthSettings.vue97.63%96.23%93.10%98.12%220, 251, 342, 364, 382–384, 406–408
   FormOpenProjectHost.vue98.87%94.74%100%99.34%167–169, 279
   FormSSOSettings.vue98.57%97.18%96.55%98.91%231–233, 242–243, 358–359
   TermsOfServiceUnsigned.vue100%100%100%100%
   TextInput.vue100%100%100%100%
src/components/icons
   ClippyIcon.vue100%100%100%100%
   OpenProjectIcon.vue100%100%100%100%
src/components/settings
   CheckBox.vue100%100%100%100%
   ErrorNote.vue100%100%100%100%
   SettingsTitle.vue94.74%80%100%95.35%49–53
src/components/tab
   EmptyContent.vue96.45%80.95%100%98.24%102–105, 107–108, 97
   SearchInput.vue95.31%92.96%94.74%95.78%138–139, 192, 203–208, 267–269, 285–287, 291–296
   WorkPackage.vue86.22%72.50%93.33%87.62%107–116, 129–131, 142–146, 156–158, 176–182, 220, 220–225, 225, 225–236, 81–82
src/constants
   appID.js100%100%100%100%
   links.js100%100%100%100%
   messages.js100%100%100%100%
src/filesPlugin
   filesPlugin.js0%0%0%0%1, 1, 10, 100, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   filesPluginLessThan28.js0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70, 8–9
src/utils
   workpackageHelper.js93.85%93.33%88.89%94.24%100–102, 156–157, 23–25, 54, 54–56, 97–99
src/views
   CreateWorkPackageModal.vue94.18%86.32%90.48%95.43%367–372, 375, 391, 508–511, 516–521, 526–531, 537–540, 543, 559, 559, 600–604, 614–616, 639–640, 648–650, 679–681, 703–705, 714–718
   Dashboard.vue92.96%92.86%82.61%93.77%120–125, 134, 144, 147, 158–160, 214–217, 220–221, 228–232, 67
   LinkMultipleFilesModal.vue99.14%97.56%100%99.32%157–159
   ProjectsTab.vue94.06%92.45%93.33%94.33%100–101, 107–109, 129, 140–141, 175–185, 234–236, 98–99

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

PHP Code Coverage

Coverage after merging refactor/separate-oauth2-settings into release/2.11 will be
67.43%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
integration_openproject/server/apps/integration_openproject/lib
   Capabilities.php0%100%0%0%24, 31–40
   OIDCClientMapper.php0%100%0%0%29, 40–49, 52
   TokenEventFactory.php100%100%100%100%
integration_openproject/server/apps/integration_openproject/lib/AppInfo
   Application.php36.59%100%50%35.53%105–107, 110–114, 116–121, 123–124, 127, 132–133, 135–138, 140, 142, 144, 148–151, 153–164, 166, 169, 173, 177–179, 212
integration_openproject/server/apps/integration_openproject/lib/BackgroundJob
   RemoveExpiredDirectUploadTokens.php0%100%0%0%28, 30–32, 41–42
integration_openproject/server/apps/integration_openproject/lib/Controller
   ConfigController.php75.12%100%64.71%75.56%114, 151–152, 154, 156–158, 160–163, 166–167, 169, 194, 198–200, 442–444, 446–448, 497, 541–543, 577–581, 592, 606–609, 617, 621–624, 660, 663–678, 695–700, 702–703, 705–707, 710, 712–728, 742–745, 747–751
   DirectDownloadController.php0%100%0%0%33–35, 50–52, 54–61
   DirectUploadController.php71.03%100%100%70.21%117–119, 162–164, 175, 179–182, 184, 194, 201, 217–219, 221–222, 225–230, 233, 235, 245–247, 253–255, 263–265, 280–282, 301, 306, 312
   FilesController.php86.99%100%83.33%87.18%178–179, 241, 250, 267–270, 275–277, 282–284, 293
   OpenProjectAPIController.php80.51%100%82.35%80.34%107, 146, 193–195, 198–205, 207–211, 213, 232, 257, 322, 372, 392, 439, 464–466, 469–473, 475, 66
   OpenProjectController.php96.45%100%80%96.95%241–245
integration_openproject/server/apps/integration_openproject/lib/Dashboard
   OpenProjectWidget.php0%100%0%0%101, 108–109, 111–116, 118–122, 124–126, 129–140, 61–66, 73, 80, 87, 94
integration_openproject/server/apps/integration_openproject/lib/Exception
   OpenprojectAvatarErrorException.php100%100%100%100%
   OpenprojectErrorException.php100%100%100%100%
   OpenprojectFileNotUploadedException.php100%100%100%100%
   OpenprojectGroupfolderSetupConflictException.php100%100%100%100%
   OpenprojectResponseException.php100%100%100%100%
   OpenprojectUnauthorizedUserException.php0%100%0%0%21
integration_openproject/server/apps/integration_openproject/lib/Listener
   BeforeGroupDeletedListener.php100%100%100%100%
   BeforeNodeInsideOpenProjectGroupfilderChangedListener.php0%100%0%0%46–48, 52–55, 57, 59, 62–63, 65, 67–70, 72–75, 77–79
   BeforeUserDeletedListener.php0%100%0%0%30, 37–38, 40–43, 45
   LoadAdditionalScriptsListener.php0%100%0%0%37–38, 46–47, 49, 51–52, 54
   LoadSidebarScript.php65.91%100%100%64.29%105, 77–88, 95, 98
   OpenProjectReferenceListener.php0%100%0%0%45–47, 54–55, 57, 59–60, 62–74
   TermsOfServiceEventListener.php0%100%0%0%41–42, 47–48, 50–51, 53–55, 58–62
   UserChangedListener.php0%100%0%0%34, 41–42, 45–50, 53
integration_openproject/server/apps/integration_openproject/lib/Migration
   Version2001Date20221213083550.php0%100%0%0%30, 40–48, 50–58, 60–62, 64
   Version20100Date20250820101358.php0%100%0%0%38, 47–53, 56
   Version2310Date20230116153411.php0%100%0%0%29, 32–35, 37–62, 64–65, 67
   Version2400Date20230504144300.php0%100%0%0%30, 40–43
   Version2640Date20240628114301.php0%100%0%0%35, 47–49, 52–53, 56
   Version2900Date20250718065820.php0%100%0%0%22, 33–36, 38–39, 41–42, 45
integration_openproject/server/apps/integration_openproject/lib/Reference
   WorkPackageReferenceProvider.php51.67%100%25%58.33%100–101, 104, 108, 142, 150–151, 159, 37, 44, 51, 58–60, 87, 93–96, 99
integration_openproject/server/apps/integration_openproject/lib/Search
   OpenProjectSearchProvider.php0%100%0%0%100–102, 104–106, 109–110, 112–113, 116–125, 127–131, 52–55, 62, 69, 77, 79, 82, 89–90, 93–97, 99
   OpenProjectSearchResultEntry.php100%100%100%100%
integration_openproject/server/apps/integration_openproject/lib/Service
   DatabaseService.php42.31%100%60%40.43%108–112, 114, 63–76, 78–85
   DirectDownloadService.php88.46%100%100%87.50%62–63, 65
   DirectUploadService.php42.86%100%66.67%40%101, 62–65, 67–75, 95
   OauthService.php0%100%0%0%100–101, 40–42, 51–58, 60–66, 75–83, 94–99
   OpenProjectAPIService.php76.48%100%78.87%76.29%1006–1007, 1009,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants