bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
367 lines (339 loc) • 13.2 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
function _chai() {
const data = require("chai");
_chai = function () {
return data;
};
return data;
}
function _bitId() {
const data = _interopRequireDefault(require("./bit-id"));
_bitId = function () {
return data;
};
return data;
}
function _exceptions() {
const data = require("./exceptions");
_exceptions = function () {
return data;
};
return data;
}
describe('Bit-id', () => {
// TODO: those tests are now verified by TS compiler, I think we can remove them
it('should be frozen', () => {
const bitId = new (_bitId().default)({
name: 'my-name'
}); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => bitId.scope = 'name').to.throw(); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => bitId.name = 'name').to.throw(); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => bitId.version = 'name').to.throw();
});
describe('constructor', () => {
it('should not throw for an invalid scope as it hurts performance (it is done on .parse() instead)', () => {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const invalidScope = () => new (_bitId().default)({
scope: 123,
name: 'my-name'
});
(0, _chai().expect)(invalidScope).to.not.throw(_exceptions().InvalidScopeName);
});
it('should not throw for an invalid name as it hurts performance (it is done on .parse() instead)', () => {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const invalidName = () => new (_bitId().default)({
name: ['a', 'b']
});
(0, _chai().expect)(invalidName).to.not.throw(_exceptions().InvalidName);
});
it('should accept an empty scope', () => {
const invalidScope = () => new (_bitId().default)({
scope: null,
name: 'my-name'
});
(0, _chai().expect)(invalidScope).to.not.throw();
});
it('should not accept an empty name', () => {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => new (_bitId().default)({
scope: 'my-scope',
name: null
})).to.throw(_exceptions().InvalidName); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => new (_bitId().default)({
scope: 'my-scope',
name: undefined
})).to.throw(_exceptions().InvalidName); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(() => new (_bitId().default)({
scope: 'my-scope'
})).to.throw(_exceptions().InvalidName);
});
});
describe('changeScope', () => {
it('should return a new BitId with different scope', () => {
const bitId = new (_bitId().default)({
name: 'my-name'
});
(0, _chai().expect)(bitId.changeScope('my-scope')).to.have.property('scope').that.equal('my-scope');
});
it('should accept an empty parameter to remove the scope', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name'
});
(0, _chai().expect)(bitId.changeScope()).to.have.property('scope').that.is.null;
});
});
describe('changeVersion', () => {
it('should return a new BitId with different version', () => {
const bitId = new (_bitId().default)({
name: 'my-name'
});
(0, _chai().expect)(bitId.changeVersion('0.0.1')).to.have.property('version').that.equal('0.0.1');
});
it('should accept an empty parameter to remove the version', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
}); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
(0, _chai().expect)(bitId.changeVersion()).to.have.property('version').that.is.undefined;
});
});
describe('hasScope', () => {
it('should return false when there is no scope', () => {
const bitId = new (_bitId().default)({
name: 'my-name'
});
(0, _chai().expect)(bitId.hasScope()).to.be.false;
});
it('should return true when there is scope', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name'
});
(0, _chai().expect)(bitId.hasScope()).to.be.true;
});
});
describe('getValidBitId', () => {
it('should convert CSSComp to css-comp', () => {
const bitName = 'CSSComp';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/css-comp'); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
}).timeout(5000);
it('should convert EN-US to en-us', () => {
const bitName = 'EN-US';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/en-us');
});
it('should convert AppBar to app-bar', () => {
const bitName = 'AppBar';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/app-bar');
});
it('should convert app-bar to app-bar', () => {
const bitName = 'app-bar';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/app-bar');
});
it('should convert app-Bar to app-bar', () => {
const bitName = 'app-Bar';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/app-bar');
});
it('should convert App-Bar to app-bar', () => {
const bitName = 'App-Bar';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/app-bar');
});
it('should convert CSScomp to cs-scomp ', () => {
const bitName = 'CSScomp';
(0, _chai().expect)(_bitId().default.getValidBitId('global', bitName).toString()).to.equal('global/cs-scomp');
});
it('should convert CSS@comp/CSScomp to css@comp/cs-scomp ', () => {
const bitName = 'CSScomp';
const global = 'CSS@comp';
(0, _chai().expect)(_bitId().default.getValidBitId(global, bitName).toString()).to.equal('css@comp/cs-scomp');
});
it('should convert CSS!!####@comp/app-Bar to app-Bar', () => {
const bitName = 'app-Bar';
const global = 'CSS!!####@comp';
(0, _chai().expect)(_bitId().default.getValidBitId(global, bitName).toString()).to.equal('css!!####@comp/app-bar');
});
});
describe('toString', () => {
it('should not contain the version as latest', () => {
const bitId = _bitId().default.parse('bit.envs/mocha/react@latest');
(0, _chai().expect)(bitId.toString()).to.equal('bit.envs/mocha/react');
});
});
describe('parse', () => {
it('should parse id with scope correctly', () => {
const bitId = _bitId().default.parse('scope/my/long/comp/id', true);
(0, _chai().expect)(bitId.scope).to.equal('scope');
(0, _chai().expect)(bitId.name).to.equal('my/long/comp/id');
(0, _chai().expect)(bitId.box).to.be.undefined;
(0, _chai().expect)(bitId.version).to.equal('latest');
});
it('should parse id without scope correctly', () => {
const bitId = _bitId().default.parse('scope/my/long/comp/id', false);
(0, _chai().expect)(bitId.scope).to.be.null;
(0, _chai().expect)(bitId.name).to.equal('scope/my/long/comp/id');
(0, _chai().expect)(bitId.box).to.be.undefined;
(0, _chai().expect)(bitId.version).to.equal('latest');
});
it('should throw for an invalid id', () => {
const bitId = () => _bitId().default.parse('scope/my/long/co*mp/id', false);
(0, _chai().expect)(bitId).to.throw();
});
});
describe('hasSameScope', () => {
it('should return true when it has the same scope', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name'
});
const anotherId = new (_bitId().default)({
scope: 'my-scope',
name: 'another-name'
});
(0, _chai().expect)(bitId.hasSameScope(anotherId)).to.be.true;
});
it('should return false when it does not the same scope', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name'
});
const anotherId = new (_bitId().default)({
scope: 'another-scope',
name: 'my-name'
});
(0, _chai().expect)(bitId.hasSameScope(anotherId)).to.be.false;
});
it('should return true when both scopes are null', () => {
const bitId = new (_bitId().default)({
scope: null,
name: 'my-name'
});
const anotherId = new (_bitId().default)({
scope: null,
name: 'my-name'
});
(0, _chai().expect)(bitId.hasSameScope(anotherId)).to.be.true;
});
it('should return false when one of the scope is null', () => {
const bitId = new (_bitId().default)({
scope: null,
name: 'my-name'
});
const anotherId = new (_bitId().default)({
scope: 'another-scope',
name: 'my-name'
});
(0, _chai().expect)(bitId.hasSameScope(anotherId)).to.be.false;
});
});
describe('isEqual', () => {
it('should return true for an exact match', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
const anotherId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.isEqual(anotherId)).to.be.true;
});
it('should return false for a version mismatch', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
const anotherId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.2'
});
(0, _chai().expect)(bitId.isEqual(anotherId)).to.be.false;
});
it('should return false for a name mismatch', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
const anotherId = new (_bitId().default)({
scope: 'my-scope',
name: 'another-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.isEqual(anotherId)).to.be.false;
});
it('should return false for a scope mismatch', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
const anotherId = new (_bitId().default)({
scope: 'another-scope',
name: 'my-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.isEqual(anotherId)).to.be.false;
});
});
describe('serialize', () => {
it('should delete the scope property if not set', () => {
const bitId = new (_bitId().default)({
name: 'my-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.serialize()).to.not.have.property('scope');
});
it('should delete the version property if not set', () => {
const bitId = new (_bitId().default)({
name: 'my-name'
});
(0, _chai().expect)(bitId.serialize()).to.not.have.property('version');
});
it('should include all properties if they are all set', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.serialize()).to.have.property('name');
(0, _chai().expect)(bitId.serialize()).to.have.property('scope');
(0, _chai().expect)(bitId.serialize()).to.have.property('version');
});
it('should not be an instance of BitId', () => {
const bitId = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
});
(0, _chai().expect)(bitId.serialize()).to.not.be.an.instanceof(_bitId().default);
});
});
describe('parseBackwardCompatible', () => {
it('should parse the new format, which is an object', () => {
const bitIdObj = new (_bitId().default)({
scope: 'my-scope',
name: 'my-name',
version: '0.0.1'
}).serialize();
const bitId = _bitId().default.parseBackwardCompatible(bitIdObj);
(0, _chai().expect)(bitId).to.be.an.instanceof(_bitId().default);
(0, _chai().expect)(bitId.name).to.equal('my-name');
(0, _chai().expect)(bitId.scope).to.equal('my-scope');
(0, _chai().expect)(bitId.version).to.equal('0.0.1');
});
it('should parse the old format, which is a string', () => {
const bitIdStr = 'my-scope/my-box/my-name@0.0.1';
const bitId = _bitId().default.parseBackwardCompatible(bitIdStr);
(0, _chai().expect)(bitId).to.be.an.instanceof(_bitId().default);
(0, _chai().expect)(bitId.name).to.equal('my-box/my-name');
(0, _chai().expect)(bitId.scope).to.equal('my-scope');
(0, _chai().expect)(bitId.version).to.equal('0.0.1');
});
});
});
;