You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

549 lines
9.3 KiB

'use strict'
const { test } = require('tap')
const SemVerStore = require('./index')
test('Should create a store', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [1],
children: {
1: {
prefix: 1,
store: null,
childrenPrefixes: [2, 3],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [3, 4],
children: {
3: {
prefix: 3,
store: 1,
childrenPrefixes: [],
children: null
},
4: {
prefix: 4,
store: 2,
childrenPrefixes: [],
children: null
}
}
},
3: {
prefix: 3,
store: null,
childrenPrefixes: [0],
children: {
0: {
prefix: 0,
store: 3,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
})
test('Should get the leaf', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.2.4'), 2)
})
test('Should get the leaf (wildcard) / 1', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.2.x'), 2)
})
test('Should get the leaf (wildcard) / 2', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.x'), 3)
})
test('Should get the leaf (wildcard) / 3', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('2.2.x'), null)
})
test('Should get the leaf (wildcard) / 4', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('2.x'), null)
})
test('Should get the leaf (wildcard) / 5', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.0.0', 1)
.set('1.0.1', 2)
.set('1.0.2', 3)
t.strictEqual(store.get('*'), 3)
})
test('Should get the leaf (wildcard) / 6', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.0.0', 1)
.set('1.1.0', 2)
.set('1.0.2', 3)
t.strictEqual(store.get('*'), 2)
})
test('Should get the leaf (wildcard) / 7', t => {
t.plan(1)
const store = SemVerStore()
store
.set('2.0.0', 1)
.set('1.1.0', 2)
.set('2.0.2', 3)
t.strictEqual(store.get('*'), 3)
})
test('Missing patch', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.2'), 2)
})
test('Should get the leaf - 404', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.2.5'), null)
})
test('Should get the leaf (bad formatted semver) / 1', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.2.a'), null)
})
test('Should get the leaf (bad formatted semver) / 2', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
.set('1.3.0', 3)
t.strictEqual(store.get('1.a'), null)
})
test('Big numbers', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.22.34', 1)
.set('2.32.456', 2)
.set('345.432.34', 3)
.set('343.432.36', 4)
.set('343.432.342', 5)
.set('343.435.367', 6)
.set('342.435.34', 7)
.set('341.432.34', 8)
t.strictEqual(store.get('343.x'), 6)
})
test('Delete a version / 1', t => {
t.plan(4)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
t.strictEqual(store.get('1.2.3'), 1)
t.strictEqual(store.get('1.2.4'), 2)
store.del('1.2.3')
t.strictEqual(store.get('1.2.3'), null)
t.strictEqual(store.get('1.2.4'), 2)
})
test('Delete a version / 2', t => {
t.plan(2)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.2.4', 2)
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [1],
children: {
1: {
prefix: 1,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [3, 4],
children: {
3: {
prefix: 3,
store: 1,
childrenPrefixes: [],
children: null
},
4: {
prefix: 4,
store: 2,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
store.del('1.2.3')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [1],
children: {
1: {
prefix: 1,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [4],
children: {
4: {
prefix: 4,
store: 2,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
})
test('Delete a version / 3', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.del('1.2.3')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [],
children: {}
})
})
test('Delete a version / 4', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('2.2.3', 2)
.del('1.2.3')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [3],
children: {
3: {
prefix: 3,
store: 2,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
})
test('Delete a version / 5', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.3.3', 2)
.set('2.2.3', 3)
.del('1.2.x')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [1, 2],
children: {
1: {
prefix: 1,
store: null,
childrenPrefixes: [3],
children: {
3: {
prefix: 3,
store: null,
childrenPrefixes: [3],
children: {
3: {
prefix: 3,
store: 2,
childrenPrefixes: [],
children: null
}
}
}
}
},
2: {
prefix: 2,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [3],
children: {
3: {
prefix: 3,
store: 3,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
})
test('Delete a version / 6', t => {
t.plan(2)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.3.3', 2)
.set('2.2.3', 3)
.del('1.x')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [2],
children: {
2: {
prefix: 2,
store: null,
childrenPrefixes: [3],
children: {
3: {
prefix: 3,
store: 3,
childrenPrefixes: [],
children: null
}
}
}
}
}
}
})
store.del('2.x')
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [],
children: {}
})
})
test('Empty store', t => {
t.plan(1)
const store = SemVerStore()
store
.set('1.2.3', 1)
.set('1.3.3', 2)
.set('2.2.3', 3)
.empty()
t.deepEqual(store.tree, {
prefix: 0,
store: null,
childrenPrefixes: [],
children: null
})
})
test('get with bad type', t => {
t.plan(1)
const store = SemVerStore()
store.set('1.2.3', 1)
t.strictEqual(store.get(5), null)
})
test('set with bad type', t => {
t.plan(1)
const store = SemVerStore()
try {
store.set(1, 1)
t.fail('Should fail')
} catch (err) {
t.is(err.message, 'Version should be a string')
}
})
test('del with bad type', t => {
t.plan(1)
const store = SemVerStore()
try {
store.del(1)
t.fail('Should fail')
} catch (err) {
t.is(err.message, 'Version should be a string')
}
})