Add unit tests

This commit is contained in:
Nick O'Leary
2025-04-24 15:26:29 +01:00
parent 7d4d604aa2
commit 0f3d25252b
6 changed files with 158 additions and 7 deletions

View File

@@ -0,0 +1,96 @@
const should = require("should");
const NR_TEST_UTILS = require("nr-test-utils");
const telemetryApi = NR_TEST_UTILS.require("@node-red/runtime/lib/telemetry/index");
describe("telemetry", function() {
afterEach(function () {
telemetryApi.stop()
messages = []
})
let messages = []
function getMockRuntime(settings) {
return {
settings: {
get: key => { return settings[key] },
set: (key, value) => { settings[key] = value },
available: () => true,
},
log: {
debug: (msg) => { messages.push(msg)}
}
}
}
// Principles to test:
// - No settings at all; disable telemetry
// - Runtime settings only; do what it says
// - User settings take precedence over runtime settings
it('Disables telemetry with no settings present', function () {
telemetryApi.init(getMockRuntime({}))
messages.should.have.length(0)
// Returns undefined as we don't know either way
;(telemetryApi.isEnabled() === undefined).should.be.true()
})
it('Runtime settings - enable', function () {
// Enabled in runtime settings
telemetryApi.init(getMockRuntime({
telemetry: { enabled: true }
}))
telemetryApi.isEnabled().should.be.true()
messages.should.have.length(1)
;/Telemetry enabled/.test(messages[0]).should.be.true()
})
it('Runtime settings - disable', function () {
telemetryApi.init(getMockRuntime({
telemetry: { enabled: false },
}))
// Returns false, not undefined
telemetryApi.isEnabled().should.be.false()
messages.should.have.length(0)
})
it('User settings - enable overrides runtime settings', function () {
telemetryApi.init(getMockRuntime({
telemetry: { enabled: false },
telemetryEnabled: true
}))
telemetryApi.isEnabled().should.be.true()
messages.should.have.length(1)
;/Telemetry enabled/.test(messages[0]).should.be.true()
})
it('User settings - disable overrides runtime settings', function () {
telemetryApi.init(getMockRuntime({
telemetry: { enabled: true },
telemetryEnabled: false
}))
telemetryApi.isEnabled().should.be.false()
messages.should.have.length(0)
})
it('Can enable/disable telemetry', function () {
const settings = {}
telemetryApi.init(getMockRuntime(settings))
;(telemetryApi.isEnabled() === undefined).should.be.true()
telemetryApi.enable()
telemetryApi.isEnabled().should.be.true()
messages.should.have.length(1)
;/Telemetry enabled/.test(messages[0]).should.be.true()
settings.should.have.property('telemetryEnabled', true)
telemetryApi.disable()
telemetryApi.isEnabled().should.be.false()
messages.should.have.length(2)
;/Telemetry disabled/.test(messages[1]).should.be.true()
settings.should.have.property('telemetryEnabled', false)
})
})

View File

@@ -0,0 +1,16 @@
const should = require("should");
const NR_TEST_UTILS = require("nr-test-utils");
const api = NR_TEST_UTILS.require("@node-red/runtime/lib/telemetry/metrics/01-core");
describe("telemetry metrics/01-core", function() {
it('reports core metrics', function () {
const result = api({
settings: {
get: key => { return {instanceId: "1234"}[key]}
}
})
result.should.have.property("instanceId", "1234")
})
})

View File

@@ -0,0 +1,14 @@
const should = require("should");
const NR_TEST_UTILS = require("nr-test-utils");
const api = NR_TEST_UTILS.require("@node-red/runtime/lib/telemetry/metrics/02-os");
describe("telemetry metrics/02-os", function() {
it('reports os metrics', function () {
const result = api()
result.should.have.property("os.type")
result.should.have.property("os.release")
result.should.have.property("os.arch")
})
})

View File

@@ -0,0 +1,17 @@
const should = require("should");
const NR_TEST_UTILS = require("nr-test-utils");
const api = NR_TEST_UTILS.require("@node-red/runtime/lib/telemetry/metrics/03-env");
describe("telemetry metrics/03-env", function() {
it('reports env metrics', function () {
const result = api({
settings: {
version: '1.2.3'
}
})
result.should.have.property("env.nodejs", process.version.replace(/^v/, ''))
result.should.have.property("env.node-red", '1.2.3')
})
})