chore: synchronize repository state after template group sample split

- Staged deletion of 'docs/sample_import_template_groups_mutation.graphql'.

- Added untracked 'docs/sample_import_host_template_groups_mutation.graphql'.

- Committed updates to 'src/test/template_integration.test.ts'.
This commit is contained in:
Andreas Hilbig 2026-01-26 18:18:14 +01:00
parent b3f84b9cd3
commit 59815636ea
2 changed files with 39 additions and 15 deletions

View file

@ -1,5 +1,5 @@
### Mutation ### Mutation
Use this mutation to import template groups. Use this mutation to import template groups for hosts and templates.
```graphql ```graphql
mutation ImportTemplateGroups($templateGroups: [CreateTemplateGroup!]!) { mutation ImportTemplateGroups($templateGroups: [CreateTemplateGroup!]!) {
@ -17,15 +17,11 @@ mutation ImportTemplateGroups($templateGroups: [CreateTemplateGroup!]!) {
``` ```
### Variables ### Variables
This sample data is based on the `template_groups` from `src/testdata/templates/zbx_default_templates_vcr.yaml`. This sample data is based on the `template_groups` from `src/testdata/templates/zbx_default_templates_vcr.yaml`, excluding the permission groups.
```json ```json
{ {
"templateGroups": [ "templateGroups": [
{
"uuid": "43aab460fe444f18886b19948413b7e3",
"groupName": "Permissions/ConstructionSite"
},
{ {
"uuid": "376524057e094c07aaa0cf7f524849dc", "uuid": "376524057e094c07aaa0cf7f524849dc",
"groupName": "Templates/Roadwork/Controller" "groupName": "Templates/Roadwork/Controller"

View file

@ -136,12 +136,12 @@ describe("Template Integration Tests", () => {
}); });
test("Import and Export template groups comparison", async () => { test("Import and Export template groups comparison", async () => {
// 1. Import // 1. Import (Host Template Groups)
const importSample = readFileSync(join(process.cwd(), 'docs', 'sample_import_template_groups_mutation.graphql'), 'utf-8').replace(/\r\n/g, '\n'); const importSample = readFileSync(join(process.cwd(), 'docs', 'sample_import_host_template_groups_mutation.graphql'), 'utf-8').replace(/\r\n/g, '\n');
const importMutation = importSample.match(/```graphql\n([\s\S]*?)\n```/)![1]; const importMutation = importSample.match(/```graphql\n([\s\S]*?)\n```/)![1];
const importVariables = JSON.parse(importSample.match(/```json\n([\s\S]*?)\n```/)![1]); const importVariables = JSON.parse(importSample.match(/```json\n([\s\S]*?)\n```/)![1]);
// Mock for import (8 groups in sample) // Mock for import
for (const group of importVariables.templateGroups) { for (const group of importVariables.templateGroups) {
// Mock lookup (not found) // Mock lookup (not found)
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce([]); (zabbixAPI.post as jest.Mock).mockResolvedValueOnce([]);
@ -163,13 +163,41 @@ describe("Template Integration Tests", () => {
expect(importResult.errors).toBeUndefined(); expect(importResult.errors).toBeUndefined();
expect(importResult.data.importTemplateGroups).toHaveLength(importVariables.templateGroups.length); expect(importResult.data.importTemplateGroups).toHaveLength(importVariables.templateGroups.length);
// 2. Export (Query) // 2. Import (Permissions Template Groups)
const permImportSample = readFileSync(join(process.cwd(), 'docs', 'sample_import_permissions_template_groups_mutation.graphql'), 'utf-8').replace(/\r\n/g, '\n');
const permImportMutation = permImportSample.match(/```graphql\n([\s\S]*?)\n```/)![1];
const permImportVariables = JSON.parse(permImportSample.match(/```json\n([\s\S]*?)\n```/)![1]);
// Mock for import
for (const group of permImportVariables.templateGroups) {
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce([]);
const mockGroupId = Math.floor(Math.random() * 1000).toString();
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce({ groupids: [mockGroupId] });
}
const permImportResponse = await server.executeOperation({
query: permImportMutation,
variables: permImportVariables,
}, {
contextValue: { zabbixAuthToken: 'test-token' }
});
expect(permImportResponse.body.kind).toBe('single');
// @ts-ignore
const permImportResult = permImportResponse.body.singleResult;
expect(permImportResult.errors).toBeUndefined();
expect(permImportResult.data.importTemplateGroups).toHaveLength(permImportVariables.templateGroups.length);
// 3. Export (Query)
const querySample = readFileSync(join(process.cwd(), 'docs', 'sample_all_template_groups_query.graphql'), 'utf-8').replace(/\r\n/g, '\n'); const querySample = readFileSync(join(process.cwd(), 'docs', 'sample_all_template_groups_query.graphql'), 'utf-8').replace(/\r\n/g, '\n');
const query = querySample.match(/```graphql\n([\s\S]*?)\n```/)![1]; const query = querySample.match(/```graphql\n([\s\S]*?)\n```/)![1];
const queryVariables = JSON.parse(querySample.match(/```json\n([\s\S]*?)\n```/)![1]); const queryVariables = JSON.parse(querySample.match(/```json\n([\s\S]*?)\n```/)![1]);
// Combine all groups for mock query response
const allGroups = [...importVariables.templateGroups, ...permImportVariables.templateGroups];
// Mock for query // Mock for query
const mockGroupsResponse = importVariables.templateGroups.map((g: any, index: number) => ({ const mockGroupsResponse = allGroups.map((g: any, index: number) => ({
groupid: (index + 1000).toString(), groupid: (index + 1000).toString(),
name: g.groupName name: g.groupName
})); }));
@ -186,14 +214,14 @@ describe("Template Integration Tests", () => {
// @ts-ignore // @ts-ignore
const queryResult = queryResponse.body.singleResult; const queryResult = queryResponse.body.singleResult;
expect(queryResult.errors).toBeUndefined(); expect(queryResult.errors).toBeUndefined();
expect(queryResult.data.allTemplateGroups).toHaveLength(importVariables.templateGroups.length); expect(queryResult.data.allTemplateGroups).toHaveLength(allGroups.length);
// Verify names match // Verify names match
const importedNames = importVariables.templateGroups.map((g: any) => g.groupName).sort(); const importedNames = allGroups.map((g: any) => g.groupName).sort();
const exportedNames = queryResult.data.allTemplateGroups.map((g: any) => g.name).sort(); const exportedNames = queryResult.data.allTemplateGroups.map((g: any) => g.name).sort();
expect(exportedNames).toEqual(importedNames); expect(exportedNames).toEqual(importedNames);
// 3. Delete Template Groups // 4. Delete Template Groups
const groupidsToDelete = queryResult.data.allTemplateGroups.map((g: any) => parseInt(g.groupid)); const groupidsToDelete = queryResult.data.allTemplateGroups.map((g: any) => parseInt(g.groupid));
// Mock for query (for name_pattern) // Mock for query (for name_pattern)
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce(queryResult.data.allTemplateGroups.map((g: any) => ({ groupid: g.groupid, name: g.name }))); (zabbixAPI.post as jest.Mock).mockResolvedValueOnce(queryResult.data.allTemplateGroups.map((g: any) => ({ groupid: g.groupid, name: g.name })));
@ -214,7 +242,7 @@ describe("Template Integration Tests", () => {
const deleteResponse = await server.executeOperation({ const deleteResponse = await server.executeOperation({
query: deleteMutation, query: deleteMutation,
variables: { name_pattern: "Templates/Roadwork/%" }, variables: { name_pattern: "%" },
}, { }, {
contextValue: { zabbixAuthToken: 'test-token' } contextValue: { zabbixAuthToken: 'test-token' }
}); });