|
1 | | -import { describe, expect, it } from 'vitest'; |
| 1 | +import { afterEach, describe, expect, it } from 'vitest'; |
2 | 2 |
|
3 | 3 | import { base } from '$app/paths'; |
4 | 4 |
|
| 5 | +import { initCoreProvider } from './core-provider'; |
5 | 6 | import * as routeForModule from './route-for'; |
6 | 7 | import { |
7 | 8 | routeForArchivalEventHistory, |
@@ -257,3 +258,182 @@ describe('routeFor functions should resolve the base path exactly once', () => { |
257 | 258 | } |
258 | 259 | }); |
259 | 260 | }); |
| 261 | + |
| 262 | +describe('routeFor functions with prefix should resolve base + prefix correctly', () => { |
| 263 | + const prefix = '/projects/my-project'; |
| 264 | + |
| 265 | + const namespaceParams = { namespace: 'default' }; |
| 266 | + const workflowParams = { |
| 267 | + namespace: 'default', |
| 268 | + workflow: 'wf-id', |
| 269 | + run: 'run-id', |
| 270 | + }; |
| 271 | + const scheduleParams = { namespace: 'default', scheduleId: 'sched-1' }; |
| 272 | + const activityParams = { |
| 273 | + namespace: 'default', |
| 274 | + activityId: 'act-1', |
| 275 | + runId: 'run-1', |
| 276 | + }; |
| 277 | + |
| 278 | + afterEach(() => { |
| 279 | + initCoreProvider({ |
| 280 | + getAccessToken: async () => '', |
| 281 | + getRoutePrefix: () => '', |
| 282 | + }); |
| 283 | + }); |
| 284 | + |
| 285 | + const prefixedCases: [string, () => string | undefined][] = [ |
| 286 | + ['routeForNamespaces', () => routeForNamespaces()], |
| 287 | + ['routeForNexus', () => routeForNexus()], |
| 288 | + ['routeForNexusEndpoint', () => routeForNexusEndpoint('ep-1')], |
| 289 | + ['routeForNexusEndpointEdit', () => routeForNexusEndpointEdit('ep-1')], |
| 290 | + ['routeForNexusEndpointCreate', () => routeForNexusEndpointCreate()], |
| 291 | + ['routeForNamespace', () => routeForNamespace(namespaceParams)], |
| 292 | + ['routeForNamespaceSelector', () => routeForNamespaceSelector()], |
| 293 | + ['routeForWorkflows', () => routeForWorkflows(namespaceParams)], |
| 294 | + [ |
| 295 | + 'routeForArchivalWorkflows', |
| 296 | + () => routeForArchivalWorkflows(namespaceParams), |
| 297 | + ], |
| 298 | + ['routeForWorkflow', () => routeForWorkflow(workflowParams)], |
| 299 | + ['routeForSchedules', () => routeForSchedules(namespaceParams)], |
| 300 | + ['routeForScheduleCreate', () => routeForScheduleCreate(namespaceParams)], |
| 301 | + ['routeForSchedule', () => routeForSchedule(scheduleParams)], |
| 302 | + ['routeForScheduleEdit', () => routeForScheduleEdit(scheduleParams)], |
| 303 | + [ |
| 304 | + 'routeForArchivalEventHistory', |
| 305 | + () => routeForArchivalEventHistory(workflowParams), |
| 306 | + ], |
| 307 | + [ |
| 308 | + 'routeForEventHistoryEvent', |
| 309 | + () => routeForEventHistoryEvent({ ...workflowParams, eventId: '1' }), |
| 310 | + ], |
| 311 | + ['routeForEventHistory', () => routeForEventHistory(workflowParams)], |
| 312 | + ['routeForTimeline', () => routeForTimeline(workflowParams)], |
| 313 | + ['routeForWorkers', () => routeForWorkers(workflowParams)], |
| 314 | + [ |
| 315 | + 'routeForWorkerDeployments', |
| 316 | + () => routeForWorkerDeployments(namespaceParams), |
| 317 | + ], |
| 318 | + [ |
| 319 | + 'routeForWorkerDeployment', |
| 320 | + () => |
| 321 | + routeForWorkerDeployment({ |
| 322 | + namespace: 'default', |
| 323 | + deployment: 'dep-1', |
| 324 | + }), |
| 325 | + ], |
| 326 | + [ |
| 327 | + 'routeForWorkerDeploymentVersion', |
| 328 | + () => |
| 329 | + routeForWorkerDeploymentVersion({ |
| 330 | + namespace: 'default', |
| 331 | + deployment: 'dep-1', |
| 332 | + version: 'v1', |
| 333 | + }), |
| 334 | + ], |
| 335 | + ['routeForRelationships', () => routeForRelationships(workflowParams)], |
| 336 | + [ |
| 337 | + 'routeForTaskQueue', |
| 338 | + () => routeForTaskQueue({ namespace: 'default', queue: 'q-1' }), |
| 339 | + ], |
| 340 | + ['routeForCallStack', () => routeForCallStack(workflowParams)], |
| 341 | + ['routeForWorkflowQuery', () => routeForWorkflowQuery(workflowParams)], |
| 342 | + ['routeForUserMetadata', () => routeForUserMetadata(workflowParams)], |
| 343 | + [ |
| 344 | + 'routeForWorkflowSearchAttributes', |
| 345 | + () => routeForWorkflowSearchAttributes(workflowParams), |
| 346 | + ], |
| 347 | + ['routeForWorkflowMemo', () => routeForWorkflowMemo(workflowParams)], |
| 348 | + ['routeForWorkflowUpdate', () => routeForWorkflowUpdate(workflowParams)], |
| 349 | + [ |
| 350 | + 'routeForPendingActivities', |
| 351 | + () => routeForPendingActivities(workflowParams), |
| 352 | + ], |
| 353 | + ['routeForNexusLinks', () => routeForNexusLinks(workflowParams)], |
| 354 | + ['routeForEventHistoryImport', () => routeForEventHistoryImport()], |
| 355 | + ['routeForBatchOperations', () => routeForBatchOperations(namespaceParams)], |
| 356 | + [ |
| 357 | + 'routeForBatchOperation', |
| 358 | + () => routeForBatchOperation({ namespace: 'default', jobId: 'job-1' }), |
| 359 | + ], |
| 360 | + [ |
| 361 | + 'routeForStandaloneActivities', |
| 362 | + () => routeForStandaloneActivities(namespaceParams), |
| 363 | + ], |
| 364 | + [ |
| 365 | + 'routeForStandaloneActivitiesWithQuery', |
| 366 | + () => |
| 367 | + routeForStandaloneActivitiesWithQuery(namespaceParams, 'test-query'), |
| 368 | + ], |
| 369 | + [ |
| 370 | + 'routeForStartStandaloneActivity', |
| 371 | + () => routeForStartStandaloneActivity(namespaceParams), |
| 372 | + ], |
| 373 | + [ |
| 374 | + 'routeForStandaloneActivityDetails', |
| 375 | + () => routeForStandaloneActivityDetails(activityParams), |
| 376 | + ], |
| 377 | + [ |
| 378 | + 'routeForStandaloneActivityWorkers', |
| 379 | + () => routeForStandaloneActivityWorkers(activityParams), |
| 380 | + ], |
| 381 | + [ |
| 382 | + 'routeForStandaloneActivitySearchAttributes', |
| 383 | + () => routeForStandaloneActivitySearchAttributes(activityParams), |
| 384 | + ], |
| 385 | + [ |
| 386 | + 'routeForStandaloneActivityMetadata', |
| 387 | + () => routeForStandaloneActivityMetadata(activityParams), |
| 388 | + ], |
| 389 | + [ |
| 390 | + 'routeForWorkflowStart', |
| 391 | + () => routeForWorkflowStart({ namespace: 'default' }), |
| 392 | + ], |
| 393 | + [ |
| 394 | + 'routeForWorkflowsWithQuery', |
| 395 | + () => routeForWorkflowsWithQuery({ namespace: 'default', query: 'test' }), |
| 396 | + ], |
| 397 | + ]; |
| 398 | + |
| 399 | + const authCases: [string, () => string | undefined][] = [ |
| 400 | + [ |
| 401 | + 'routeForAuthentication', |
| 402 | + () => |
| 403 | + routeForAuthentication({ |
| 404 | + settings: { auth: {}, baseUrl: 'https://example.com' }, |
| 405 | + searchParams: new URLSearchParams(), |
| 406 | + }), |
| 407 | + ], |
| 408 | + ['routeForLoginPage', () => routeForLoginPage('', false)], |
| 409 | + ]; |
| 410 | + |
| 411 | + it.each(prefixedCases)( |
| 412 | + '%s should include base + prefix when prefix is set', |
| 413 | + (_name, fn) => { |
| 414 | + initCoreProvider({ |
| 415 | + getAccessToken: async () => '', |
| 416 | + getRoutePrefix: () => prefix, |
| 417 | + }); |
| 418 | + const result = fn(); |
| 419 | + expect(typeof result).toBe('string'); |
| 420 | + expect(result).toMatch(new RegExp(`^${base}${prefix}`)); |
| 421 | + expect(result).not.toMatch( |
| 422 | + new RegExp(`${base}${prefix}${base}${prefix}`), |
| 423 | + ); |
| 424 | + }, |
| 425 | + ); |
| 426 | + |
| 427 | + it.each(authCases)( |
| 428 | + '%s should NOT include prefix (auth routes excluded)', |
| 429 | + (_name, fn) => { |
| 430 | + initCoreProvider({ |
| 431 | + getAccessToken: async () => '', |
| 432 | + getRoutePrefix: () => prefix, |
| 433 | + }); |
| 434 | + const result = fn(); |
| 435 | + expect(typeof result).toBe('string'); |
| 436 | + expect(result).not.toContain(prefix); |
| 437 | + }, |
| 438 | + ); |
| 439 | +}); |
0 commit comments