Files
smoothschedule/frontend/src/api/__tests__/platformOAuth.test.ts
poduck 8dc2248f1f feat: Add comprehensive test suite and misc improvements
- Add frontend unit tests with Vitest for components, hooks, pages, and utilities
- Add backend tests for webhooks, notifications, middleware, and edge cases
- Add ForgotPassword, NotFound, and ResetPassword pages
- Add migration for orphaned staff resources conversion
- Add coverage directory to gitignore (generated reports)
- Various bug fixes and improvements from previous work

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 02:36:46 -05:00

1219 lines
33 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest';
// Mock apiClient
vi.mock('../client', () => ({
default: {
get: vi.fn(),
post: vi.fn(),
},
}));
import { getPlatformOAuthSettings, updatePlatformOAuthSettings } from '../platformOAuth';
import apiClient from '../client';
import type { PlatformOAuthSettings, PlatformOAuthSettingsUpdate } from '../platformOAuth';
describe('platformOAuth API', () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe('getPlatformOAuthSettings', () => {
it('fetches platform OAuth settings with all providers', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'google-client-id-123',
client_secret: 'google-secret-456',
},
apple: {
enabled: true,
client_id: 'apple-client-id-789',
client_secret: 'apple-secret-012',
team_id: 'APPLE-TEAM-ID',
key_id: 'APPLE-KEY-ID',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: true,
client_id: 'microsoft-client-id-345',
client_secret: 'microsoft-secret-678',
tenant_id: 'common',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(apiClient.get).toHaveBeenCalledWith('/platform/settings/oauth/');
expect(result).toEqual(mockSettings);
});
it('fetches settings with registration disabled', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: false,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(result.oauth_allow_registration).toBe(false);
expect(result.google.enabled).toBe(false);
expect(result.microsoft.enabled).toBe(false);
});
it('fetches settings with Apple-specific fields', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: true,
client_id: 'com.example.app',
client_secret: 'apple-private-key',
team_id: 'TEAM123456',
key_id: 'KEY987654',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(result.apple.enabled).toBe(true);
expect(result.apple.team_id).toBe('TEAM123456');
expect(result.apple.key_id).toBe('KEY987654');
});
it('fetches settings with Microsoft tenant ID', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: true,
client_id: 'ms-client-123',
client_secret: 'ms-secret-456',
tenant_id: 'organizations',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(result.microsoft.enabled).toBe(true);
expect(result.microsoft.tenant_id).toBe('organizations');
});
it('fetches settings with multiple providers enabled', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'google-123',
client_secret: 'google-secret',
},
apple: {
enabled: true,
client_id: 'apple-456',
client_secret: 'apple-secret',
team_id: 'TEAM',
key_id: 'KEY',
},
facebook: {
enabled: true,
client_id: 'fb-789',
client_secret: 'fb-secret',
},
linkedin: {
enabled: true,
client_id: 'li-012',
client_secret: 'li-secret',
},
microsoft: {
enabled: true,
client_id: 'ms-345',
client_secret: 'ms-secret',
tenant_id: 'common',
},
twitter: {
enabled: true,
client_id: 'tw-678',
client_secret: 'tw-secret',
},
twitch: {
enabled: true,
client_id: 'twitch-901',
client_secret: 'twitch-secret',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(result.google.enabled).toBe(true);
expect(result.apple.enabled).toBe(true);
expect(result.facebook.enabled).toBe(true);
expect(result.linkedin.enabled).toBe(true);
expect(result.microsoft.enabled).toBe(true);
expect(result.twitter.enabled).toBe(true);
expect(result.twitch.enabled).toBe(true);
});
it('returns data from response.data', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'test-123',
client_secret: 'test-secret',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
const result = await getPlatformOAuthSettings();
expect(result).toEqual(mockSettings);
expect(result).toHaveProperty('oauth_allow_registration');
expect(result).toHaveProperty('google');
expect(result).toHaveProperty('apple');
expect(result).toHaveProperty('facebook');
expect(result).toHaveProperty('linkedin');
expect(result).toHaveProperty('microsoft');
expect(result).toHaveProperty('twitter');
expect(result).toHaveProperty('twitch');
});
});
describe('updatePlatformOAuthSettings', () => {
it('updates global registration setting', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_allow_registration: false,
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: false,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result).toEqual(mockResponse);
expect(result.oauth_allow_registration).toBe(false);
});
it('updates Google OAuth settings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: true,
oauth_google_client_id: 'new-google-client-id',
oauth_google_client_secret: 'new-google-secret',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'new-google-client-id',
client_secret: 'new-google-secret',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.google.enabled).toBe(true);
expect(result.google.client_id).toBe('new-google-client-id');
expect(result.google.client_secret).toBe('new-google-secret');
});
it('updates Apple OAuth settings with all fields', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_apple_enabled: true,
oauth_apple_client_id: 'com.myapp.service',
oauth_apple_client_secret: 'apple-private-key-pem',
oauth_apple_team_id: 'APPLETEAM123',
oauth_apple_key_id: 'APPLEKEY456',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: true,
client_id: 'com.myapp.service',
client_secret: 'apple-private-key-pem',
team_id: 'APPLETEAM123',
key_id: 'APPLEKEY456',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.apple.enabled).toBe(true);
expect(result.apple.team_id).toBe('APPLETEAM123');
expect(result.apple.key_id).toBe('APPLEKEY456');
});
it('updates Facebook OAuth settings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_facebook_enabled: true,
oauth_facebook_client_id: 'fb-app-id-789',
oauth_facebook_client_secret: 'fb-app-secret-012',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: true,
client_id: 'fb-app-id-789',
client_secret: 'fb-app-secret-012',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.facebook.enabled).toBe(true);
expect(result.facebook.client_id).toBe('fb-app-id-789');
});
it('updates LinkedIn OAuth settings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_linkedin_enabled: true,
oauth_linkedin_client_id: 'li-client-345',
oauth_linkedin_client_secret: 'li-secret-678',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: true,
client_id: 'li-client-345',
client_secret: 'li-secret-678',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.linkedin.enabled).toBe(true);
expect(result.linkedin.client_id).toBe('li-client-345');
});
it('updates Microsoft OAuth settings with tenant ID', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_microsoft_enabled: true,
oauth_microsoft_client_id: 'ms-app-id-901',
oauth_microsoft_client_secret: 'ms-app-secret-234',
oauth_microsoft_tenant_id: 'organizations',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: true,
client_id: 'ms-app-id-901',
client_secret: 'ms-app-secret-234',
tenant_id: 'organizations',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.microsoft.enabled).toBe(true);
expect(result.microsoft.tenant_id).toBe('organizations');
});
it('updates Twitter OAuth settings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_twitter_enabled: true,
oauth_twitter_client_id: 'twitter-client-567',
oauth_twitter_client_secret: 'twitter-secret-890',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: true,
client_id: 'twitter-client-567',
client_secret: 'twitter-secret-890',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.twitter.enabled).toBe(true);
expect(result.twitter.client_id).toBe('twitter-client-567');
});
it('updates Twitch OAuth settings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_twitch_enabled: true,
oauth_twitch_client_id: 'twitch-client-123',
oauth_twitch_client_secret: 'twitch-secret-456',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: true,
client_id: 'twitch-client-123',
client_secret: 'twitch-secret-456',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.twitch.enabled).toBe(true);
expect(result.twitch.client_id).toBe('twitch-client-123');
});
it('updates multiple providers at once', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_allow_registration: true,
oauth_google_enabled: true,
oauth_google_client_id: 'google-123',
oauth_google_client_secret: 'google-secret',
oauth_microsoft_enabled: true,
oauth_microsoft_client_id: 'ms-456',
oauth_microsoft_client_secret: 'ms-secret',
oauth_microsoft_tenant_id: 'common',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'google-123',
client_secret: 'google-secret',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: true,
client_id: 'ms-456',
client_secret: 'ms-secret',
tenant_id: 'common',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.google.enabled).toBe(true);
expect(result.microsoft.enabled).toBe(true);
});
it('disables a provider by setting enabled to false', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: false,
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: 'google-client-id',
client_secret: 'google-secret',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.google.enabled).toBe(false);
});
it('sends partial update with only changed fields', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_client_id: 'updated-client-id',
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: 'updated-client-id',
client_secret: 'existing-secret',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
expect(result.google.client_id).toBe('updated-client-id');
});
it('returns updated settings from response.data', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_allow_registration: true,
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
const result = await updatePlatformOAuthSettings(updateData);
expect(result).toEqual(mockResponse);
expect(result).toHaveProperty('oauth_allow_registration');
expect(result).toHaveProperty('google');
expect(result).toHaveProperty('apple');
expect(result).toHaveProperty('facebook');
expect(result).toHaveProperty('linkedin');
expect(result).toHaveProperty('microsoft');
expect(result).toHaveProperty('twitter');
expect(result).toHaveProperty('twitch');
});
});
describe('error handling', () => {
it('propagates errors from getPlatformOAuthSettings', async () => {
const error = new Error('Network error');
vi.mocked(apiClient.get).mockRejectedValue(error);
await expect(getPlatformOAuthSettings()).rejects.toThrow('Network error');
});
it('propagates errors from updatePlatformOAuthSettings', async () => {
const error = new Error('Unauthorized');
vi.mocked(apiClient.post).mockRejectedValue(error);
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: true,
};
await expect(updatePlatformOAuthSettings(updateData)).rejects.toThrow('Unauthorized');
});
it('handles validation errors from backend', async () => {
const error = new Error('Invalid client ID format');
vi.mocked(apiClient.post).mockRejectedValue(error);
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_client_id: 'invalid-id',
};
await expect(updatePlatformOAuthSettings(updateData)).rejects.toThrow('Invalid client ID format');
});
it('handles permission errors', async () => {
const error = new Error('Permission denied');
vi.mocked(apiClient.post).mockRejectedValue(error);
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: true,
};
await expect(updatePlatformOAuthSettings(updateData)).rejects.toThrow('Permission denied');
});
it('handles server errors on GET request', async () => {
const error = new Error('Internal server error');
vi.mocked(apiClient.get).mockRejectedValue(error);
await expect(getPlatformOAuthSettings()).rejects.toThrow('Internal server error');
});
it('handles server errors on POST request', async () => {
const error = new Error('Internal server error');
vi.mocked(apiClient.post).mockRejectedValue(error);
const updateData: PlatformOAuthSettingsUpdate = {
oauth_microsoft_enabled: true,
};
await expect(updatePlatformOAuthSettings(updateData)).rejects.toThrow('Internal server error');
});
});
describe('endpoint validation', () => {
it('calls correct GET endpoint for getPlatformOAuthSettings', async () => {
const mockSettings: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: false,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.get).mockResolvedValue({ data: mockSettings });
await getPlatformOAuthSettings();
expect(apiClient.get).toHaveBeenCalledTimes(1);
expect(apiClient.get).toHaveBeenCalledWith('/platform/settings/oauth/');
});
it('calls correct POST endpoint for updatePlatformOAuthSettings', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: true,
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
await updatePlatformOAuthSettings(updateData);
expect(apiClient.post).toHaveBeenCalledTimes(1);
expect(apiClient.post).toHaveBeenCalledWith('/platform/settings/oauth/', updateData);
});
it('uses POST method for updates (not PUT or PATCH)', async () => {
const updateData: PlatformOAuthSettingsUpdate = {
oauth_google_enabled: true,
};
const mockResponse: PlatformOAuthSettings = {
oauth_allow_registration: true,
google: {
enabled: true,
client_id: '',
client_secret: '',
},
apple: {
enabled: false,
client_id: '',
client_secret: '',
},
facebook: {
enabled: false,
client_id: '',
client_secret: '',
},
linkedin: {
enabled: false,
client_id: '',
client_secret: '',
},
microsoft: {
enabled: false,
client_id: '',
client_secret: '',
},
twitter: {
enabled: false,
client_id: '',
client_secret: '',
},
twitch: {
enabled: false,
client_id: '',
client_secret: '',
},
};
vi.mocked(apiClient.post).mockResolvedValue({ data: mockResponse });
await updatePlatformOAuthSettings(updateData);
// Verify POST was called, not PUT or PATCH
expect(apiClient.post).toHaveBeenCalled();
});
});
});