diff --git a/tests/commands/issue/validate.test.ts b/tests/commands/issue/validate.test.ts new file mode 100644 index 0000000000..061fb65dc7 --- /dev/null +++ b/tests/commands/issue/validate.test.ts @@ -0,0 +1,63 @@ +import issues from '../../__data__/input/issues' +import { pathToFileURL } from 'node:url' +import { execSync } from 'child_process' +import * as fs from 'fs-extra' + +const ENV_VAR = + 'cross-env DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams LOGS_DIR=tests/__data__/output/logs' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copySync('tests/__data__/input/issue_validate/streams', 'tests/__data__/output/streams') +}) + +describe('issue:validate', () => { + it('can handle streams:add request', () => { + const body = issues.find(issue => issue.number === 14179)?.body + const cmd = `${ENV_VAR} npm run issue:validate --- --body="${body}" --labels="approved,streams:add"` + + try { + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) + throw new Error('Failed') + } catch { + expect(content('tests/__data__/output/logs/errors.txt')).toBe( + content('tests/__data__/expected/issue_validate/logs/streams_add.txt') + ) + } + }) + + it('can handle streams:remove request', () => { + const body = issues.find(issue => issue.number === 14150)?.body + const cmd = `${ENV_VAR} npm run issue:validate --- --body="${body}" --labels="approved,streams:remove"` + + try { + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) + throw new Error('Failed') + } catch { + expect(content('tests/__data__/output/logs/errors.txt')).toBe( + content('tests/__data__/expected/issue_validate/logs/streams_remove.txt') + ) + } + }) + + it('can handle streams:edit request', () => { + const body = issues.find(issue => issue.number === 14120)?.body + const cmd = `${ENV_VAR} npm run issue:validate --- --body="${body}" --labels="approved,streams:edit"` + + try { + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) + throw new Error('Failed') + } catch { + expect(content('tests/__data__/output/logs/errors.txt')).toBe( + content('tests/__data__/expected/issue_validate/logs/streams_edit.txt') + ) + } + }) +}) + +function content(filepath: string) { + return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) +}