Skip to content

Commit 9f06ee5

Browse files
committed
Add support for json-schema to configuration types
The json-schema is stored as a json object. See eclipse-cdt-cloud/trace-server-protocol#103 Signed-off-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
1 parent 8735afc commit 9f06ee5

File tree

3 files changed

+68
-16
lines changed

3 files changed

+68
-16
lines changed

tsp-typescript-client/fixtures/tsp-client/fetch-configuration-sources-0.json

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,32 @@
1414
"keyName": "test1"
1515
}
1616
]
17+
},
18+
{
19+
"id": "my-source-type-2-id",
20+
"name": "My configuration source 2",
21+
"description": "My configuration source 2 description",
22+
"schema": {
23+
"$schema": "https://json-schema.org/draft/2020-12/schema",
24+
"$id": "https://org.eclipse.tracecompass/custom-execution-analysis.json",
25+
"title": "Custom Execution Analysis",
26+
"description": "Custom Execution Analysis schema",
27+
"type": "object",
28+
"properties": {
29+
"cpus": {
30+
"description": "array of integer",
31+
"type": "array",
32+
"items": {
33+
"type": "number"
34+
}
35+
},
36+
"phone": {
37+
"description": "Phone number",
38+
"type": "string",
39+
"pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
40+
}
41+
},
42+
"required": ["cpus"]
43+
}
1744
}
18-
]
45+
]

tsp-typescript-client/src/models/configuration-source.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,17 @@ export interface ConfigurationSourceType {
2020

2121
/**
2222
* A list of query parameter keys to be passed when creating
23-
* configuration instance of this type
23+
* configuration instance of this type. Use this instead of
24+
* schema. Omit if not used.
2425
*/
25-
parameterDescriptors: ConfigurationParameterDescriptor[];
26+
parameterDescriptors?: ConfigurationParameterDescriptor[];
27+
28+
/**
29+
* a JSON schema that describes the parameters that the front-end
30+
* needs to provide with corresponding values. Use this for complex
31+
* parameter descriptions instead of parameterDescriptors.
32+
*/
33+
schema?: object;
2634
}
2735

2836
/**

tsp-typescript-client/src/protocol/tsp-client.test.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { HttpRequest, HttpResponse, RestClient } from './rest-client';
44
import { FixtureSet } from './test-utils';
55
import { HttpTspClient } from './http-tsp-client';
66
import { DataType } from '../models/data-type';
7+
import { ConfigurationParameterDescriptor } from '../models/configuration-source';
78

89
describe('HttpTspClient Deserialization', () => {
910

@@ -405,22 +406,38 @@ describe('HttpTspClient Deserialization', () => {
405406
const response = await client.fetchConfigurationSourceTypes();
406407
const sourceTypes = response.getModel()!;
407408

408-
expect(sourceTypes).toHaveLength(1);
409+
expect(sourceTypes).toHaveLength(2);
409410
expect(sourceTypes[0].name).toEqual('My configuration source 1');
410411
expect(sourceTypes[0].description).toEqual('My configuration source 1 description');
411412
expect(sourceTypes[0].id).toEqual('my-source-type-1-id');
412-
console.log(sourceTypes[0]);
413-
expect(sourceTypes[0].parameterDescriptors).toHaveLength(2);
414-
415-
expect(sourceTypes[0].parameterDescriptors[0].keyName).toEqual('path');
416-
expect(sourceTypes[0].parameterDescriptors[0].description).toEqual('path description');
417-
expect(sourceTypes[0].parameterDescriptors[0].dataType).toEqual('STRING');
418-
expect(sourceTypes[0].parameterDescriptors[0].isRequired).toBeTruthy();
419-
420-
expect(sourceTypes[0].parameterDescriptors[1].keyName).toEqual('test1');
421-
expect(sourceTypes[0].parameterDescriptors[1].description).toBeUndefined();
422-
expect(sourceTypes[0].parameterDescriptors[1].dataType).toBeUndefined();
423-
expect(sourceTypes[0].parameterDescriptors[1].isRequired).toBeUndefined();
413+
414+
expect(sourceTypes[0].parameterDescriptors).toBeDefined();
415+
const paramDesc: ConfigurationParameterDescriptor[] = sourceTypes[0].parameterDescriptors ?? [];
416+
expect(paramDesc).toHaveLength(2);
417+
418+
expect(paramDesc[0].keyName).toEqual('path');
419+
expect(paramDesc[0].description).toEqual('path description');
420+
expect(paramDesc[0].dataType).toEqual('STRING');
421+
expect(paramDesc[0].isRequired).toBeTruthy();
422+
423+
expect(paramDesc[1].keyName).toEqual('test1');
424+
expect(paramDesc[1].description).toBeUndefined();
425+
expect(paramDesc[1].dataType).toBeUndefined();
426+
expect(paramDesc[1].isRequired).toBeUndefined();
427+
expect(sourceTypes[0].schema).toBeUndefined();
428+
429+
expect(sourceTypes[1].parameterDescriptors).toBeUndefined();
430+
expect(sourceTypes[1].schema).toBeDefined();
431+
const schema: {} = sourceTypes[1].schema ?? {}
432+
const schemaString: string = JSON.stringify(schema);
433+
expect(schemaString).toBeDefined();
434+
435+
// check some scheme content
436+
expect(schema['$schema']).toBeDefined();
437+
expect(schema['$schema']).toEqual('https://json-schema.org/draft/2020-12/schema')
438+
439+
expect(schema['$id']).toBeDefined();
440+
expect(schema['$id']).toEqual('https://org.eclipse.tracecompass/custom-execution-analysis.json')
424441
});
425442

426443
it('configurations', async () => {

0 commit comments

Comments
 (0)