From 60413c4ea9a0d340da9b9ae8b451e0641ae6fda9 Mon Sep 17 00:00:00 2001 From: Jamie McGregor Nelson Date: Sun, 15 Mar 2026 09:13:51 -0400 Subject: [PATCH] test: skip marketplace contract tests when local repos are absent --- .../gsd/tests/marketplace-discovery.test.ts | 19 +++++++++++++------ src/tests/marketplace-discovery.test.ts | 12 ++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts b/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts index 0ef950cb4..f6bd91982 100644 --- a/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts +++ b/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts @@ -17,13 +17,20 @@ import { resolvePluginRoot } from '../marketplace-discovery'; -// Use absolute paths to the external marketplace repos -// These repos are located at /home/ubuntulinuxqa2/repos/ -const REPOS_BASE = '/home/ubuntulinuxqa2/repos'; -const CLAUDE_SKILLS_PATH = path.join(REPOS_BASE, 'claude_skills'); -const CLAUDE_PLUGINS_OFFICIAL_PATH = path.join(REPOS_BASE, 'claude-plugins-official'); +// Resolve paths relative to the gsd-2 project root so CI can skip cleanly when repos are absent +const GSD2_ROOT = path.resolve(import.meta.dirname, '../../../../..'); +const CLAUDE_SKILLS_PATH = path.resolve(GSD2_ROOT, '../claude_skills'); +const CLAUDE_PLUGINS_OFFICIAL_PATH = path.resolve(GSD2_ROOT, '../claude-plugins-official'); -describe('parseMarketplaceJson', () => { +function marketplacesAvailable(): boolean { + return fs.existsSync(CLAUDE_SKILLS_PATH) && fs.existsSync(CLAUDE_PLUGINS_OFFICIAL_PATH); +} + +const skipReason = !marketplacesAvailable() + ? `Marketplace repos not found: ${CLAUDE_SKILLS_PATH}, ${CLAUDE_PLUGINS_OFFICIAL_PATH}` + : undefined; + +describe('parseMarketplaceJson', { skip: skipReason }, () => { it('should parse jamie-style marketplace.json', () => { const result = parseMarketplaceJson(CLAUDE_SKILLS_PATH); assert.strictEqual(result.success, true); diff --git a/src/tests/marketplace-discovery.test.ts b/src/tests/marketplace-discovery.test.ts index 455c7a189..52b403957 100644 --- a/src/tests/marketplace-discovery.test.ts +++ b/src/tests/marketplace-discovery.test.ts @@ -10,7 +10,7 @@ * Tests run against real data, not synthetic fixtures. */ -import { describe, it, before } from 'node:test'; +import { describe, it } from 'node:test'; import assert from 'node:assert'; import * as path from 'node:path'; import * as fs from 'node:fs'; @@ -27,7 +27,15 @@ const REPOS_BASE = path.resolve(import.meta.dirname, '../../..'); const CLAUDE_SKILLS_PATH = path.join(REPOS_BASE, 'claude_skills'); const CLAUDE_PLUGINS_OFFICIAL_PATH = path.join(REPOS_BASE, 'claude-plugins-official'); -describe('Marketplace Discovery Contract Tests', () => { +function marketplacesAvailable(): boolean { + return fs.existsSync(CLAUDE_SKILLS_PATH) && fs.existsSync(CLAUDE_PLUGINS_OFFICIAL_PATH); +} + +const skipReason = !marketplacesAvailable() + ? `Marketplace repos not found: ${CLAUDE_SKILLS_PATH}, ${CLAUDE_PLUGINS_OFFICIAL_PATH}` + : undefined; + +describe('Marketplace Discovery Contract Tests', { skip: skipReason }, () => { describe('claude_skills marketplace (jamie-style)', () => { it('should discover at least 15 plugins', () => { const result = discoverMarketplace(CLAUDE_SKILLS_PATH);