auth0-id-generator
Version:
Generates random ids with a prefix (a la Stripe)
117 lines (98 loc) • 3.31 kB
JavaScript
var expect = require('chai').expect;
var IdGenerator = require('../lib');
describe('with no accepted prefix list', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator();
});
it ('should generate id with provided prefix', function(){
var id = id_generator.new('cus');
expect(id).to.have.length(20);
expect(id).to.match(/^cus_[a-zA-Z0-9]{16}$/);
});
it ('should throw if no prefix is provided', function(){
expect(function () {
id_generator.new();
}).to.throw(Error, /missing prefix for id/);
});
});
describe('with accepted prefix list', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator(['cus', 'con']);
});
it ('should generate id if prefix is in list', function(){
var id = id_generator.new('cus');
expect(id).to.have.length(20);
expect(id).to.match(/^cus_[a-zA-Z0-9]{16}$/);
});
it ('should throw prefix is not in list', function(){
expect(function() { id_generator.new('cli') }).to.throw(Error, /invalid prefix cli, valid: cus,con/);
});
});
describe('with one accepted prefix', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator('cus');
});
it ('should generate the id with the default prefix', function(){
var id = id_generator.new();
expect(id).to.have.length(20);
expect(id).to.match(/^cus_[a-zA-Z0-9]{16}$/);
});
});
describe('uid', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator('cus');
});
it ('should generate an uid with specified len', function(){
var id = id_generator.newUid(30);
expect(id).to.have.length(30);
expect(id).to.match(/^[a-zA-Z0-9]{30}$/);
});
});
describe('api v1: with length, alphabet and prefix defined', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator({ len: 4, alphabet: 'abcd1234', prefix: 'usr' });
});
it ('should generate the id with the defined prefix, length and alphabet', function(){
var id = id_generator.get();
expect(id).to.have.length(8);
expect(id).to.match(/^usr_[a-d1-4]{4}$/);
});
});
describe('api v1: with length and prefix defined', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator({ len: 4, prefix: 'tkt' });
});
it ('should generate the id with the defined length and prefix and the default alphabet', function(){
var id = id_generator.get();
expect(id).to.have.length(8);
expect(id).to.match(/^tkt_[a-zA-Z0-9]{4}$/);
});
});
describe('api v1: with custom separator', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator({ len: 4, prefix: 'tkt', separator: '@' });
});
it ('should generate the id with the defined separator', function(){
var id = id_generator.get();
expect(id).to.have.length(8);
expect(id).to.match(/^tkt@[a-zA-Z0-9]{4}$/);
});
});
describe('api v1: with nothing defined', function () {
var id_generator;
before(function(){
id_generator = new IdGenerator();
});
it ('should generate the id with the default length, prefix and alphabet', function(){
var id = id_generator.get();
expect(id).to.have.length(16);
expect(id).to.match(/^[a-zA-Z0-9]{16}$/);
});
});