Skip to content

Commit

Permalink
spec check more artifacts, with some refactoring
Browse files Browse the repository at this point in the history
(some redundant test code removed)

Co-authored-by: Christopher J. Brody <brodybits@litehelpers.net>
Co-authored-by: Raphael von der Grün <raphinesse@gmail.com>
  • Loading branch information
Christopher J. Brody and raphinesse committed May 30, 2018
1 parent 1aacab5 commit f4b752d
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 47 deletions.
153 changes: 106 additions & 47 deletions spec/create.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,88 +57,138 @@ describe('cordova create checks for valid-identifier', function () {

describe('create end-to-end', function () {

function checkProject () {
function checkProjectCommonArtifacts () {
// Check if top level dirs exist.
var dirs = ['hooks', 'platforms', 'plugins', 'www'];
dirs.forEach(function (d) {
expect(path.join(project, d)).toExist();
});

// Check that README.md exists inside of hooks
expect(path.join(project, 'hooks', 'README.md')).toExist();

// Check if www files exist.
// Check that index.html exists inside of www
expect(path.join(project, 'www', 'index.html')).toExist();

// Check that config.xml was updated.
var configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.packageName()).toEqual(appId);

// TODO (kamrik): check somehow that we got the right config.xml from the fixture and not some place else.
// expect(configXml.name()).toEqual('TestBase');
}
// Check if config.xml exists.
expect(path.join(project, 'config.xml')).toExist();

function checkConfigXml () {
// Check if top level dirs exist.
var dirs = ['hooks', 'platforms', 'plugins', 'www'];
dirs.forEach(function (d) {
expect(path.join(project, d)).toExist();
});
expect(path.join(project, 'hooks', 'README.md')).toExist();

// index.js and template subdir folder should not exist (inner files should be copied to the project folder)
// index.html, index.js and template subdir folder
// should not exist in top level
// (inner files should be copied to the project top level folder)
expect(path.join(project, 'index.html')).not.toExist();
expect(path.join(project, 'index.js')).not.toExist();
expect(path.join(project, 'template')).not.toExist();

// Check if www files exist.
expect(path.join(project, 'www', 'index.html')).toExist();
// Check that .gitignore does not exist inside of www
expect(path.join(project, 'www', '.gitignore')).not.toExist();

// Check that .npmignore does not exist inside of www
expect(path.join(project, 'www', '.npmignore')).not.toExist();

// Check that config.xml does not exist inside of www
expect(path.join(project, 'www', 'config.xml')).not.toExist();

// Check that no package.json exists inside of www
expect(path.join(project, 'www', 'package.json')).not.toExist();

// Check that config.xml was updated.
var configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.packageName()).toEqual(appId);
expect(configXml.version()).toEqual('1.0.0');
// Check that we got the right config.xml from the fixture and not some place else.
expect(configXml.name()).toEqual('TestBase');
}

// Check that config.xml does not exist inside of www
expect(path.join(project, 'www', 'config.xml')).not.toExist();
function checkProjectArtifactsWithConfigFromTemplate () {
checkProjectCommonArtifacts();

// Check that standard js artifact does not exist
expect(path.join(project, 'www', 'js')).not.toExist();
expect(path.join(project, 'www', 'js', 'index.js')).not.toExist();

// [CB-12397] Check that .gitignore does not exist
expect(path.join(project, '.gitignore')).not.toExist();
// [CB-12397] Check that .npmignore does not exist
expect(path.join(project, '.npmignore')).not.toExist();

// Check that we got no package.json
expect(path.join(project, 'package.json')).not.toExist();

// Check that we got the right config.xml from the template and not stock
const configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.description()).toEqual('this is the correct config.xml');
}

function checkSubDir () {
// Check if top level dirs exist.
var dirs = ['hooks', 'platforms', 'plugins', 'www'];
dirs.forEach(function (d) {
expect(path.join(project, d)).toExist();
});
expect(path.join(project, 'hooks', 'README.md')).toExist();
function checkProjectArtifactsWithNoPackageFromTemplate () {
checkProjectCommonArtifacts();

// index.js and template subdir folder should not exist (inner files should be copied to the project folder)
expect(path.join(project, 'index.js')).not.toExist();
expect(path.join(project, 'template')).not.toExist();
// Check that standard js artifact does not exist
expect(path.join(project, 'www', 'js')).not.toExist();
expect(path.join(project, 'www', 'js', 'index.js')).not.toExist();

// [CB-12397] Check that .gitignore does not exist
expect(path.join(project, '.gitignore')).not.toExist();
// [CB-12397] Check that .npmignore does not exist
expect(path.join(project, '.npmignore')).not.toExist();

// Check that we got no package.json
expect(path.join(project, 'package.json')).not.toExist();
}

function checkProjectArtifactsWithPackageFromTemplate () {
checkProjectCommonArtifacts();

// Check that standard js artifact exists
expect(path.join(project, 'www', 'js')).toExist();
expect(path.join(project, 'www', 'js', 'index.js')).toExist();

// Check if package.json exists.
expect(path.join(project, 'package.json')).toExist();

// [CB-12397] Check that .gitignore does not exist
expect(path.join(project, '.gitignore')).not.toExist();
// [CB-12397] Check that .npmignore exists
expect(path.join(project, '.npmignore')).toExist();

// Check that we got package.json (the correct one)
var pkjson = requireFresh(path.join(project, 'package.json'));
// Pkjson.displayName should equal config's name.
expect(pkjson.displayName).toEqual('TestBase');
}

function checkProjectArtifactsWithPackageFromSubDir () {
checkProjectCommonArtifacts();

// Check that standard js artifact does not exist
expect(path.join(project, 'www', 'js')).not.toExist();
expect(path.join(project, 'www', 'js', 'index.js')).not.toExist();

// [CB-12397] Check that .gitignore does not exist
expect(path.join(project, '.gitignore')).not.toExist();
// [CB-12397] Check that .npmignore does not exist
expect(path.join(project, '.npmignore')).not.toExist();

// Check if config files exist.
expect(path.join(project, 'www', 'index.html')).toExist();

// Check that config.xml was updated.
var configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.packageName()).toEqual(appId);
expect(configXml.version()).toEqual('1.0.0');
// Check that we got package.json (the correct one)
var pkjson = requireFresh(path.join(project, 'package.json'));

// Pkjson.displayName should equal config's name.
expect(pkjson.displayName).toEqual(appName);
expect(pkjson.valid).toEqual('true');

// Check that we got the right config.xml
const configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.description()).toEqual('this is the correct config.xml');
}

it('should successfully run without template and use default hello-world app', function () {
// Create a real project with no template
// use default cordova-app-hello-world app
return create(project, appId, appName, {}, events)
.then(checkProject)
.then(checkProjectArtifactsWithPackageFromTemplate)
.then(function () {
var pkgJson = requireFresh(path.join(project, 'package.json'));
// confirm default hello world app copies over package.json and it matched appId
Expand All @@ -161,7 +211,7 @@ describe('create end-to-end', function () {
expect(fetchSpy).toHaveBeenCalledTimes(1);
expect(fetchSpy.calls.argsFor(0)[0]).toBe(config.lib.www.url);
})
.then(checkProject);
.then(checkProjectArtifactsWithPackageFromTemplate);
});

it('should successfully run with NPM package', function () {
Expand All @@ -179,7 +229,7 @@ describe('create end-to-end', function () {
expect(fetchSpy).toHaveBeenCalledTimes(1);
expect(fetchSpy.calls.argsFor(0)[0]).toBe(config.lib.www.url);
})
.then(checkProject);
.then(checkProjectArtifactsWithPackageFromTemplate);
});

it('should successfully run with NPM package and explicitly fetch latest if no version is given', function () {
Expand All @@ -198,7 +248,7 @@ describe('create end-to-end', function () {
expect(fetchSpy).toHaveBeenCalledTimes(1);
expect(fetchSpy.calls.argsFor(0)[0]).toBe(config.lib.www.url + '@latest');
})
.then(checkProject);
.then(checkProjectArtifactsWithPackageFromTemplate);
});

it('should successfully run with template not having a package.json at toplevel', function () {
Expand All @@ -211,7 +261,7 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkProject)
.then(checkProjectArtifactsWithNoPackageFromTemplate)
.then(function () {
// Check that we got the right config.xml
var configXml = new ConfigParser(path.join(project, 'config.xml'));
Expand All @@ -229,7 +279,7 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkProject);
.then(checkProjectArtifactsWithNoPackageFromTemplate);
});

it('should successfully run with template having package.json, and subdirectory, and no package.json in subdirectory', function () {
Expand All @@ -242,7 +292,7 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkProject);
.then(checkProjectArtifactsWithNoPackageFromTemplate);
});

it('should successfully run with template having package.json, and subdirectory, and package.json in subdirectory', function () {
Expand All @@ -255,7 +305,7 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkSubDir);
.then(checkProjectArtifactsWithPackageFromSubDir);
});

it('should successfully run config.xml in the www folder and move it outside', function () {
Expand All @@ -268,7 +318,7 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkConfigXml);
.then(checkProjectArtifactsWithConfigFromTemplate);
});

it('should successfully run with www folder as the template', function () {
Expand All @@ -281,13 +331,20 @@ describe('create end-to-end', function () {
}
};
return create(project, appId, appName, config, events)
.then(checkConfigXml);
.then(checkProjectArtifactsWithConfigFromTemplate)
.then(() => {
// Additional check that we have the fixture www,
// not one from stock the app
expect(path.join(project, 'www', 'fixture-marker-page.html')).toExist();
expect(path.join(project, 'www', 'subdir')).toExist();
expect(path.join(project, 'www', 'subdir', 'sub-fixture-marker-page.html')).toExist();
});
});

it('should successfully run with existing, empty destination', function () {
shell.mkdir('-p', project);
return create(project, appId, appName, {}, events)
.then(checkProject);
.then(checkProjectArtifactsWithPackageFromTemplate);
});

describe('when --link-to is provided', function () {
Expand Down Expand Up @@ -315,6 +372,7 @@ describe('create end-to-end', function () {

// Check www/config exists
expect(path.join(project, 'www', 'config.xml')).toExist();

// Check www/config.xml was not updated.
var configXml = new ConfigParser(path.join(project, 'www', 'config.xml'));
expect(configXml.packageName()).toEqual('io.cordova.hellocordova');
Expand All @@ -323,6 +381,7 @@ describe('create end-to-end', function () {

// Check that config.xml was copied to project/config.xml
expect(path.join(project, 'config.xml')).toExist();

configXml = new ConfigParser(path.join(project, 'config.xml'));
expect(configXml.description()).toEqual('this is the correct config.xml');
// Check project/config.xml was updated.
Expand Down
1 change: 1 addition & 0 deletions spec/templates/config_in_www/www/fixture-marker-page.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<h1>Fixture marker page</h1>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<h1>Sub-fixture marker page</h1>

0 comments on commit f4b752d

Please sign in to comment.