releasy-mono
Version:
CLI tool to release node applications with tag and auto semver bump
212 lines (163 loc) • 4.86 kB
text/coffeescript
should = require 'should'
sinon = require 'sinon'
semver = require 'semver'
{ rm, cd } = require 'shelljs'
steps = require '../lib/steps.js'
createFile = (filePath, contents) ->
contents.to filePath
describe 'Steps', ->
before ->
cd 'test'
after ->
if test '-e', 'package.json' then rm '-f', 'package.json'
if test '-e', 'src/ProductAssemblyInfo.json' then rm '-f', 'package.json'
cd '..'
describe 'picking version provider', ->
it 'should pick first matching provider', ->
# arrange
"".to 'myversion.ext'
p1 = () -> @name = 'p1'
p1.supports = (filePath) -> false
p2 = () -> @name = 'p2'
p2.supports = (filePath) -> true
p3 = () -> @name = 'p3'
p3.supports = (filePath) -> false
providers = [ p1, p2, p3 ]
# act
provider = steps.pickVersionProvider 'myversion.ext', providers
# assert
provider.name.should.equal 'p2'
rm 'myversion.ext'
it 'should throw error if a provider cannot be found', ->
# arrange
"".to 'myversion.bla'
providers = [
supports: () -> false
,
supports: () -> false
]
# act & assert
( ->
steps.pickVersionProvider 'myversion.bla', providers
).should.throw /^Unable to find a provider that supports/
rm 'myversion.bla'
it 'should throw error if file does not exist', ->
# act & assert
( ->
# Force `manifest.json` to not be found.
sinon.stub(global, 'test', -> false)
steps.pickVersionProvider 'mypackage.json'
).should.throw /^Version file not found:/
global.test.restore()
describe 'setup', ->
it 'should not promote a stable version', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act & assert
( ->
steps.setup provider, 'promote', ''
).should.throw()
done()
it 'should set config', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act
config = steps.setup provider, 'patch', ''
# assert
config.newVersion.should.equal '1.2.4'
config.oldVersion.should.equal '1.2.3'
config.versionProvider.should.equal provider
done()
it 'should bump patch', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act
config = steps.setup provider, 'patch', ''
# assert
config.newVersion.should.equal '1.2.4'
done()
it 'should bump minor', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act
config = steps.setup provider, 'minor', ''
# assert
config.newVersion.should.equal '1.3.0'
done()
it 'should bump major', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act
config = steps.setup provider, 'major', ''
# assert
config.newVersion.should.equal '2.0.0'
done()
it 'should bump prerelease', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3-beta.4'
# act
config = steps.setup provider, 'prerelease', ''
# assert
config.newVersion.should.equal '1.2.3-beta.5'
done()
it 'should create prerelease', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3'
# act
config = steps.setup provider, 'patch', 'beta'
# assert
config.newVersion.should.equal '1.2.4-beta'
done()
it 'should promote prerelease', (done) ->
# arrange
provider = readVersion: -> semver '1.2.3-beta.4'
# act
config = steps.setup provider, 'promote', ''
# assert
config.newVersion.should.equal '1.2.3'
done()
describe 'get options file', ->
it 'should use _releasy.yaml file', (done) ->
# arrange
createFile '_releasy.yaml',
"""
default: major
"""
# act
options = steps.getOptionsFile()
# assert
rm '_releasy.yaml'
options.default.should.equal 'major'
done()
it 'should use _releasy.yml file', (done) ->
# arrange
createFile '_releasy.yml',
"""
default: major
"""
# act
options = steps.getOptionsFile()
# assert
rm '_releasy.yml'
options.default.should.equal 'major'
done()
it 'should use _releasy.json file', (done) ->
# arrange
createFile '_releasy.json',
"""
{
"default": "major"
}
"""
# act
options = steps.getOptionsFile()
# assert
rm '_releasy.json'
options.default.should.equal 'major'
done()
it 'should return empty object if no file is found', (done) ->
# act
options = steps.getOptionsFile()
# assert
options.should.be.empty
done()