|
1 | 1 | import type { |
2 | 2 | DevframeConnection, |
| 3 | + SetupDevframeConnectionOptions, |
3 | 4 | } from './index' |
4 | 5 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' |
5 | 6 | import { setupDevframeConnection } from './index' |
@@ -89,7 +90,7 @@ describe('isolated connection setup', () => { |
89 | 90 | expect(readGlobal('__DEVFRAME_CONNECTION_META__')).toBe(storedConnection.connectionMeta) |
90 | 91 | }) |
91 | 92 |
|
92 | | - it.each([{}, { connection: { isolated: false } }])( |
| 93 | + it.each([{}, { connection: {} }, { connection: { isolated: false } }])( |
93 | 94 | 'retains default cache discovery with %j', |
94 | 95 | async (options) => { |
95 | 96 | expect.assertions(5) |
@@ -130,3 +131,33 @@ describe('isolated connection setup', () => { |
130 | 131 | expect(parentWindow.__DEVFRAME_CONNECTION__).toBe(storedConnection) |
131 | 132 | }) |
132 | 133 | }) |
| 134 | + |
| 135 | +describe.each(['provided', 'fetched'] as const)('shared credentials with %s metadata', (metadataSource) => { |
| 136 | + it.each([ |
| 137 | + { name: 'explicit token overrides metadata and storage', authToken: 'explicit-token', metadataToken: 'metadata-token', storedToken: 'stored-token', expectedToken: 'explicit-token' }, |
| 138 | + { name: 'metadata token overrides storage', authToken: undefined, metadataToken: 'metadata-token', storedToken: 'stored-token', expectedToken: 'metadata-token' }, |
| 139 | + { name: 'local storage supplies a missing token', authToken: undefined, metadataToken: undefined, storedToken: 'stored-token', expectedToken: 'stored-token' }, |
| 140 | + { name: 'window storage supplies a missing token', authToken: undefined, metadataToken: undefined, storedToken: null, expectedToken: 'window-token' }, |
| 141 | + ])('$name', async ({ authToken, metadataToken, storedToken, expectedToken }) => { |
| 142 | + expect.assertions(4) |
| 143 | + vi.stubGlobal('__DEVFRAME_CONNECTION__', undefined) |
| 144 | + vi.stubGlobal('__DEVFRAME_CONNECTION_META__', undefined) |
| 145 | + vi.stubGlobal('__DEVFRAME_CONNECTION_AUTH_TOKEN__', 'window-token') |
| 146 | + getItem.mockReturnValue(storedToken) |
| 147 | + const connectionMeta = { backend: 'static' as const, authToken: metadataToken } |
| 148 | + const options: SetupDevframeConnectionOptions = { |
| 149 | + baseURL: 'http://requested.example/', |
| 150 | + authToken, |
| 151 | + } |
| 152 | + if (metadataSource === 'provided') |
| 153 | + options.connectionMeta = connectionMeta |
| 154 | + else |
| 155 | + fetchMetadata.mockResolvedValue(Response.json(connectionMeta)) |
| 156 | + |
| 157 | + const connection = await setupDevframeConnection(options) |
| 158 | + expect(connection.authToken).toBe(expectedToken) |
| 159 | + expect(readGlobal('__DEVFRAME_CONNECTION__')).toStrictEqual(connection) |
| 160 | + expect(setItem).toHaveBeenCalledExactlyOnceWith('__DEVFRAME_CONNECTION_AUTH_TOKEN__', expectedToken) |
| 161 | + expect(fetchMetadata).toHaveBeenCalledTimes(metadataSource === 'fetched' ? 1 : 0) |
| 162 | + }) |
| 163 | +}) |
0 commit comments