import { describe, it, expect, afterEach } from 'vitest' import { convertCollection } from '../../src/converter/collection.js' import fs from 'node:fs/promises' import path from 'node:path' const INPUT_DIR = path.resolve('tests/fixtures/input/sample-collection') const OUTPUT_DIR = path.resolve('tests/fixtures/output/sample-collection') async function exists(p: string): Promise { try { await fs.access(p); return true } catch { return false } } async function cleanup() { if (await exists(OUTPUT_DIR)) { await fs.rm(OUTPUT_DIR, { recursive: true, force: true }) } } describe('convertCollection (integration)', () => { afterEach(cleanup) it('generates all expected output files', async () => { const result = await convertCollection(INPUT_DIR, OUTPUT_DIR) expect(result.manifestGenerated).toBe(true) expect(result.requestsConverted).toBe(2) expect(result.environmentsConverted).toBe(1) expect(result.foldersConverted).toBe(1) expect(await exists(path.join(OUTPUT_DIR, 'bruno.json'))).toBe(true) expect(await exists(path.join(OUTPUT_DIR, 'collection.bru'))).toBe(true) expect(await exists(path.join(OUTPUT_DIR, 'environments', 'dev.bru'))).toBe(true) expect(await exists(path.join(OUTPUT_DIR, 'users', 'folder.bru'))).toBe(true) expect(await exists(path.join(OUTPUT_DIR, 'users', 'get-users.bru'))).toBe(true) expect(await exists(path.join(OUTPUT_DIR, 'users', 'create-user.bru'))).toBe(true) }) it('bruno.json is valid JSON with correct fields', async () => { await convertCollection(INPUT_DIR, OUTPUT_DIR) const content = await fs.readFile(path.join(OUTPUT_DIR, 'bruno.json'), 'utf-8') const json = JSON.parse(content) expect(json.version).toBe('1') expect(json.name).toBe('Sample Collection') expect(json.type).toBe('collection') }) it('get-users.bru contains expected content', async () => { await convertCollection(INPUT_DIR, OUTPUT_DIR) const content = await fs.readFile(path.join(OUTPUT_DIR, 'users', 'get-users.bru'), 'utf-8') expect(content).toContain('name: Get Users') expect(content).toContain('get {') expect(content).toContain('url: {{api_url}}/users') expect(content).toContain('auth: bearer') expect(content).toContain('auth:bearer {') expect(content).toContain('assert {') expect(content).toContain('res.status: eq 200') expect(content).toContain('script:post-response {') expect(content).toContain('settings {') expect(content).toContain('encodeUrl: true') }) it('create-user.bru contains expected content', async () => { await convertCollection(INPUT_DIR, OUTPUT_DIR) const content = await fs.readFile(path.join(OUTPUT_DIR, 'users', 'create-user.bru'), 'utf-8') expect(content).toContain('name: Create User') expect(content).toContain('post {') expect(content).toContain('body: json') expect(content).toContain('auth: basic') expect(content).toContain('body:json {') expect(content).toContain('script:pre-request {') expect(content).toContain('tests {') }) it('dev.bru contains vars and vars:secret blocks', async () => { await convertCollection(INPUT_DIR, OUTPUT_DIR) const content = await fs.readFile(path.join(OUTPUT_DIR, 'environments', 'dev.bru'), 'utf-8') expect(content).toContain('vars {') expect(content).toContain('api_url: http://localhost:3000') expect(content).toContain('vars:secret [') expect(content).toContain('db_password') }) it('throws when opencollection.yml is missing', async () => { await expect(convertCollection('/nonexistent/path', OUTPUT_DIR)) .rejects.toThrow('No opencollection.yml found') }) it('returns no warnings for clean fixture', async () => { const result = await convertCollection(INPUT_DIR, OUTPUT_DIR) expect(result.warnings).toHaveLength(0) }) })