ember-cli-addon-tests
Advanced tools
Comparing version 0.3.0 to 0.4.0
@@ -25,3 +25,3 @@ var fs = require('fs-extra'); | ||
return pristine.cloneApp(appName) | ||
return pristine.cloneApp(appName, options) | ||
.then(function(appPath) { | ||
@@ -28,0 +28,0 @@ app.path = appPath; |
@@ -10,3 +10,2 @@ "use strict"; | ||
var existsSync = fs.existsSync; | ||
var runCommand = require('./run-command'); | ||
var RSVP = require('rsvp'); | ||
@@ -19,3 +18,3 @@ var Promise = RSVP.Promise; | ||
function cloneApp(appName) { | ||
function cloneApp(appName, options) { | ||
var tempDir = temp.ensureCreated(); | ||
@@ -38,3 +37,3 @@ var previousCwd = process.cwd(); | ||
if (!fs.existsSync(pristineAppPath)) { | ||
return installPristineApp(appName) | ||
return installPristineApp(appName, options) | ||
.then(function() { | ||
@@ -59,6 +58,8 @@ copyUnderTestApp(pristineAppPath, underTestAppPath); | ||
function installPristineApp(appName) { | ||
function installPristineApp(appName, options) { | ||
var hasNodeModules = hasPristineNodeModules(); | ||
var hasBowerComponents = hasPristineBowerComponents(); | ||
var extraOptions = []; | ||
var emberVersion = options.emberVersion || 'canary'; | ||
var emberDataVersion = options.emberDataVersion || 'emberjs/data#master'; | ||
@@ -74,7 +75,7 @@ // First, determine if we can skip installing npm packages | ||
} else if (!hasNodeModules && hasBowerComponents) { | ||
debug("no node_modules but existng bower_components"); | ||
debug("no node_modules but existing bower_components"); | ||
extraOptions = ['--skip-bower']; | ||
// node_modules but no bower_components | ||
} else if (hasNodeModules && !hasBowerComponents) { | ||
debug("no bower_components but existng node_modules"); | ||
debug("no bower_components but existing node_modules"); | ||
extraOptions = ['--skip-npm']; | ||
@@ -94,3 +95,3 @@ // Everything is already there | ||
}) | ||
.then(addEmberDataCanaryToDependencies(appName)); | ||
.then(addEmberDataToDependencies(appName, emberDataVersion)); | ||
@@ -111,10 +112,10 @@ // If we installed a fresh node_modules or bower_components directory, | ||
.then(function() { | ||
debug('installed ember-data canary'); | ||
debug('installed ember-data ' + emberDataVersion); | ||
}) | ||
.then(movePristineNodeModules(appName)) | ||
.then(symlinkAddon); | ||
.then(symlinkAddon(appName)); | ||
} | ||
promise = promise.then(addEmberCanaryToBowerJSON(appName)) | ||
.then(removeEmberDataFromBowerJSON(appName)); | ||
promise = promise.then(addEmberToBowerJSON(appName, emberVersion)) | ||
.then(removeEmberDataFromBowerJSON(appName)) | ||
.then(addAddonUnderTestToDependencies(appName)); | ||
@@ -126,9 +127,18 @@ if (!hasBowerComponents) { | ||
.then(function() { | ||
debug("installed ember#canary"); | ||
}) | ||
.then(movePristineBowerComponents(appName)); | ||
debug('installed ember ' + emberVersion); | ||
}); | ||
} | ||
return promise.then(addAddonUnderTestToDependencies(appName)) | ||
.then(linkDependencies(appName)); | ||
// at this point we have all deps available, so we can run ember-cli | ||
promise = promise.then(runAddonGenerator); | ||
if (!hasNodeModules) { | ||
promise = promise.then(movePristineNodeModules(appName)); | ||
} | ||
if (!hasBowerComponents) { | ||
promise = promise.then(movePristineBowerComponents(appName)); | ||
} | ||
return promise.then(linkDependencies(appName)); | ||
} | ||
@@ -171,3 +181,3 @@ | ||
function addEmberCanaryToBowerJSON(appName) { | ||
function addEmberToBowerJSON(appName, version) { | ||
return function() { | ||
@@ -178,6 +188,6 @@ var bowerJSONPath = path.join(temp.pristinePath, appName, 'bower.json'); | ||
bowerJSON.resolutions = { | ||
"ember": "canary" | ||
"ember": version | ||
}; | ||
bowerJSON.dependencies['ember'] = 'canary'; | ||
bowerJSON.dependencies['ember'] = version; | ||
@@ -199,23 +209,25 @@ fs.writeJsonSync(bowerJSONPath, bowerJSON); | ||
function symlinkAddon() { | ||
var pkg = findAddonPackageJSON(); | ||
var addonPath = findAddonPath(); | ||
var addonSymlinkPath = path.join(temp.pristineNodeModulesPath, pkg.name); | ||
function symlinkAddon(appName) { | ||
return function() { | ||
var pkg = findAddonPackageJSON(); | ||
var addonPath = findAddonPath(); | ||
var addonSymlinkPath = path.join(temp.pristinePath, appName, 'node_modules', pkg.name); | ||
debug("symlinking %s", pkg.name); | ||
debug("symlinking %s", pkg.name); | ||
if (existsSync(addonSymlinkPath)) { | ||
var stats = fs.lstatSync(addonSymlinkPath); | ||
if (stats.isSymbolicLink()) { | ||
debug("%s is already symlinked", pkg.name); | ||
return; | ||
if (existsSync(addonSymlinkPath)) { | ||
var stats = fs.lstatSync(addonSymlinkPath); | ||
if (stats.isSymbolicLink()) { | ||
debug("%s is already symlinked", pkg.name); | ||
return; | ||
} | ||
fs.removeSync(addonSymlinkPath); | ||
} | ||
fs.removeSync(addonSymlinkPath); | ||
} | ||
symlinkDirectory(addonPath, addonSymlinkPath); | ||
symlinkDirectory(addonPath, addonSymlinkPath); | ||
}; | ||
} | ||
function addEmberDataCanaryToDependencies(appName) { | ||
function addEmberDataToDependencies(appName, version) { | ||
return function() { | ||
@@ -225,7 +237,7 @@ var pkg = findAddonPackageJSON(); | ||
debug('installing ember-data canary'); | ||
debug('installing ember-data ' + version); | ||
var packageJSON = fs.readJsonSync(packageJSONPath); | ||
packageJSON.devDependencies['ember-data'] = 'emberjs/data#master'; | ||
packageJSON.devDependencies['ember-data'] = version; | ||
@@ -253,2 +265,23 @@ fs.writeJsonSync('package.json', packageJSON); | ||
function runAddonGenerator() { | ||
var pkg = findAddonPackageJSON(); | ||
var emberCLIPath = findup('node_modules/ember-cli', { | ||
cwd: __dirname | ||
}); | ||
debug('running %s generator', pkg.name); | ||
var blueprintName = pkg.name; | ||
var emberAddon = pkg['ember-addon']; | ||
if (emberAddon && emberAddon.defaultBlueprint) { | ||
blueprintName = emberAddon.defaultBlueprint; | ||
} | ||
var args = [path.join(emberCLIPath, 'bin', 'ember'), 'generate', blueprintName]; | ||
return runCommand.apply(undefined, args) | ||
.catch(function(){}); | ||
} | ||
function findAddonPath() { | ||
@@ -265,9 +298,14 @@ return path.dirname(findAddonPackageJSONPath()); | ||
function findAddonPackageJSONPath() { | ||
var packageJSONPath = findup('package.json', { | ||
cwd: path.join(__dirname, '../../..') | ||
}); | ||
var lastPath; | ||
var foundPath; | ||
debug('found addon package.json; path=%s', packageJSONPath); | ||
while (foundPath = findup('package.json', { | ||
cwd: lastPath ? path.join(lastPath, '../..') : path.join(__dirname, '../../..') | ||
})) { | ||
lastPath = foundPath; | ||
} | ||
return packageJSONPath; | ||
debug('found addon package.json; path=%s', lastPath); | ||
return lastPath; | ||
} | ||
@@ -274,0 +312,0 @@ |
{ | ||
"name": "ember-cli-addon-tests", | ||
"version": "0.3.0", | ||
"version": "0.4.0", | ||
"description": "A set of integration test helpers for Ember CLI addons", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -73,3 +73,3 @@ ## Ember CLI Addon Tests | ||
See the [ember-cli-fastboot acceptance tests](https://github.com/tildeio/ember-cli-fastboot/tree/master/tests/acceptance) | ||
See the [ember-cli-fastboot tests](https://github.com/ember-fastboot/ember-cli-fastboot/tree/master/test) | ||
for real world examples. | ||
@@ -98,2 +98,22 @@ | ||
#### Options | ||
You can customize the app by supplying an options hash: | ||
```js | ||
// returns a promise | ||
app.create('my-app', { | ||
emberVersion: 'release' | ||
}); | ||
``` | ||
The following options exist: | ||
| option | description | defaults to | | ||
|------------------|-----------------------------------------------------------------------------------------|---------------------| | ||
| emberVersion | Set the ember version the app should be created with, as you would in your `bower.json` | canary | | ||
| emberDataVersion | Set the version of ember-data, as you would in your `package.json` | emberjs/data#master | | ||
| fixturesPath | The path to look for your fixture files (see below) | test/fixtures | | ||
#### Fixtures | ||
@@ -100,0 +120,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
68619
25
629
205
3