Merge pull request #2701 from cdr/add-unit-tests-constants
feat(testing): add unit tests for constants
This commit is contained in:
commit
662b5b24e6
@ -31,6 +31,7 @@
|
|||||||
},
|
},
|
||||||
"main": "out/node/entry.js",
|
"main": "out/node/entry.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@schemastore/package": "^0.0.6",
|
||||||
"@types/body-parser": "^1.19.0",
|
"@types/body-parser": "^1.19.0",
|
||||||
"@types/cookie-parser": "^1.4.2",
|
"@types/cookie-parser": "^1.4.2",
|
||||||
"@types/express": "^4.17.8",
|
"@types/express": "^4.17.8",
|
||||||
@ -62,8 +63,8 @@
|
|||||||
"stylelint": "^13.0.0",
|
"stylelint": "^13.0.0",
|
||||||
"stylelint-config-recommended": "^3.0.0",
|
"stylelint-config-recommended": "^3.0.0",
|
||||||
"ts-node": "^9.0.0",
|
"ts-node": "^9.0.0",
|
||||||
"wtfnode": "^0.8.4",
|
"typescript": "^4.1.3",
|
||||||
"typescript": "^4.1.3"
|
"wtfnode": "^0.8.4"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@types/node": "^12.12.7",
|
"@types/node": "^12.12.7",
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
import { logger } from "@coder/logger"
|
import { logger } from "@coder/logger"
|
||||||
|
import { JSONSchemaForNPMPackageJsonFiles } from "@schemastore/package"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
|
|
||||||
let pkg: { version?: string; commit?: string } = {}
|
export function getPackageJson(relativePath: string): JSONSchemaForNPMPackageJsonFiles {
|
||||||
try {
|
let pkg = {}
|
||||||
pkg = require("../../package.json")
|
try {
|
||||||
} catch (error) {
|
pkg = require(relativePath)
|
||||||
logger.warn(error.message)
|
} catch (error) {
|
||||||
|
logger.warn(error.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const pkg = getPackageJson("../../package.json")
|
||||||
|
|
||||||
export const version = pkg.version || "development"
|
export const version = pkg.version || "development"
|
||||||
export const commit = pkg.commit || "development"
|
export const commit = pkg.commit || "development"
|
||||||
export const rootPath = path.resolve(__dirname, "../..")
|
export const rootPath = path.resolve(__dirname, "../..")
|
||||||
|
58
test/constants.test.ts
Normal file
58
test/constants.test.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// Note: we need to import logger from the root
|
||||||
|
// because this is the logger used in logError in ../src/common/util
|
||||||
|
import { logger } from "../node_modules/@coder/logger"
|
||||||
|
import { commit, getPackageJson, version } from "../src/node/constants"
|
||||||
|
|
||||||
|
describe("constants", () => {
|
||||||
|
describe("getPackageJson", () => {
|
||||||
|
let spy: jest.SpyInstance
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
spy = jest.spyOn(logger, "warn")
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.clearAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.restoreAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should log a warning if package.json not found", () => {
|
||||||
|
const expectedErrorMessage = "Cannot find module './package.json' from 'src/node/constants.ts'"
|
||||||
|
|
||||||
|
getPackageJson("./package.json")
|
||||||
|
|
||||||
|
expect(spy).toHaveBeenCalled()
|
||||||
|
expect(spy).toHaveBeenCalledWith(expectedErrorMessage)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should find the package.json", () => {
|
||||||
|
// the function calls require from src/node/constants
|
||||||
|
// so to get the root package.json we need to use ../../
|
||||||
|
const packageJson = getPackageJson("../../package.json")
|
||||||
|
expect(Object.keys(packageJson).length).toBeGreaterThan(0)
|
||||||
|
expect(packageJson.name).toBe("code-server")
|
||||||
|
expect(packageJson.description).toBe("Run VS Code on a remote server.")
|
||||||
|
expect(packageJson.repository).toBe("https://github.com/cdr/code-server")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("version", () => {
|
||||||
|
it("should return the package.json version", () => {
|
||||||
|
// Source: https://gist.github.com/jhorsman/62eeea161a13b80e39f5249281e17c39#gistcomment-2896416
|
||||||
|
const validSemVar = new RegExp("^(0|[1-9]d*).(0|[1-9]d*).(0|[1-9]d*)")
|
||||||
|
const isValidSemVar = validSemVar.test(version)
|
||||||
|
expect(version).not.toBe(null)
|
||||||
|
expect(isValidSemVar).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("commit", () => {
|
||||||
|
it("should return 'development' if commit is undefined", () => {
|
||||||
|
// In development, the commit is not stored in our package.json
|
||||||
|
// But when we build code-server and release it, it is
|
||||||
|
expect(commit).toBe("development")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
35
test/http.test.ts
Normal file
35
test/http.test.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { HttpCode, HttpError } from "../src/common/http"
|
||||||
|
|
||||||
|
describe("http", () => {
|
||||||
|
describe("HttpCode", () => {
|
||||||
|
it("should return the correct HTTP codes", () => {
|
||||||
|
expect(HttpCode.Ok).toBe(200)
|
||||||
|
expect(HttpCode.Redirect).toBe(302)
|
||||||
|
expect(HttpCode.NotFound).toBe(404)
|
||||||
|
expect(HttpCode.BadRequest).toBe(400)
|
||||||
|
expect(HttpCode.Unauthorized).toBe(401)
|
||||||
|
expect(HttpCode.LargePayload).toBe(413)
|
||||||
|
expect(HttpCode.ServerError).toBe(500)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("HttpError", () => {
|
||||||
|
it("should work as expected", () => {
|
||||||
|
const message = "Bad request from client"
|
||||||
|
const httpError = new HttpError(message, HttpCode.BadRequest)
|
||||||
|
|
||||||
|
expect(httpError.message).toBe(message)
|
||||||
|
expect(httpError.status).toBe(400)
|
||||||
|
expect(httpError.details).toBeUndefined()
|
||||||
|
})
|
||||||
|
it("should have details if provided", () => {
|
||||||
|
const details = {
|
||||||
|
message: "User needs to be signed-in in order to perform action",
|
||||||
|
}
|
||||||
|
const message = "Unauthorized"
|
||||||
|
const httpError = new HttpError(message, HttpCode.BadRequest, details)
|
||||||
|
|
||||||
|
expect(httpError.details).toStrictEqual(details)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
@ -125,10 +125,6 @@ describe("util", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe("getOptions", () => {
|
describe("getOptions", () => {
|
||||||
// Things to mock
|
|
||||||
// logger
|
|
||||||
// location
|
|
||||||
// document
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const location: LocationLike = {
|
const location: LocationLike = {
|
||||||
pathname: "/healthz",
|
pathname: "/healthz",
|
||||||
|
@ -980,6 +980,11 @@
|
|||||||
"@parcel/utils" "^1.11.0"
|
"@parcel/utils" "^1.11.0"
|
||||||
physical-cpu-count "^2.0.0"
|
physical-cpu-count "^2.0.0"
|
||||||
|
|
||||||
|
"@schemastore/package@^0.0.6":
|
||||||
|
version "0.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@schemastore/package/-/package-0.0.6.tgz#9a76713da1c7551293b7e72e4f387f802bfd5d81"
|
||||||
|
integrity sha512-uNloNHoyHttSSdeuEkkSC+mdxJXMKlcUPOMb//qhQbIQijXg8x54VmAw3jm6GJZQ5DBtIqGBd66zEQCDCChQVA==
|
||||||
|
|
||||||
"@stylelint/postcss-css-in-js@^0.37.2":
|
"@stylelint/postcss-css-in-js@^0.37.2":
|
||||||
version "0.37.2"
|
version "0.37.2"
|
||||||
resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
|
resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
|
||||||
|
Reference in New Issue
Block a user