Spaces:
Runtime error
Runtime error
File size: 4,219 Bytes
23ac194 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
'use strict'
const { test } = require('node:test')
const pluginUtilsPublic = require('../../lib/pluginUtils.js')
const symbols = require('../../lib/symbols.js')
const pluginUtils = require('../../lib/pluginUtils')[symbols.kTestInternals]
test("shouldSkipOverride should check the 'skip-override' symbol", t => {
t.plan(2)
yes[Symbol.for('skip-override')] = true
t.assert.ok(pluginUtils.shouldSkipOverride(yes))
t.assert.ok(!pluginUtils.shouldSkipOverride(no))
function yes () {}
function no () {}
})
test('getPluginName should return plugin name if the file is cached', t => {
t.plan(1)
const expectedPluginName = 'example'
const fn = () => console.log('is just an example')
require.cache[expectedPluginName] = { exports: fn }
const pluginName = pluginUtilsPublic.getPluginName(fn)
t.assert.strictEqual(pluginName, expectedPluginName)
})
test('getPluginName should not throw when require.cache is undefined', t => {
t.plan(1)
function example () {
console.log('is just an example')
}
const cache = require.cache
require.cache = undefined
t.after(() => {
require.cache = cache
})
const pluginName = pluginUtilsPublic.getPluginName(example)
t.assert.strictEqual(pluginName, 'example')
})
test("getMeta should return the object stored with the 'plugin-meta' symbol", t => {
t.plan(1)
const meta = { hello: 'world' }
fn[Symbol.for('plugin-meta')] = meta
t.assert.deepStrictEqual(meta, pluginUtils.getMeta(fn))
function fn () {}
})
test('checkDecorators should check if the given decorator is present in the instance', t => {
t.plan(1)
fn[Symbol.for('plugin-meta')] = {
decorators: {
fastify: ['plugin'],
reply: ['plugin'],
request: ['plugin']
}
}
function context () {}
context.plugin = true
context[symbols.kReply] = { prototype: { plugin: true }, props: [] }
context[symbols.kRequest] = { prototype: { plugin: true }, props: [] }
try {
pluginUtils.checkDecorators.call(context, fn)
t.assert.ok('Everything ok')
} catch (err) {
t.assert.fail(err)
}
function fn () {}
})
test('checkDecorators should check if the given decorator is present in the instance (errored)', t => {
t.plan(1)
fn[Symbol.for('plugin-meta')] = {
decorators: {
fastify: ['plugin'],
reply: ['plugin'],
request: ['plugin']
}
}
function context () {}
context.plugin = true
context[symbols.kReply] = { prototype: { plugin: true }, props: [] }
context[symbols.kRequest] = { prototype: {}, props: [] }
try {
pluginUtils.checkDecorators.call(context, fn)
t.assert.fail('should throw')
} catch (err) {
t.assert.strictEqual(err.message, "The decorator 'plugin' is not present in Request")
}
function fn () {}
})
test('checkDecorators should accept optional decorators', t => {
t.plan(1)
fn[Symbol.for('plugin-meta')] = {
decorators: { }
}
function context () {}
context.plugin = true
context[symbols.kReply] = { prototype: { plugin: true } }
context[symbols.kRequest] = { prototype: { plugin: true } }
try {
pluginUtils.checkDecorators.call(context, fn)
t.assert.ok('Everything ok')
} catch (err) {
t.assert.fail(err)
}
function fn () {}
})
test('checkDependencies should check if the given dependency is present in the instance', t => {
t.plan(1)
fn[Symbol.for('plugin-meta')] = {
dependencies: ['plugin']
}
function context () {}
context[pluginUtilsPublic.kRegisteredPlugins] = ['plugin']
try {
pluginUtils.checkDependencies.call(context, fn)
t.assert.ok('Everything ok')
} catch (err) {
t.assert.fail(err)
}
function fn () {}
})
test('checkDependencies should check if the given dependency is present in the instance (errored)', t => {
t.plan(1)
fn[Symbol.for('plugin-meta')] = {
name: 'test-plugin',
dependencies: ['plugin']
}
function context () {}
context[pluginUtilsPublic.kRegisteredPlugins] = []
try {
pluginUtils.checkDependencies.call(context, fn)
t.assert.fail('should throw')
} catch (err) {
t.assert.strictEqual(err.message, "The dependency 'plugin' of plugin 'test-plugin' is not registered")
}
function fn () {}
})
|