feat: add tests for node/settings.ts (#4717)
This commit is contained in:
parent
33c50972bc
commit
70c91c857a
62
test/unit/node/settings.test.ts
Normal file
62
test/unit/node/settings.test.ts
Normal file
@ -0,0 +1,62 @@
|
||||
import { logger } from "@coder/logger"
|
||||
import { promises as fs } from "fs"
|
||||
import path from "path"
|
||||
import { SettingsProvider, CoderSettings } from "../../../src/node/settings"
|
||||
import { clean, mockLogger, tmpdir } from "../../utils/helpers"
|
||||
|
||||
describe("settings", () => {
|
||||
const testName = "settingsTests"
|
||||
let testDir = ""
|
||||
|
||||
beforeAll(async () => {
|
||||
mockLogger()
|
||||
await clean(testName)
|
||||
testDir = await tmpdir(testName)
|
||||
})
|
||||
describe("with invalid JSON in settings file", () => {
|
||||
let mockSettingsFile = "coder.json"
|
||||
let pathToMockSettingsFile = ""
|
||||
|
||||
beforeEach(async () => {
|
||||
pathToMockSettingsFile = path.join(testDir, mockSettingsFile)
|
||||
// Missing a quote, which makes it invalid intentionally
|
||||
await fs.writeFile(pathToMockSettingsFile, '{"fakeKey":true,"helloWorld:"test"}')
|
||||
})
|
||||
afterEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
it("should log a warning", async () => {
|
||||
const settings = new SettingsProvider<CoderSettings>(pathToMockSettingsFile)
|
||||
await settings.read()
|
||||
// This happens when we can't parse a JSON (usually error in file)
|
||||
expect(logger.warn).toHaveBeenCalledWith("Unexpected token t in JSON at position 29")
|
||||
})
|
||||
})
|
||||
describe("with invalid settings file path", () => {
|
||||
let mockSettingsFile = "nonExistent.json"
|
||||
let pathToMockSettingsFile = ""
|
||||
|
||||
beforeEach(async () => {
|
||||
// Add hello so it's a directory that doesn't exist
|
||||
// NOTE: if we don't have that, it fails the test
|
||||
// That's because it will write a file if it doesn't exist
|
||||
// but it throws if there's a directory in the path that
|
||||
// doesn't exist.
|
||||
pathToMockSettingsFile = path.join(testDir, "hello", mockSettingsFile)
|
||||
})
|
||||
afterEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
it("should log a warning", async () => {
|
||||
const settings = new SettingsProvider<CoderSettings>(pathToMockSettingsFile)
|
||||
await settings.write({
|
||||
update: {
|
||||
checked: 2,
|
||||
version: "4.0.1",
|
||||
},
|
||||
})
|
||||
// This happens if it tries to writeFile to a nonexistent path
|
||||
expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining("ENOENT: no such file or directory"))
|
||||
})
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user