test: use real writable stream
This way plugins can pipe a stream to `stdout` and `stderr` in integration tests.
This commit is contained in:
		
							parent
							
								
									e8820960ce
								
							
						
					
					
						commit
						cfeaf49233
					
				@ -65,6 +65,7 @@
 | 
				
			|||||||
    "p-retry": "^2.0.0",
 | 
					    "p-retry": "^2.0.0",
 | 
				
			||||||
    "proxyquire": "^2.0.0",
 | 
					    "proxyquire": "^2.0.0",
 | 
				
			||||||
    "sinon": "^6.0.0",
 | 
					    "sinon": "^6.0.0",
 | 
				
			||||||
 | 
					    "stream-buffers": "^3.0.2",
 | 
				
			||||||
    "tempy": "^0.2.1",
 | 
					    "tempy": "^0.2.1",
 | 
				
			||||||
    "xo": "^0.22.0"
 | 
					    "xo": "^0.22.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
import test from 'ava';
 | 
					import test from 'ava';
 | 
				
			||||||
import proxyquire from 'proxyquire';
 | 
					import proxyquire from 'proxyquire';
 | 
				
			||||||
import {spy, stub} from 'sinon';
 | 
					import {spy, stub} from 'sinon';
 | 
				
			||||||
 | 
					import {WritableStreamBuffer} from 'stream-buffers';
 | 
				
			||||||
import AggregateError from 'aggregate-error';
 | 
					import AggregateError from 'aggregate-error';
 | 
				
			||||||
import SemanticReleaseError from '@semantic-release/error';
 | 
					import SemanticReleaseError from '@semantic-release/error';
 | 
				
			||||||
import {COMMIT_NAME, COMMIT_EMAIL} from '../lib/definitions/constants';
 | 
					import {COMMIT_NAME, COMMIT_EMAIL} from '../lib/definitions/constants';
 | 
				
			||||||
@ -78,8 +79,8 @@ test('Plugins are called with expected values', async t => {
 | 
				
			|||||||
  const result = await semanticRelease(options, {
 | 
					  const result = await semanticRelease(options, {
 | 
				
			||||||
    cwd,
 | 
					    cwd,
 | 
				
			||||||
    env,
 | 
					    env,
 | 
				
			||||||
    stdout: {write: () => {}},
 | 
					    stdout: new WritableStreamBuffer(),
 | 
				
			||||||
    stderr: {write: () => {}},
 | 
					    stderr: new WritableStreamBuffer(),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(verifyConditions1.callCount, 1);
 | 
					  t.is(verifyConditions1.callCount, 1);
 | 
				
			||||||
@ -215,7 +216,14 @@ test('Use custom tag format', async t => {
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Verify the tag has been created on the local and remote repo and reference the gitHead
 | 
					  // Verify the tag has been created on the local and remote repo and reference the gitHead
 | 
				
			||||||
  t.is(await gitTagHead(nextRelease.gitTag, {cwd}), nextRelease.gitHead);
 | 
					  t.is(await gitTagHead(nextRelease.gitTag, {cwd}), nextRelease.gitHead);
 | 
				
			||||||
@ -260,7 +268,14 @@ test('Use new gitHead, and recreate release notes if a prepare plugin create a c
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(generateNotes.callCount, 2);
 | 
					  t.is(generateNotes.callCount, 2);
 | 
				
			||||||
  t.deepEqual(generateNotes.args[0][1].nextRelease, nextRelease);
 | 
					  t.deepEqual(generateNotes.args[0][1].nextRelease, nextRelease);
 | 
				
			||||||
@ -318,7 +333,9 @@ test('Call all "success" plugins even if one errors out', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  await t.throws(
 | 
				
			||||||
 | 
					    semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(success1.callCount, 1);
 | 
					  t.is(success1.callCount, 1);
 | 
				
			||||||
  t.deepEqual(success1.args[0][1].releases, [{...release, ...nextRelease, notes, pluginName: '[Function: proxy]'}]);
 | 
					  t.deepEqual(success1.args[0][1].releases, [{...release, ...nextRelease, notes, pluginName: '[Function: proxy]'}]);
 | 
				
			||||||
@ -350,7 +367,9 @@ test('Log all "verifyConditions" errors', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  const errors = [
 | 
					  const errors = [
 | 
				
			||||||
    ...(await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}))),
 | 
					    ...(await t.throws(
 | 
				
			||||||
 | 
					      semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					    )),
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.deepEqual(errors, [error1, error2, error3]);
 | 
					  t.deepEqual(errors, [error1, error2, error3]);
 | 
				
			||||||
@ -396,7 +415,9 @@ test('Log all "verifyRelease" errors', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  const errors = [
 | 
					  const errors = [
 | 
				
			||||||
    ...(await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}))),
 | 
					    ...(await t.throws(
 | 
				
			||||||
 | 
					      semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					    )),
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.deepEqual(errors, [error1, error2]);
 | 
					  t.deepEqual(errors, [error1, error2]);
 | 
				
			||||||
@ -445,7 +466,14 @@ test('Dry-run skips publish and success', async t => {
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.not(t.context.log.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
					  t.not(t.context.log.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
				
			||||||
  t.is(verifyConditions.callCount, 1);
 | 
					  t.is(verifyConditions.callCount, 1);
 | 
				
			||||||
@ -484,7 +512,9 @@ test('Dry-run skips fail', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  const errors = [
 | 
					  const errors = [
 | 
				
			||||||
    ...(await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}))),
 | 
					    ...(await t.throws(
 | 
				
			||||||
 | 
					      semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					    )),
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.deepEqual(errors, [error1, error2]);
 | 
					  t.deepEqual(errors, [error1, error2]);
 | 
				
			||||||
@ -532,7 +562,14 @@ test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async t
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: false, branch: 'master'}),
 | 
					    'env-ci': () => ({isCi: false, branch: 'master'}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(t.context.log.args[1][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
					  t.is(t.context.log.args[1][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
				
			||||||
  t.is(verifyConditions.callCount, 1);
 | 
					  t.is(verifyConditions.callCount, 1);
 | 
				
			||||||
@ -575,7 +612,14 @@ test('Dry-run does not print changelog if "generateNotes" return "undefined"', a
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['Release note for version 2.0.0:']);
 | 
					  t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['Release note for version 2.0.0:']);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -619,7 +663,14 @@ test('Allow local releases with "noCi" option', async t => {
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: false, branch: 'master', isPr: true}),
 | 
					    'env-ci': () => ({isCi: false, branch: 'master', isPr: true}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.not(t.context.log.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
					  t.not(t.context.log.args[0][0], 'This run was not triggered in a known CI environment, running in dry-run mode.');
 | 
				
			||||||
  t.not(
 | 
					  t.not(
 | 
				
			||||||
@ -671,7 +722,14 @@ test('Accept "undefined" value returned by the "generateNotes" plugins', async t
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(analyzeCommits.callCount, 1);
 | 
					  t.is(analyzeCommits.callCount, 1);
 | 
				
			||||||
  t.deepEqual(analyzeCommits.args[0][1].lastRelease, lastRelease);
 | 
					  t.deepEqual(analyzeCommits.args[0][1].lastRelease, lastRelease);
 | 
				
			||||||
@ -700,7 +758,10 @@ test('Returns false if triggered by a PR', async t => {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.false(
 | 
					  t.false(
 | 
				
			||||||
    await semanticRelease({cwd, repositoryUrl}, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}})
 | 
					    await semanticRelease(
 | 
				
			||||||
 | 
					      {cwd, repositoryUrl},
 | 
				
			||||||
 | 
					      {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  t.is(
 | 
					  t.is(
 | 
				
			||||||
    t.context.log.args[t.context.log.args.length - 1][0],
 | 
					    t.context.log.args[t.context.log.args.length - 1][0],
 | 
				
			||||||
@ -728,7 +789,7 @@ test('Returns false if triggered on an outdated clone', async t => {
 | 
				
			|||||||
  t.false(
 | 
					  t.false(
 | 
				
			||||||
    await semanticRelease(
 | 
					    await semanticRelease(
 | 
				
			||||||
      {repositoryUrl},
 | 
					      {repositoryUrl},
 | 
				
			||||||
      {cwd: repoDir, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}
 | 
					      {cwd: repoDir, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  t.deepEqual(t.context.log.args[t.context.log.args.length - 1], [
 | 
					  t.deepEqual(t.context.log.args[t.context.log.args.length - 1], [
 | 
				
			||||||
@ -757,7 +818,14 @@ test('Returns false if not running from the configured branch', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'other-branch', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'other-branch', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.false(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.false(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
  t.is(
 | 
					  t.is(
 | 
				
			||||||
    t.context.log.args[1][0],
 | 
					    t.context.log.args[1][0],
 | 
				
			||||||
    'This test run was triggered on the branch other-branch, while semantic-release is configured to only publish from master, therefore a new version won’t be published.'
 | 
					    'This test run was triggered on the branch other-branch, while semantic-release is configured to only publish from master, therefore a new version won’t be published.'
 | 
				
			||||||
@ -794,7 +862,14 @@ test('Returns false if there is no relevant changes', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.false(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.false(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
  t.is(analyzeCommits.callCount, 1);
 | 
					  t.is(analyzeCommits.callCount, 1);
 | 
				
			||||||
  t.is(verifyRelease.callCount, 0);
 | 
					  t.is(verifyRelease.callCount, 0);
 | 
				
			||||||
  t.is(generateNotes.callCount, 0);
 | 
					  t.is(generateNotes.callCount, 0);
 | 
				
			||||||
@ -841,7 +916,12 @@ test('Exclude commits with [skip release] or [release skip] from analysis', asyn
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}});
 | 
					  await semanticRelease(options, {
 | 
				
			||||||
 | 
					    cwd,
 | 
				
			||||||
 | 
					    env: {},
 | 
				
			||||||
 | 
					    stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(analyzeCommits.callCount, 1);
 | 
					  t.is(analyzeCommits.callCount, 1);
 | 
				
			||||||
  t.is(analyzeCommits.args[0][1].commits.length, 2);
 | 
					  t.is(analyzeCommits.args[0][1].commits.length, 2);
 | 
				
			||||||
@ -865,7 +945,9 @@ test('Log both plugins errors and errors thrown by "fail" plugin', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  await t.throws(
 | 
				
			||||||
 | 
					    semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(t.context.error.args[t.context.error.args.length - 1][0], 'ERR Plugin error');
 | 
					  t.is(t.context.error.args[t.context.error.args.length - 1][0], 'ERR Plugin error');
 | 
				
			||||||
  t.is(t.context.error.args[t.context.error.args.length - 3][1], failError1);
 | 
					  t.is(t.context.error.args[t.context.error.args.length - 3][1], failError1);
 | 
				
			||||||
@ -888,7 +970,9 @@ test('Call "fail" only if a plugin returns a SemanticReleaseError', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await t.throws(semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  await t.throws(
 | 
				
			||||||
 | 
					    semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.true(fail.notCalled);
 | 
					  t.true(fail.notCalled);
 | 
				
			||||||
  t.is(t.context.error.args[t.context.error.args.length - 1][1], pluginError);
 | 
					  t.is(t.context.error.args[t.context.error.args.length - 1][1], pluginError);
 | 
				
			||||||
@ -903,7 +987,9 @@ test('Throw SemanticReleaseError if repositoryUrl is not set and cannot be found
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  const errors = [
 | 
					  const errors = [
 | 
				
			||||||
    ...(await t.throws(semanticRelease({}, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}))),
 | 
					    ...(await t.throws(
 | 
				
			||||||
 | 
					      semanticRelease({}, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()})
 | 
				
			||||||
 | 
					    )),
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Verify error code and type
 | 
					  // Verify error code and type
 | 
				
			||||||
@ -939,7 +1025,7 @@ test('Throw an Error if plugin returns an unexpected value', async t => {
 | 
				
			|||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  const error = await t.throws(
 | 
					  const error = await t.throws(
 | 
				
			||||||
    semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}),
 | 
					    semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}),
 | 
				
			||||||
    Error
 | 
					    Error
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  t.regex(error.details, /string/);
 | 
					  t.regex(error.details, /string/);
 | 
				
			||||||
@ -974,7 +1060,14 @@ test('Get all commits including the ones not in the shallow clone', async t => {
 | 
				
			|||||||
    './lib/get-logger': () => t.context.logger,
 | 
					    './lib/get-logger': () => t.context.logger,
 | 
				
			||||||
    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
					    'env-ci': () => ({isCi: true, branch: 'master', isPr: false}),
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}));
 | 
					  t.truthy(
 | 
				
			||||||
 | 
					    await semanticRelease(options, {
 | 
				
			||||||
 | 
					      cwd,
 | 
				
			||||||
 | 
					      env: {},
 | 
				
			||||||
 | 
					      stdout: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					      stderr: new WritableStreamBuffer(),
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(analyzeCommits.args[0][1].commits.length, 3);
 | 
					  t.is(analyzeCommits.args[0][1].commits.length, 3);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import test from 'ava';
 | 
				
			|||||||
import {escapeRegExp} from 'lodash';
 | 
					import {escapeRegExp} from 'lodash';
 | 
				
			||||||
import {writeJson, readJson} from 'fs-extra';
 | 
					import {writeJson, readJson} from 'fs-extra';
 | 
				
			||||||
import execa from 'execa';
 | 
					import execa from 'execa';
 | 
				
			||||||
 | 
					import {WritableStreamBuffer} from 'stream-buffers';
 | 
				
			||||||
import {SECRET_REPLACEMENT} from '../lib/definitions/constants';
 | 
					import {SECRET_REPLACEMENT} from '../lib/definitions/constants';
 | 
				
			||||||
import {gitHead as getGitHead, gitTagHead, gitRepo, gitCommits, gitRemoteTagHead, gitPush} from './helpers/git-utils';
 | 
					import {gitHead as getGitHead, gitTagHead, gitRepo, gitCommits, gitRemoteTagHead, gitPush} from './helpers/git-utils';
 | 
				
			||||||
import gitbox from './helpers/gitbox';
 | 
					import gitbox from './helpers/gitbox';
 | 
				
			||||||
@ -490,7 +491,7 @@ test('Run via JS API', async t => {
 | 
				
			|||||||
  t.log('Commit a feature');
 | 
					  t.log('Commit a feature');
 | 
				
			||||||
  await gitCommits(['feat: Initial commit'], {cwd});
 | 
					  await gitCommits(['feat: Initial commit'], {cwd});
 | 
				
			||||||
  t.log('$ Call semantic-release via API');
 | 
					  t.log('$ Call semantic-release via API');
 | 
				
			||||||
  await semanticRelease(undefined, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}});
 | 
					  await semanticRelease(undefined, {cwd, env, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Verify package.json and has been updated
 | 
					  // Verify package.json and has been updated
 | 
				
			||||||
  t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
 | 
					  t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user