mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
153 lines (137 loc) • 6.05 kB
JavaScript
;
var helper = require('../test-helper');
var chai = require('chai');
var should = chai.should();
var fs = require('fs-extra');
var path = require('path');
var Package = require('../../app/lib/package').Package;
var mavensMateFile = require('../../app/lib/file');
var assert = chai.assert;
chai.use(require('chai-fs'));
describe('mavensmate unit-package', function(){
var project;
before(function(done) {
this.timeout(120000);
helper.putTestProjectInTestWorkspace('package-test');
helper.addProject('package-test')
.then(function(proj) {
project = proj;
done();
})
.catch(function(err) {
done(err);
});
});
after(function(done) {
helper.cleanUpProject('package-test')
done();
});
it('should create instance from package.xml path', function(done) {
// write package
var members = '<types><members>myclass</members><members>myclass2</members><name>ApexClass</name></types><types><members>*</members><name>ApexPage</name></types>';
var packageXml = '<?xml version="1.0" encoding="UTF-8"?><Package xmlns="http://soap.sforce.com/2006/04/metadata">'+members+'<version>36.0</version></Package>';
var packagePath = path.join(helper.baseTestDirectory(), 'workspace', 'package-test', 'src', 'package.xml');
fs.writeFileSync(packagePath, packageXml);
// deserialize package
var pkg = new Package({ path: packagePath });
pkg.init()
.then(function() {
pkg.subscription.should.have.property('ApexClass');
pkg.subscription.should.have.property('ApexPage');
pkg.subscription.ApexClass.length.should.equal(2);
pkg.subscription.ApexPage.should.equal('*');
done();
})
.catch(function(e) {
done(e);
})
.done();
});
it('should support adding/removing members', function(done) {
// write package
var members = '<types><members>myclass</members><members>myclass2</members><name>ApexClass</name></types><types><members>*</members><name>ApexPage</name></types>';
var packageXml = '<?xml version="1.0" encoding="UTF-8"?><Package xmlns="http://soap.sforce.com/2006/04/metadata">'+members+'<version>36.0</version></Package>';
var packagePath = path.join(helper.baseTestDirectory(), 'workspace', 'package-test', 'src', 'package.xml');
fs.writeFileSync(packagePath, packageXml);
var pkg = new Package({ path: packagePath });
pkg.init()
.then(function() {
pkg.subscription.should.have.property('ApexClass');
pkg.subscription.should.have.property('ApexPage');
pkg.subscription.ApexClass.length.should.equal(2);
pkg.subscription.ApexPage.should.equal('*');
var pkgMetadata = new mavensMateFile.MavensMateFile({ path: '/path/to/src/classes/foo.cls' });
pkg.subscribe([pkgMetadata]);
pkg.subscription.ApexClass.length.should.equal(3);
pkgMetadata = new mavensMateFile.MavensMateFile({ path: '/path/to/src/classes/myclass.cls' });
pkg.unsubscribe([pkgMetadata]);
pkg.subscription.ApexClass.length.should.equal(2);
done();
})
.catch(function(e) {
done(e);
})
.done();
});
it('should create instance from metadata array', function(done) {
var files = [];
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/classes/foo.cls' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/objects/Account.object' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/pages/mypage.page' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/pages/mypage2.page' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/triggers/mytrigger.trigger' }));
var pkg = new Package({ files: files });
pkg.init()
.then(function() {
pkg.subscription.should.have.property('ApexClass');
pkg.subscription.should.have.property('ApexPage');
pkg.subscription.should.have.property('CustomObject');
pkg.subscription.ApexClass.length.should.equal(1);
pkg.subscription.ApexPage.length.should.equal(2);
pkg.subscription.CustomObject.length.should.equal(1);
pkg.subscription.ApexTrigger.length.should.equal(1);
done();
})
.catch(function(e) {
done(e);
})
.done();
});
it('should create instance from an array of type names', function(done) {
var pkg = new Package({ metadataTypeXmlNames: ['ApexClass', 'ApexPage'] });
pkg.init()
.then(function() {
pkg.subscription.should.have.property('ApexClass');
pkg.subscription.should.have.property('ApexPage');
pkg.subscription.ApexClass.should.equal('*');
pkg.subscription.ApexPage.should.equal('*');
done();
})
.catch(function(e) {
done(e);
})
.done();
});
it('should write package instance to the specified path', function(done) {
var files = [];
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/classes/foo.cls' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/objects/Account.object' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/pages/mypage.page' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/pages/mypage2.page' }));
files.push(new mavensMateFile.MavensMateFile({ path: '/path/to/src/triggers/mytrigger.trigger' }));
var pkg = new Package({ files: files });
pkg.init()
.then(function() {
pkg.path = path.join(helper.baseTestDirectory(),'workspace', 'package-unit-test.xml');
return pkg.writeFile();
})
.then(function() {
assert.isFile(path.join(helper.baseTestDirectory(),'workspace', 'package-unit-test.xml'), 'Package.xml file not created');
done();
})
.catch(function(e) {
done(e);
})
.done();
});
});