mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
224 lines (207 loc) • 8.01 kB
JavaScript
;
var helper = require('../../test-helper');
var chai = require('chai');
var should = chai.should();
var path = require('path');
var fs = require('fs-extra');
var logger = require('winston');
describe('mavensmate compile-metadata', function(){
var project;
var commandExecutor;
before(function(done) {
helper.bootstrapEnvironment();
this.timeout(120000);
/*jshint camelcase: false */
process.env.mm_compile_check_conflicts = false;
/*jshint camelcase: true */
commandExecutor = helper.getCommandExecutor();
helper.unlinkEditor();
helper.putTestProjectInTestWorkspace('compile-metadata');
helper.addProject('compile-metadata')
.then(function(proj) {
project = proj;
done();
})
.catch(function(err) {
done(err);
});
});
after(function(done) {
this.timeout(120000);
var filesToDelete = [
path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataClass.cls'),
path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataToolingFailClass.cls'),
path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataToolingClass.cls'),
path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'ConflictCheckClass.cls')
];
commandExecutor.execute({
name: 'edit-project',
body: { package: { ApexClass: '*' } },
project: project
})
.then(function(response) {
should.not.equal(response, null);
return helper.cleanUpTestData(project, filesToDelete);
})
.then(function() {
process.env.mm_compile_check_conflicts = false;
helper.cleanUpProject('compile-metadata');
done();
})
.catch(function(err) {
process.env.mm_compile_check_conflicts = false;
helper.cleanUpProject('compile-metadata');
done(err);
});
});
it('should compile an apex class successfully via the tooling api', function(done) {
this.timeout(120000);
helper.createNewMetadata(project, 'ApexClass', 'CompileMetadataToolingClass')
.then(function() {
var apexClassPath = path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataToolingClass.cls');
var payload = {
paths : [ apexClassPath ]
};
process.env.mm_compile_with_tooling_api = true;
return commandExecutor.execute({
name: 'compile-metadata',
body: payload,
project: project
});
})
.then(function(response) {
response.success.should.equal(true);
response.details.componentSuccesses.length.should.equal(1);
response.details.componentSuccesses[0].State.should.equal('Completed');
done();
})
.catch(function(err) {
done(err);
});
});
it('should check for conflicts on the server', function(done) {
/*jshint camelcase: false */
this.timeout(120000);
process.env.mm_compile_check_conflicts = true;
helper.createNewMetadata(project, 'ApexClass', 'ConflictCheckClass')
.then(function() {
return project.updateLocalStore({
'createdById': '005o0000000TB1iAAG',
'createdByName': 'Joseph Ferraro',
'createdDate': '2014-08-18T16:09:51.000Z',
'fileName': 'unpackaged/classes/ConflictCheckClass.cls',
'fullName': 'ConflictCheckClass',
'id': '01po0000001iVdXAAU',
'lastModifiedById': '005o0000000TB1iAAG',
'lastModifiedByName': 'Joseph Ferraro',
'lastModifiedDate': '2012-08-18T16:09:51.000Z',
'manageableState': 'unmanaged',
'namespacePrefix': 'mm2',
'type': 'ApexClass',
'mmState': 'clean'
})
})
.then(function() {
var payload = {
paths : [ path.join(project.path, 'src', 'classes', 'ConflictCheckClass.cls') ]
};
return commandExecutor.execute({
name: 'compile-metadata',
body: payload,
project: project
});
})
.then(function(response) {
response.success.should.equal(false);
response.details.componentSuccesses.length.should.equal(0);
response.details.conflicts.should.have.property('ConflictCheckClass.cls');
process.env.mm_compile_check_conflicts = false;
done();
})
.catch(function(err) {
done(err);
});
/*jshint camelcase: true */
});
it('should unsuccessfully attempt to compile an apex class via the tooling api', function(done) {
this.timeout(120000);
helper.createNewMetadata(project, 'ApexClass', 'CompileMetadataToolingFailClass')
.then(function() {
var apexClassPath = path.join(helper.baseTestDirectory(),'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataToolingFailClass.cls');
var payload = {
paths : [ apexClassPath ]
};
fs.outputFileSync(apexClassPath, 'public class CompileMetadataToolingFailClass { this will not work }');
return commandExecutor.execute({
name: 'compile-metadata',
body: payload,
project: project
});
})
.then(function(response) {
response.success.should.equal(false);
response.details.componentFailures.length.should.equal(1);
response.details.componentFailures[0].should.have.property('DeployDetails');
response.details.componentFailures[0].DeployDetails.componentFailures[0].success.should.equal(false);
response.details.componentFailures[0].DeployDetails.componentFailures[0].lineNumber.should.equal(1);
// response.details.componentFailures[0].DeployDetails.componentFailures[0].columnNumber.should.equal(-1); this is returning 57 in some orgs?
response.details.componentFailures[0].DeployDetails.componentFailures[0].problemType.should.equal('Error');
response.details.componentFailures[0].DeployDetails.componentFailures[0].fileName.should.contain('CompileMetadataToolingFailClass');
done();
})
.catch(function(err) {
done(err);
});
});
it('should compile a meta.xml file via the metadata api', function(done) {
this.timeout(120000);
helper.createNewMetadata(project, 'ApexClass', 'CompileMetadataClass')
.then(function() {
var metaFileLocation = path.join(helper.baseTestDirectory(), 'workspace', 'compile-metadata', 'src', 'classes', 'CompileMetadataClass.cls-meta.xml');
var payload = {
paths : [metaFileLocation]
};
return commandExecutor.execute({
name: 'compile-metadata',
body: payload,
project: project
});
})
.then(function(response) {
logger.debug('response from compile', response);
response.success.should.equal(true);
done();
})
.catch(function(err) {
done(err);
});
});
it('should compile an object file via the metadata api', function(done) {
this.timeout(120000);
commandExecutor.execute({
name: 'edit-project',
body: { package: { CustomObject: 'Account' } },
project: project
})
.then(function(response) {
should.not.equal(response, null);
var accountPath = path.join(project.path, 'src', 'objects', 'Account.object');
fs.existsSync(accountPath).should.equal(true);
var payload = {
paths : [accountPath]
};
return commandExecutor.execute({
name: 'compile-metadata',
body: payload,
project: project
});
})
.then(function(response) {
response.success.should.equal(true);
done();
})
.catch(function(err) {
done(err);
});
});
});