Pibd-21_Ievlewa_M.D._Intern.../node_modules/lodash-id/test/test.js
2023-12-10 21:07:47 +03:00

237 lines
6.8 KiB
JavaScript

var assert = require('assert')
var _db = require('../src')
// Test lodash-id against Undersocre and Lo-Dash
var libs = {
underscore: require('underscore'),
lodash: require('lodash')
}
Object.keys(libs).forEach(function (name) {
describe(name + ' + lodash-id', function () {
var db
var _ = libs[name]
beforeEach(function () {
_.mixin(_db)
db = {
posts: [
{ id: 1, body: 'one', published: true },
{ id: 2, body: 'two', published: false },
{ id: 3, body: 'three', published: false }
],
comments: [
{ id: 1, body: 'foo', postId: 1 },
{ id: 2, body: 'bar', postId: 2 }
],
authors: [
{ id: '1', name: 'foo' },
{ id: '2', name: 'bar' }
]
}
})
describe('id', function () {
beforeEach(function () { _.id = 'body' })
afterEach(function () { delete _.id })
it('is the property used by get to find document', function () {
var expect = db.posts[0]
var doc = _.getById(db.posts, 'one')
assert.deepEqual(doc, expect)
})
})
describe('createId', function () {
it('returns an id', function () {
assert(_.createId())
})
})
describe('getById', function () {
it('returns doc by id', function () {
var expect = db.posts[0]
var doc = _.getById(db.posts, 1)
assert.deepEqual(doc, expect)
})
it('returns doc by id with string param', function () {
var expect = db.posts[0]
var doc = _.getById(db.posts, '1')
assert.deepEqual(doc, expect)
})
it('returns doc by id with string id', function () {
var expect = db.authors[0]
var doc = _.getById(db.authors, 1)
assert.deepEqual(doc, expect)
})
it('returns undefined if doc is not found', function () {
var doc = _.getById(db.posts, 9999)
assert.equal(doc, undefined)
})
})
describe('insert', function () {
describe('and id is set', function () {
it('inserts and returns inserted doc', function () {
var doc = _.insert(db.posts, { id: 'foo', body: 'one' })
assert.equal(db.posts.length, 4)
assert.deepEqual(doc, { id: 'foo', body: 'one' })
assert.deepEqual(_.getById(db.posts, doc.id), { id: 'foo', body: 'one' })
})
it('does not replace in place and throws an error', function () {
var length = db.posts.length
assert.throws(function () {
_.insert(db.posts, { id: 2, title: 'one' })
}, /duplicate/)
assert.equal(db.posts.length, length)
assert.deepEqual(_.getById(db.posts, 2), { id: 2, body: 'two', published: false })
assert.deepEqual(_.map(db.posts, 'id'), [ 1, 2, 3 ])
})
})
describe('and id is not set', function () {
it('inserts, sets an id and returns inserted doc', function () {
var doc = _.insert(db.posts, { body: 'one' })
assert.equal(db.posts.length, 4)
assert(doc.id)
assert.equal(doc.body, 'one')
})
})
})
describe('upsert', function () {
describe('and id is set', function () {
it('inserts and returns inserted doc', function () {
var doc = _.upsert(db.posts, { id: 'foo', body: 'one' })
assert.equal(db.posts.length, 4)
assert.deepEqual(doc, { id: 'foo', body: 'one' })
assert.deepEqual(_.getById(db.posts, doc.id), { id: 'foo', body: 'one' })
})
it('replaces in place and returns inserted doc', function () {
var length = db.posts.length
var doc = _.upsert(db.posts, {id: 2, title: 'one'})
assert.equal(db.posts.length, length)
assert.deepEqual(doc, { id: 2, title: 'one' })
assert.deepEqual(_.getById(db.posts, doc.id), { id: 2, title: 'one' })
assert.deepEqual(_.map(db.posts, 'id'), [1, 2, 3])
})
})
describe('and id is not set', function () {
it('inserts, sets an id and returns inserted doc', function () {
var doc = _.upsert(db.posts, {body: 'one'})
assert.equal(db.posts.length, 4)
assert(doc.id)
assert.equal(doc.body, 'one')
})
})
})
describe('updateById', function () {
it('updates doc and returns updated doc', function () {
var doc = _.updateById(db.posts, 1, { published: false })
assert(!db.posts[0].published)
assert(!doc.published)
})
it('keeps initial id type', function () {
var doc = _.updateById(db.posts, '1', { published: false })
assert.strictEqual(doc.id, 1)
})
it('returns undefined if doc is not found', function () {
var doc = _.updateById(db.posts, 9999, { published: false })
assert.equal(doc, undefined)
})
})
describe('updateWhere', function () {
it('updates docs and returns updated docs', function () {
var docs = _.updateWhere(db.posts, { published: false }, { published: true })
assert.equal(docs.length, 2)
assert(db.posts[1].published)
assert(db.posts[2].published)
})
it('returns an empty array if no docs match', function () {
var docs = _.updateWhere(db.posts, { published: 'draft' }, { published: true })
assert.equal(docs.length, 0)
})
})
describe('replaceById', function () {
it('replaces doc and returns it', function () {
var doc = _.replaceById(db.posts, 1, { foo: 'bar' })
assert.deepEqual(doc, db.posts[0])
assert.deepEqual(db.posts[0], { id: 1, foo: 'bar' })
})
it('keeps initial id type', function () {
var doc = _.replaceById(db.posts, '1', { published: false })
assert.strictEqual(doc.id, 1)
})
it('returns undefined if doc is not found', function () {
var doc = _.replaceById(db.posts, 9999, {})
assert.equal(doc, undefined)
})
})
describe('removeById', function () {
it('removes and returns doc ', function () {
var expected = db.posts[0]
var doc = _.removeById(db.posts, 1)
assert.equal(db.posts.length, 2)
assert.deepEqual(doc, expected)
})
it('returns undefined if doc is not found', function () {
var doc = _.removeById(db.posts, 9999)
assert.equal(doc, undefined)
})
})
describe('removeWhere', function () {
it('removes docs', function () {
var expected = [db.comments[0]]
var docs = _.removeWhere(db.comments, { postId: 1 })
assert.equal(db.comments.length, 1)
assert.deepEqual(docs, expected)
})
it('returns an empty array if no docs match', function () {
var docs = _.removeWhere(db.comments, { postId: 9999 })
assert.equal(docs.length, 0)
})
})
})
})