diff --git a/demo/APIC-332/APIC-332.raml b/demo/APIC-332/APIC-332.raml
new file mode 100644
index 0000000..caf171a
--- /dev/null
+++ b/demo/APIC-332/APIC-332.raml
@@ -0,0 +1,22 @@
+#%RAML 1.0
+title: API with Examples
+
+types:
+ Org:
+ type: object
+ description: This description for the type is shown
+ properties:
+ name: string
+ address?: string
+ value?: string
+
+/organization:
+ post:
+ body:
+ application/json:
+ type: Org
+ example:
+ value:
+ name: Fake SA
+ value: Something
+ description: This description for the example is never shown
\ No newline at end of file
diff --git a/demo/apis.json b/demo/apis.json
index f75f76d..936f6d0 100644
--- a/demo/apis.json
+++ b/demo/apis.json
@@ -2,6 +2,7 @@
"demo-api/demo-api.raml": "RAML 1.0",
"raml-types/raml-types.raml": "RAML 1.0",
"google-drive-api/google-drive-api.raml": "RAML 1.0",
+ "APIC-332/APIC-332.raml": "RAML 1.0",
"oas-3-api/oas-3-api.yaml": { "type": "OAS 3.0", "mime": "application/yaml" },
"steveTest-1/stevetest.json": { "type": "OAS 2.0", "mime": "application/json" }
}
diff --git a/demo/index.js b/demo/index.js
index a13b818..b5f9b75 100644
--- a/demo/index.js
+++ b/demo/index.js
@@ -110,6 +110,7 @@ class ApiDemo extends ApiDemoPage {
['demo-api', 'Demo API'],
['google-drive-api', 'Google Drive'],
['raml-types', 'RAML types with raml examples'],
+ ['APIC-332', 'APIC-332'],
].forEach(([file, label]) => {
result[result.length] = html`
${label} - compact model
diff --git a/package-lock.json b/package-lock.json
index 01f1d92..6bde4d5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@api-components/api-resource-example-document",
- "version": "4.3.2",
+ "version": "4.3.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -282,9 +282,9 @@
"integrity": "sha512-lrSwMmcKBWj5HiwgS516WInU3ytS2XOzXSui7maZiQysnqLraO6zDAldcBbgNwHYfuK/DDASoI0znwZOnc7aiw=="
},
"@api-components/api-example-generator": {
- "version": "4.4.8",
- "resolved": "https://registry.npmjs.org/@api-components/api-example-generator/-/api-example-generator-4.4.8.tgz",
- "integrity": "sha512-Qp+UeESM7P8g6GCDvHgeDbpwf7ktmKhwGCpSgJ85GSJ79mMVJkLDrcUhnKPDddjghz/XoMGUzaAH8B7gPjrdow==",
+ "version": "4.4.13",
+ "resolved": "https://registry.npmjs.org/@api-components/api-example-generator/-/api-example-generator-4.4.13.tgz",
+ "integrity": "sha512-K0AS7iG3b6IRx9bl63MT8gBfzG2Ii5UClFGl3qG+atPZ1g29cmWi0f75wCvobTtLThfOjAL7NCcaLE2437MNpQ==",
"requires": {
"@api-components/amf-helper-mixin": "^4.1.8",
"lit-element": "^2.4.0"
diff --git a/package.json b/package.json
index 87ef719..ce185a2 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@api-components/api-resource-example-document",
"description": "A viewer for examples in a resource based on AMF model",
- "version": "4.3.2",
+ "version": "4.3.3",
"license": "Apache-2.0",
"main": "index.js",
"module": "index.js",
@@ -35,7 +35,7 @@
"@advanced-rest-client/prism-highlight": "^4.0.4",
"@anypoint-web-components/anypoint-button": "^1.2.0",
"@api-components/amf-helper-mixin": "^4.3.6",
- "@api-components/api-example-generator": "^4.4.8",
+ "@api-components/api-example-generator": "^4.4.13",
"lit-element": "^2.4.0"
},
"devDependencies": {
diff --git a/src/ApiResourceExampleDocument.d.ts b/src/ApiResourceExampleDocument.d.ts
index 130b903..260dcee 100644
--- a/src/ApiResourceExampleDocument.d.ts
+++ b/src/ApiResourceExampleDocument.d.ts
@@ -213,5 +213,7 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
_computeExampleTitle(example: Example): string;
+ _computeExampleDescription(example: Example): string;
+
_exampleTitleIsMediaType(example: Example): boolean;
}
diff --git a/src/ApiResourceExampleDocument.js b/src/ApiResourceExampleDocument.js
index cdce344..8fed051 100644
--- a/src/ApiResourceExampleDocument.js
+++ b/src/ApiResourceExampleDocument.js
@@ -561,6 +561,30 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
return html`
${label}
`;
}
+ /**
+ * @param {Example} example
+ * @returns {string}
+ */
+ _computeExampleDescription(example) {
+ const { description } = example
+ return !description ? '' : description;
+ }
+
+ /**
+ * @param {Example} example
+ * @returns {TemplateResult|string}
+ */
+ _descriptionTemplate(example) {
+ if (example.isScalar) {
+ return '';
+ }
+ const description = this._computeExampleDescription(example)
+ if (!description) {
+ return '';
+ }
+ return html`${description}
`;
+ }
+
/**
* Returns title to render for example
* @param {Example} example
@@ -596,6 +620,7 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
return examples.map((item) => html`
${this._titleTemplate(item)}
+ ${this._descriptionTemplate(item)}
{
return localStorage.jsonTableEnabled;
}
-
describe('_tableChanged()', () => {
let element = /** @type ApiResourceExampleDocument */ (null);
beforeEach(async () => {
@@ -312,6 +311,23 @@ describe('ApiResourceExampleDocument', () => {
return element._ensureArray(schema[key]);
}
+ async function resolveWhenReady(elm, model, path, method, payloadIndex) {
+ return new Promise((resolve) => {
+ let payload = getPayload(elm, model, path, method);
+ if (payloadIndex !== undefined) {
+ payload = payload[payloadIndex]
+ }
+ elm.examples = payload;
+ elm.addEventListener('has-examples-changed', function f(e) {
+ if (!e.detail.value) {
+ return;
+ }
+ elm.removeEventListener('has-examples-changed', f);
+ setTimeout(() => resolve());
+ });
+ });
+ }
+
describe('__computeExamples()', () => {
[
['Regular model', false],
@@ -529,6 +545,34 @@ describe('ApiResourceExampleDocument', () => {
});
});
+ describe('APIC-332', () => {
+ [
+ ['Regular model', false],
+ ['Compact model', true]
+ ].forEach((item) => {
+ describe(String(item[0]), () => {
+ let amf;
+ before(async () => {
+ amf = await AmfLoader.load(item[1], 'APIC-332');
+ });
+
+ let element = /** @type ApiResourceExampleDocument */ (null);
+ beforeEach(async () => {
+ element = await basicFixture();
+ element.amf = amf;
+ await nextFrame();
+ });
+
+ it('renders description for an example', async () => {
+ element.mediaType = 'application/json';
+ await resolveWhenReady(element, amf, '/organization', 'post', 0);
+ const description = /** @type HTMLElement */ (element.shadowRoot.querySelector('.example-description'));
+ assert.equal(description.innerText, 'This description for the example is never shown');
+ });
+ });
+ });
+ });
+
describe('_computeExampleTitle()', () => {
let element = /** @type ApiResourceExampleDocument */ (null);
@@ -562,6 +606,29 @@ describe('ApiResourceExampleDocument', () => {
});
});
+ describe('_computeExampleDescription()', () => {
+ let element = /** @type ApiResourceExampleDocument */ (null);
+
+ beforeEach(async () => {
+ element = await basicFixture();
+ await nextFrame();
+ });
+
+ it('returns empty if no description is present', () => {
+ const example = {};
+ const description = element._computeExampleDescription(example);
+ assert.equal(description, '');
+ });
+
+ it('returns description if present', () => {
+ const example = {
+ description: "example description",
+ };
+ const title = element._computeExampleDescription(example);
+ assert.equal(title, example.description);
+ });
+ });
+
describe('a11y', () => {
let element = /** @type ApiResourceExampleDocument */ (null);
let amf;
@@ -574,20 +641,6 @@ describe('ApiResourceExampleDocument', () => {
element.amf = amf;
});
- async function resolveWhenReady(elm, model, path, method) {
- return new Promise((resolve) => {
- const payloads = getPayload(elm, model, path, method);
- elm.examples = payloads;
- elm.addEventListener('has-examples-changed', function f(e) {
- if (!e.detail.value) {
- return;
- }
- elm.removeEventListener('has-examples-changed', f);
- setTimeout(() => resolve());
- });
- });
- }
-
it('passes accessibility test', async () => {
await resolveWhenReady(element, amf, '/IncludedInType', 'post');
await assert.isAccessible(element, {