feat(auth): make OAuth credentials user-specific via UserIntegration records

Setup pages now accept an integration_id query param to save OAuth
credentials to the user's personal UserIntegration record instead
of global settings. The integrations dashboard shows an "Authorize"
button for OAuth types (Dropbox, Google Drive, OneDrive) that need
credentials.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-08 18:48:11 +00:00
parent 73119e0cef
commit cfc52fd355
4 changed files with 77 additions and 0 deletions
+16
View File
@@ -30,6 +30,22 @@ class TestGoogleDriveViews:
response = client.get("/google-drive-callback?code=test_code")
assert response.status_code == 200
def test_google_drive_setup_page_with_integration_id(self, client):
"""Test the Google Drive setup page accepts integration_id query param."""
response = client.get("/google-drive-setup?integration_id=99")
assert response.status_code == 200
# The template should store the integration_id for per-user OAuth flow
assert b"oauth_integration_id" in response.content
assert b"99" in response.content
def test_google_drive_setup_page_without_integration_id(self, client):
"""Test the Google Drive setup page works without integration_id (global flow)."""
response = client.get("/google-drive-setup")
assert response.status_code == 200
body = response.text
assert "oauth_integration_id" in body
assert 'const integrationId = ""' in body
def test_google_drive_callback_with_code_and_state(self, client):
"""Test the Google Drive OAuth callback with code and state."""
response = client.get("/google-drive-callback?code=test_code&state=test_state")