import { afterEach, describe, expect, it, vi } from 'vitest' import { buildAnalysisArtifactTargetQuery, parseAnalysisArtifactTarget, } from '../../composables/analysisArtifactTarget' import { currentExperimentIdFromUrl, resolveCurrentPluginId, } from '../../composables/platformContextHelpers' describe('analysis artifact target', () => { afterEach(() => { delete (window as unknown as { __MINT_PLATFORM__?: unknown }).__MINT_PLATFORM__ vi.unstubAllGlobals() }) it('should resolve the canonical injected plugin id', () => { ;(window as unknown as { __MINT_PLATFORM__: unknown }).__MINT_PLATFORM__ = { isIntegrated: true, plugin: { id: 'LEAF', name: 'Leaf UI' }, theme: 'system', } expect(resolveCurrentPluginId()).toBe('LEAF') }) it('should tolerate a host that provides a partial location object', () => { vi.stubGlobal('window', { location: { search: '' }, }) expect(currentExperimentIdFromUrl()).toBeUndefined() }) it('should build the canonical readable query when an artifact id hint is present', () => { const query = buildAnalysisArtifactTargetQuery({ experimentId: 66, artifactPluginId: 'LEAF', artifactKey: 'exp316_260703_ys_rna_ide_scr', artifactId: 206, }) expect(query.toString()).toBe( 'experiment_id=66&artifact_plugin_id=LEAF' + '&artifact_key=exp316_260703_ys_rna_ide_scr&artifact_id=206', ) }) it('should parse the canonical identity without requiring an artifact id hint', () => { const target = parseAnalysisArtifactTarget(new URLSearchParams( 'experiment_id=66&artifact_plugin_id=LEAF&artifact_key=result', )) expect(target).toEqual({ experimentId: 66, artifactPluginId: 'LEAF', artifactKey: 'result', }) }) it('should reject an incomplete target instead of guessing another artifact', () => { const target = parseAnalysisArtifactTarget(new URLSearchParams( 'experiment_id=66&artifact_key=result', )) expect(target).toBeNull() }) it('should reject non-positive numeric identifiers', () => { const target = parseAnalysisArtifactTarget(new URLSearchParams( 'experiment_id=0&artifact_plugin_id=LEAF&artifact_key=result&artifact_id=-1', )) expect(target).toBeNull() }) })