polymer-cli
Version:
A commandline tool for Polymer projects
115 lines (104 loc) • 4.46 kB
text/typescript
/*
* Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at
* http://polymer.github.io/LICENSE.txt The complete set of authors may be found
* at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
* be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
* Google as part of the polymer project is also subject to an additional IP
* rights grant found at http://polymer.github.io/PATENTS.txt
*/
import {assert} from 'chai';
import * as sinon from 'sinon';
import * as helpers from 'yeoman-test';
import {createGithubGenerator} from '../../../init/github';
import yeoGen = require('yeoman-generator');
/**
* This small helper function wraps createGithubGenerator() so that we may add a
* callback to access the github generator before it is run by Yeoman. Yeoman
* doesn't give us this option otherwise (it takes a generator constructor and
* creates the generator itself, internally).
*/
function createTestGenerator(
generatorOptions: {owner: string, repo: string, semverRange?: string},
generatorWillRun: (generator: yeoGen) => void) {
return function TestGenerator(args: string[]|string, options: {} = {}) {
const GithubGenerator = createGithubGenerator(generatorOptions);
const githubGenerator = new GithubGenerator(args, options);
generatorWillRun(githubGenerator);
return githubGenerator;
};
}
suite('init/github', () => {
suite('createGithubGenerator()', () => {
const semverMatchingRelease = {
tarball_url: 'MATCHING_RELEASE_TARBALL_URL',
tag_name: 'MATCHING_RELEASE_TAG_NAME',
};
let testName = 'returns a generator that untars the ' +
'latest release when no semver range is given';
test(testName, (done) => {
let getSemverReleaseStub: sinon.SinonStub;
let extractReleaseTarballStub: sinon.SinonStub;
const TestGenerator = createTestGenerator(
{
owner: 'Polymer',
repo: 'shop',
},
function setupGeneratorStubs(generator) {
const {_github} = (generator as unknown as {
_github:
{getSemverRelease: unknown, extractReleaseTarball: unknown}
});
getSemverReleaseStub =
// tslint:disable-next-line: no-any
sinon.stub(_github, 'getSemverRelease')
.returns(Promise.resolve(semverMatchingRelease));
extractReleaseTarballStub =
// tslint:disable-next-line: no-any
sinon.stub(_github, 'extractReleaseTarball')
.returns(Promise.resolve());
});
// tslint:disable-next-line: no-any
helpers.run(TestGenerator as any).on('end', () => {
assert.isOk(getSemverReleaseStub.calledWith('*'));
assert.isOk(extractReleaseTarballStub.calledWith(
semverMatchingRelease.tarball_url));
done();
});
});
testName = 'returns a generator that untars the latest ' +
'matching release when a semver range is given';
test(testName, (done) => {
const testSemverRange = '^v123.456.789';
let getSemverReleaseStub: sinon.SinonStub;
let extractReleaseTarballStub: sinon.SinonStub;
const TestGenerator = createTestGenerator(
{
owner: 'Polymer',
repo: 'shop',
semverRange: testSemverRange,
},
function setupGeneratorStubs(generator) {
const {_github} = generator as unknown as {
_github:
{getSemverRelease: unknown, extractReleaseTarball: unknown}
};
getSemverReleaseStub =
// tslint:disable-next-line: no-any
sinon.stub(_github, 'getSemverRelease')
.returns(Promise.resolve(semverMatchingRelease));
extractReleaseTarballStub =
// tslint:disable-next-line: no-any
sinon.stub(_github, 'extractReleaseTarball')
.returns(Promise.resolve());
});
// tslint:disable-next-line: no-any
helpers.run(TestGenerator as any).on('end', () => {
assert.isOk(getSemverReleaseStub.calledWith(testSemverRange));
assert.isOk(extractReleaseTarballStub.calledWith(
semverMatchingRelease.tarball_url));
done();
});
});
});
});