基本schema测试
This commit is contained in:
448
node_modules/@fastify/mongodb/test/index.test.js
generated
vendored
Normal file
448
node_modules/@fastify/mongodb/test/index.test.js
generated
vendored
Normal file
@@ -0,0 +1,448 @@
|
||||
'use strict'
|
||||
|
||||
const { test } = require('node:test')
|
||||
const Fastify = require('fastify')
|
||||
const fastifyMongo = require('..')
|
||||
const { ObjectId } = require('..')
|
||||
|
||||
const mongodb = require('mongodb')
|
||||
|
||||
const NO_DATABASE_MONGODB_URL = 'mongodb://127.0.0.1'
|
||||
const DATABASE_NAME = 'test'
|
||||
const MONGODB_URL = 'mongodb://127.0.0.1/' + DATABASE_NAME
|
||||
const CLIENT_NAME = 'client_name'
|
||||
const ANOTHER_DATABASE_NAME = 'my_awesome_database'
|
||||
const COLLECTION_NAME = 'mycoll'
|
||||
|
||||
function objectIdTest (t, ObjectId, message) {
|
||||
t.plan(4)
|
||||
message = message || 'expect ObjectId value'
|
||||
|
||||
const obj1 = new ObjectId()
|
||||
t.assert.ok(obj1)
|
||||
|
||||
const obj2 = new ObjectId(obj1)
|
||||
t.assert.ok(obj2)
|
||||
t.assert.ok(obj1.equals(obj2))
|
||||
|
||||
const obj3 = new ObjectId()
|
||||
t.assert.ok(!obj1.equals(obj3))
|
||||
}
|
||||
|
||||
async function clientTest (t, client, message) {
|
||||
t.plan(1)
|
||||
message = message || 'expect client'
|
||||
const db = client.db(DATABASE_NAME)
|
||||
|
||||
const col = db.collection(COLLECTION_NAME)
|
||||
|
||||
const r = await col.insertMany([{ a: 1 }])
|
||||
t.assert.strictEqual(1, r.insertedCount)
|
||||
}
|
||||
|
||||
async function databaseTest (t, db, message) {
|
||||
t.plan(1)
|
||||
message = message || 'expect database'
|
||||
|
||||
const col = db.collection(COLLECTION_NAME)
|
||||
|
||||
const r = await col.insertMany([{ a: 1 }])
|
||||
t.assert.strictEqual(1, r.insertedCount)
|
||||
}
|
||||
|
||||
test('re-export ObjectId', async (t) => {
|
||||
t.plan(1)
|
||||
await t.test(async t => objectIdTest(t, fastifyMongo.ObjectId))
|
||||
})
|
||||
|
||||
test('re-export ObjectId destructured', async (t) => {
|
||||
t.plan(1)
|
||||
await t.test(async t => objectIdTest(t, ObjectId))
|
||||
})
|
||||
|
||||
test('export of mongodb', async (t) => {
|
||||
t.plan(2)
|
||||
t.assert.strictEqual(typeof fastifyMongo.mongodb.ObjectId, 'function')
|
||||
t.assert.strictEqual(fastifyMongo.mongodb.BSONType.array, 4)
|
||||
})
|
||||
|
||||
test('{ url: NO_DATABASE_MONGODB_URL }', async (t) => {
|
||||
t.plan(6)
|
||||
|
||||
const fastify = await register(t, { url: NO_DATABASE_MONGODB_URL })
|
||||
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ifError(fastify.mongo.db)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
})
|
||||
|
||||
test('{ url: MONGODB_URL }', async (t) => {
|
||||
t.plan(8)
|
||||
|
||||
const fastify = await register(t, { url: MONGODB_URL })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
})
|
||||
|
||||
test('{ url: NO_DATABASE_MONGODB_URL, name: CLIENT_NAME }', async (t) => {
|
||||
t.plan(11)
|
||||
|
||||
const fastify = await register(t, { url: NO_DATABASE_MONGODB_URL, name: CLIENT_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ifError(fastify.mongo.db)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ifError(fastify.mongo[CLIENT_NAME].db)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
})
|
||||
|
||||
test('{ url: MONGODB_URL, name: CLIENT_NAME }', async (t) => {
|
||||
t.plan(15)
|
||||
|
||||
const fastify = await register(t, { url: MONGODB_URL, name: CLIENT_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].db)
|
||||
t.assert.strictEqual(fastify.mongo[CLIENT_NAME].db.databaseName, DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo[CLIENT_NAME].db))
|
||||
})
|
||||
|
||||
test('{ url: NO_DATABASE_MONGODB_URL, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME }', async (t) => {
|
||||
t.plan(15)
|
||||
|
||||
const fastify = await register(t, { url: NO_DATABASE_MONGODB_URL, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].db)
|
||||
t.assert.strictEqual(fastify.mongo[CLIENT_NAME].db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo[CLIENT_NAME].db))
|
||||
})
|
||||
|
||||
test('{ url: MONGODB_URL, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME }', async (t) => {
|
||||
t.plan(15)
|
||||
|
||||
const fastify = await register(t, { url: MONGODB_URL, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].db)
|
||||
t.assert.strictEqual(fastify.mongo[CLIENT_NAME].db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo[CLIENT_NAME].db))
|
||||
})
|
||||
|
||||
test('{ url: NO_DATABASE_MONGODB_URL, database: ANOTHER_DATABASE_NAME }', async (t) => {
|
||||
t.plan(8)
|
||||
|
||||
const fastify = await register(t, { url: NO_DATABASE_MONGODB_URL, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
})
|
||||
|
||||
test('{ url: MONGODB_URL, database: ANOTHER_DATABASE_NAME }', async (t) => {
|
||||
t.plan(8)
|
||||
|
||||
const fastify = await register(t, { url: MONGODB_URL, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
})
|
||||
|
||||
test('{ client: client }', async (t) => {
|
||||
t.plan(6)
|
||||
|
||||
const client = await mongodb.MongoClient.connect(NO_DATABASE_MONGODB_URL)
|
||||
t.after(() => client.close())
|
||||
|
||||
const fastify = await register(t, { client })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ifError(fastify.mongo.db)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
})
|
||||
|
||||
test('{ client: client, database: DATABASE_NAME }', async (t) => {
|
||||
t.plan(8)
|
||||
|
||||
const client = await mongodb.MongoClient.connect(NO_DATABASE_MONGODB_URL)
|
||||
t.after(() => client.close())
|
||||
|
||||
const fastify = await register(t, { client, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
})
|
||||
|
||||
test('{ client: client, name: CLIENT_NAME }', async (t) => {
|
||||
t.plan(11)
|
||||
|
||||
const client = await mongodb.MongoClient.connect(NO_DATABASE_MONGODB_URL)
|
||||
t.after(() => client.close())
|
||||
|
||||
const fastify = await register(t, { client, name: CLIENT_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ifError(fastify.mongo.db)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ifError(fastify.mongo[CLIENT_NAME].db)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
})
|
||||
|
||||
test('{ client: client, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME }', async (t) => {
|
||||
t.plan(15)
|
||||
|
||||
const client = await mongodb.MongoClient.connect(NO_DATABASE_MONGODB_URL)
|
||||
t.after(() => client.close())
|
||||
|
||||
const fastify = await register(t, { client, name: CLIENT_NAME, database: ANOTHER_DATABASE_NAME })
|
||||
t.assert.ok(fastify.mongo)
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].client)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].ObjectId)
|
||||
t.assert.ok(fastify.mongo[CLIENT_NAME].db)
|
||||
t.assert.strictEqual(fastify.mongo[CLIENT_NAME].db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo[CLIENT_NAME].ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo[CLIENT_NAME].client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo[CLIENT_NAME].db))
|
||||
})
|
||||
|
||||
test('{ client: client } does not set onClose', async (t) => {
|
||||
const client = await mongodb.MongoClient.connect(NO_DATABASE_MONGODB_URL)
|
||||
t.after(() => client.close())
|
||||
|
||||
const fastify = Fastify()
|
||||
fastify.register(fastifyMongo, { client, database: DATABASE_NAME })
|
||||
await fastify.ready()
|
||||
await fastify.close()
|
||||
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
})
|
||||
|
||||
test('{ }', async (t) => {
|
||||
t.plan(2)
|
||||
try {
|
||||
await register(t, {})
|
||||
} catch (err) {
|
||||
t.assert.ok(err)
|
||||
t.assert.strictEqual(err.message, '`url` parameter is mandatory if no client is provided')
|
||||
}
|
||||
})
|
||||
|
||||
test('{ url: "unknown://protocol" }', async (t) => {
|
||||
t.plan(2)
|
||||
try {
|
||||
await register(t, { url: 'unknown://protocol' })
|
||||
} catch (err) {
|
||||
t.assert.ok(err)
|
||||
t.assert.match(err.message, /expected connection string/)
|
||||
}
|
||||
})
|
||||
|
||||
test('double register without name', async (t) => {
|
||||
t.plan(2)
|
||||
|
||||
const fastify = Fastify()
|
||||
t.after(() => fastify.close())
|
||||
|
||||
try {
|
||||
await fastify
|
||||
.register(fastifyMongo, { url: MONGODB_URL })
|
||||
.register(fastifyMongo, { url: MONGODB_URL })
|
||||
.ready()
|
||||
} catch (err) {
|
||||
t.assert.ok(err)
|
||||
t.assert.strictEqual(err.message, 'fastify-mongodb has already registered')
|
||||
}
|
||||
})
|
||||
|
||||
test('double register with different name', async (t) => {
|
||||
t.plan(22)
|
||||
|
||||
const fastify = Fastify()
|
||||
t.after(() => fastify.close())
|
||||
|
||||
await fastify
|
||||
.register(fastifyMongo, { url: MONGODB_URL, name: 'client1' })
|
||||
.register(fastifyMongo, { url: NO_DATABASE_MONGODB_URL, name: 'client2', database: ANOTHER_DATABASE_NAME })
|
||||
.ready()
|
||||
|
||||
t.assert.ok(fastify.mongo)
|
||||
|
||||
t.assert.ok(fastify.mongo.client)
|
||||
t.assert.ok(fastify.mongo.ObjectId)
|
||||
t.assert.ok(fastify.mongo.db)
|
||||
t.assert.strictEqual(fastify.mongo.db.databaseName, DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo.client1.client)
|
||||
t.assert.ok(fastify.mongo.client1.ObjectId)
|
||||
t.assert.ok(fastify.mongo.client1.db)
|
||||
t.assert.strictEqual(fastify.mongo.client1.db.databaseName, DATABASE_NAME)
|
||||
|
||||
t.assert.ok(fastify.mongo.client2.client)
|
||||
t.assert.ok(fastify.mongo.client2.ObjectId)
|
||||
t.assert.ok(fastify.mongo.client2.db)
|
||||
t.assert.strictEqual(fastify.mongo.client2.db.databaseName, ANOTHER_DATABASE_NAME)
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.client1.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client1.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.client1.db))
|
||||
|
||||
await t.test(async t => objectIdTest(t, fastify.mongo.client2.ObjectId))
|
||||
await t.test(async t => clientTest(t, fastify.mongo.client2.client))
|
||||
await t.test(async t => databaseTest(t, fastify.mongo.client2.db))
|
||||
})
|
||||
|
||||
test('double register with the same name', async (t) => {
|
||||
t.plan(2)
|
||||
|
||||
const fastify = Fastify()
|
||||
t.after(() => fastify.close())
|
||||
|
||||
try {
|
||||
await fastify
|
||||
.register(fastifyMongo, { url: MONGODB_URL, name: CLIENT_NAME })
|
||||
.register(fastifyMongo, { url: MONGODB_URL, name: CLIENT_NAME })
|
||||
.ready()
|
||||
} catch (err) {
|
||||
t.assert.ok(err)
|
||||
t.assert.strictEqual(err.message, 'Connection name already registered: ' + CLIENT_NAME)
|
||||
}
|
||||
})
|
||||
|
||||
test('Immutable options', async (t) => {
|
||||
t.plan(1)
|
||||
|
||||
const given = { url: MONGODB_URL, name: CLIENT_NAME, database: DATABASE_NAME }
|
||||
await register(t, given)
|
||||
t.assert.deepStrictEqual(given, {
|
||||
url: MONGODB_URL,
|
||||
name: CLIENT_NAME,
|
||||
database: DATABASE_NAME
|
||||
})
|
||||
})
|
||||
|
||||
test('timeout', async (t) => {
|
||||
t.plan(2)
|
||||
|
||||
const fastify = Fastify()
|
||||
t.after(() => fastify.close())
|
||||
|
||||
try {
|
||||
await fastify
|
||||
.register(fastifyMongo, { url: 'mongodb://127.0.0.1:9999' })
|
||||
.ready()
|
||||
} catch (err) {
|
||||
t.assert.ok(err)
|
||||
t.assert.strictEqual(err.message, 'connect ECONNREFUSED 127.0.0.1:9999')
|
||||
}
|
||||
})
|
||||
|
||||
async function register (t, options) {
|
||||
const fastify = Fastify()
|
||||
t.after(() => fastify.close())
|
||||
|
||||
fastify.register(fastifyMongo, options)
|
||||
|
||||
await fastify.ready()
|
||||
|
||||
return fastify
|
||||
}
|
||||
Reference in New Issue
Block a user