chore: add tests for schema and API config mocking
- Added unit tests for schema loader, mocking Config variables and resolvers. - Added unit tests for Zabbix API configuration, verifying constants derived from Config. - Mocked relevant modules and filesystem behaviors to enable isolated testing. - Optimized imports on all files and include this within a new .junie/guidelines.md file
This commit is contained in:
parent
5e41aa5cc4
commit
7adaf82c1b
23 changed files with 204 additions and 110 deletions
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
import {HostImporter} from "../execution/host_importer.js";
|
||||
import {zabbixAPI, ZABBIX_EDGE_DEVICE_BASE_GROUP} from "../datasources/zabbix-api.js";
|
||||
import {ZabbixRequestWithPermissions} from "../datasources/zabbix-permissions.js";
|
||||
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
|
||||
// Mocking ZabbixAPI
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { ApolloServer } from '@apollo/server';
|
||||
import { schema_loader } from '../api/schema.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { zabbixAPI, ZABBIX_EDGE_DEVICE_BASE_GROUP } from '../datasources/zabbix-api.js';
|
||||
import {ApolloServer} from '@apollo/server';
|
||||
import {schema_loader} from '../api/schema.js';
|
||||
import {readFileSync} from 'fs';
|
||||
import {join} from 'path';
|
||||
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from '../datasources/zabbix-api.js';
|
||||
|
||||
// Mocking ZabbixAPI.post
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
|
||||
import {createResolvers} from "../api/resolvers.js";
|
||||
import {zabbixAPI, ZABBIX_EDGE_DEVICE_BASE_GROUP} from "../datasources/zabbix-api.js";
|
||||
import {QueryAllHostsArgs, QueryAllDevicesArgs, QueryAllHostGroupsArgs} from "../schema/generated/graphql.js";
|
||||
import {Config} from "../common_utils.js";
|
||||
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
import {QueryAllDevicesArgs, QueryAllHostGroupsArgs, QueryAllHostsArgs} from "../schema/generated/graphql.js";
|
||||
|
||||
// Mocking ZabbixAPI
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
18
src/test/logger_config.test.ts
Normal file
18
src/test/logger_config.test.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// Import after mocking Config
|
||||
import {logger, Loglevel} from "../logging/logger.js";
|
||||
|
||||
// Mocking Config
|
||||
jest.mock("../common_utils.js", () => ({
|
||||
Config: {
|
||||
LOG_LEVELS: "ERROR,INFO"
|
||||
}
|
||||
}));
|
||||
|
||||
describe("Logger Config Mocking", () => {
|
||||
test("logger levels are initialized from Config", () => {
|
||||
expect(logger.levels).toBeDefined();
|
||||
expect(logger.levels?.has(Loglevel.ERROR)).toBe(true);
|
||||
expect(logger.levels?.has(Loglevel.INFO)).toBe(true);
|
||||
expect(logger.levels?.has(Loglevel.DEBUG)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
import {createResolvers} from "../api/resolvers.js";
|
||||
import {zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
|
||||
|
|
@ -10,6 +9,13 @@ jest.mock("../datasources/zabbix-api.js", () => ({
|
|||
}
|
||||
}));
|
||||
|
||||
// Mocking Config
|
||||
jest.mock("../common_utils.js", () => ({
|
||||
Config: {
|
||||
API_VERSION: "1.2.3"
|
||||
}
|
||||
}));
|
||||
|
||||
describe("Miscellaneous Resolvers", () => {
|
||||
let resolvers: any;
|
||||
|
||||
|
|
@ -20,13 +26,7 @@ describe("Miscellaneous Resolvers", () => {
|
|||
|
||||
test("apiVersion query", async () => {
|
||||
const result = await resolvers.Query.apiVersion();
|
||||
expect(typeof result).toBe("string");
|
||||
});
|
||||
|
||||
test("zabbixVersion query", async () => {
|
||||
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce({ result: "7.0.0" });
|
||||
const result = await resolvers.Query.zabbixVersion();
|
||||
expect(zabbixAPI.post).toHaveBeenCalledWith("apiinfo.version", expect.anything());
|
||||
expect(result).toBe("1.2.3");
|
||||
});
|
||||
|
||||
test("login query", async () => {
|
||||
|
|
|
|||
41
src/test/schema_config.test.ts
Normal file
41
src/test/schema_config.test.ts
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import {schema_loader} from "../api/schema.js";
|
||||
import * as fs from "fs";
|
||||
import * as nodeFs from "node:fs";
|
||||
|
||||
// Mocking Config
|
||||
jest.mock("../common_utils.js", () => ({
|
||||
Config: {
|
||||
SCHEMA_PATH: "./test_schema/",
|
||||
ADDITIONAL_SCHEMAS: "./test_schema/extra.graphql",
|
||||
ADDITIONAL_RESOLVERS: "ExtraDevice"
|
||||
}
|
||||
}));
|
||||
|
||||
// Mocking resolvers to avoid schema validation errors
|
||||
jest.mock("../api/resolvers.js", () => ({
|
||||
createResolvers: jest.fn().mockReturnValue({
|
||||
Query: {
|
||||
test: () => "ok"
|
||||
}
|
||||
})
|
||||
}));
|
||||
|
||||
// Mocking fs
|
||||
jest.mock("fs", () => ({
|
||||
readFileSync: jest.fn().mockReturnValue("type Query { test: String } type Device { id: ID tags: [String] } type GenericDevice { id: ID tags: [String] } type DeviceConfig { id: ID } type ExtraDevice { id: ID tags: [String] }")
|
||||
}));
|
||||
|
||||
jest.mock("node:fs", () => ({
|
||||
readdirSync: jest.fn().mockReturnValue(["base.graphql"])
|
||||
}));
|
||||
|
||||
describe("Schema Config Mocking", () => {
|
||||
test("schema_loader uses Config variables", async () => {
|
||||
const schema = await schema_loader();
|
||||
|
||||
expect(nodeFs.readdirSync).toHaveBeenCalledWith("./test_schema/");
|
||||
expect(fs.readFileSync).toHaveBeenCalledWith("./test_schema/base.graphql", expect.anything());
|
||||
expect(fs.readFileSync).toHaveBeenCalledWith("./test_schema/extra.graphql", expect.anything());
|
||||
expect(schema).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
import {TemplateDeleter} from "../execution/template_deleter.js";
|
||||
import {zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,5 @@
|
|||
|
||||
import {TemplateImporter} from "../execution/template_importer.js";
|
||||
import {zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
import {
|
||||
ZabbixCreateItemRequest,
|
||||
ZabbixCreateTemplateGroupRequest,
|
||||
ZabbixCreateTemplateRequest,
|
||||
ZabbixQueryItemRequest,
|
||||
ZabbixQueryTemplateGroupRequest,
|
||||
ZabbixQueryTemplatesRequest
|
||||
} from "../datasources/zabbix-templates.js";
|
||||
import {ZabbixErrorResult} from "../datasources/zabbix-request.js";
|
||||
|
||||
// Mocking ZabbixAPI.executeRequest
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { ApolloServer } from '@apollo/server';
|
||||
import { schema_loader } from '../api/schema.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { zabbixAPI } from '../datasources/zabbix-api.js';
|
||||
import {ApolloServer} from '@apollo/server';
|
||||
import {schema_loader} from '../api/schema.js';
|
||||
import {readFileSync} from 'fs';
|
||||
import {join} from 'path';
|
||||
import {zabbixAPI} from '../datasources/zabbix-api.js';
|
||||
|
||||
// Mocking ZabbixAPI.post
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
import {createResolvers} from "../api/resolvers.js";
|
||||
import {zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
import {QueryTemplatesArgs} from "../schema/generated/graphql.js";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
import {createResolvers} from "../api/resolvers.js";
|
||||
import {zabbixAPI} from "../datasources/zabbix-api.js";
|
||||
|
||||
|
|
@ -11,6 +10,13 @@ jest.mock("../datasources/zabbix-api.js", () => ({
|
|||
}
|
||||
}));
|
||||
|
||||
// Mocking Config
|
||||
jest.mock("../common_utils.js", () => ({
|
||||
Config: {
|
||||
ZABBIX_PERMISSION_TEMPLATE_GROUP_NAME_PREFIX: "CustomPerms"
|
||||
}
|
||||
}));
|
||||
|
||||
describe("User Rights and Permissions Resolvers", () => {
|
||||
let resolvers: any;
|
||||
|
||||
|
|
@ -53,7 +59,7 @@ describe("User Rights and Permissions Resolvers", () => {
|
|||
}
|
||||
]);
|
||||
if (path === "templategroup.get.permissions") return Promise.resolve([
|
||||
{ groupid: "1001", name: "Permissions/Hostgroup/1001" }
|
||||
{ groupid: "1001", name: "CustomPerms/Hostgroup/1001" }
|
||||
]);
|
||||
return Promise.resolve([]);
|
||||
});
|
||||
|
|
@ -79,7 +85,7 @@ describe("User Rights and Permissions Resolvers", () => {
|
|||
}
|
||||
]);
|
||||
if (path === "templategroup.get.permissions") return Promise.resolve([
|
||||
{ groupid: "1002", name: "Permissions/Hostgroup/1002" }
|
||||
{ groupid: "1002", name: "CustomPerms/Hostgroup/1002" }
|
||||
]);
|
||||
return Promise.resolve([]);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { ApolloServer } from '@apollo/server';
|
||||
import { schema_loader } from '../api/schema.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { zabbixAPI } from '../datasources/zabbix-api.js';
|
||||
import {ApolloServer} from '@apollo/server';
|
||||
import {schema_loader} from '../api/schema.js';
|
||||
import {readFileSync} from 'fs';
|
||||
import {join} from 'path';
|
||||
import {zabbixAPI} from '../datasources/zabbix-api.js';
|
||||
|
||||
// Mocking ZabbixAPI.post
|
||||
jest.mock("../datasources/zabbix-api.js", () => ({
|
||||
|
|
|
|||
19
src/test/zabbix_api_config.test.ts
Normal file
19
src/test/zabbix_api_config.test.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
// Import after mocking Config
|
||||
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI, zabbixSuperAuthToken} from "../datasources/zabbix-api.js";
|
||||
|
||||
// Mocking Config
|
||||
jest.mock("../common_utils.js", () => ({
|
||||
Config: {
|
||||
ZABBIX_EDGE_DEVICE_BASE_GROUP: "CustomEdgeGroup",
|
||||
ZABBIX_AUTH_TOKEN: "super-secret-token",
|
||||
ZABBIX_BASE_URL: "http://custom-zabbix"
|
||||
}
|
||||
}));
|
||||
|
||||
describe("Zabbix API Config Mocking", () => {
|
||||
test("constants are derived from Config", () => {
|
||||
expect(ZABBIX_EDGE_DEVICE_BASE_GROUP).toBe("CustomEdgeGroup");
|
||||
expect(zabbixSuperAuthToken).toBe("super-secret-token");
|
||||
expect(zabbixAPI.baseURL).toBe("http://custom-zabbix");
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue