Skip to content

Commit

Permalink
add unit tests for private and internal resources
Browse files Browse the repository at this point in the history
  • Loading branch information
aramovic79 committed Nov 8, 2024
1 parent c99a4b3 commit 4f4150c
Show file tree
Hide file tree
Showing 2 changed files with 246 additions and 17 deletions.
95 changes: 93 additions & 2 deletions __tests__/unittest/__snapshots__/templates.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,97 @@ exports[`templates createEventResourceTemplate should create event resource temp
]
`;

exports[`templates ordExtension should add apiResources with ord extensions correctly 1`] = `[]`;
exports[`templates ordExtension should add apiResources with ORD Extension "visibility=public" 1`] = `
[
{
"apiProtocol": "odata-v4",
"description": "Description for MyService",
"entityTypeMappings": [
{
"entityTypeTargets": "sap.odm:entityType:test:v1",
},
],
"entryPoints": [
"/odata/v4/my",
],
"extensible": {
"supported": "yes",
},
"lastUpdate": "2022-12-19T15:47:04+00:00",
"ordId": "customer.testNamespace:apiResource:MyService:v1",
"partOfGroups": [
"sap.cds:service:customer.testNamespace:MyService",
],
"partOfPackage": "sap.test.cdsrc.sample:package:test-other:v1",
"releaseStatus": "active",
"resourceDefinitions": [
{
"accessStrategies": [
{
"type": "open",
},
],
"mediaType": "application/json",
"type": "openapi-v3",
"url": "/.well-known/open-resource-discovery/v1/api-metadata/MyService.oas3.json",
},
{
"accessStrategies": [
{
"type": "open",
},
],
"mediaType": "application/xml",
"type": "edmx",
"url": "/.well-known/open-resource-discovery/v1/api-metadata/MyService.edmx",
},
],
"shortDescription": "short description for test MyService apiResource",
"title": "This is test MyService apiResource title",
"version": "2.0.0",
"visibility": "public",
},
]
`;

exports[`templates ordExtension should add events with ORD Extension "visibility=public" 1`] = `
[
{
"description": "CAP Event resource describing events / messages.",
"extensible": {
"supported": "yes",
},
"lastUpdate": "2022-12-19T15:47:04+00:00",
"ordId": "customer.testNamespace:eventResource:MyService:v1",
"partOfGroups": [
"sap.cds:service:customer.testNamespace:MyService",
],
"partOfPackage": "sap.test.cdsrc.sample:package:test-event:v1",
"releaseStatus": "active",
"resourceDefinitions": [
{
"accessStrategies": [
{
"type": "open",
},
],
"mediaType": "application/json",
"type": "asyncapi-v2",
"url": "/.well-known/open-resource-discovery/v1/api-metadata/MyService.asyncapi2.json",
},
],
"shortDescription": "short description for test MyService event",
"title": "This is test MyService event title",
"version": "2.0.0",
"visibility": "public",
},
]
`;

exports[`templates ordExtension should not add apiResources with ORD Extension "visibility=internal" 1`] = `[]`;

exports[`templates ordExtension should not add apiResources with ORD Extension "visibility=private" 1`] = `[]`;

exports[`templates ordExtension should not add events with ORD Extension "visibility=internal" 1`] = `[]`;

exports[`templates ordExtension should add events with ord extensions correctly 1`] = `[]`;
exports[`templates ordExtension should not add events with ORD Extension "visibility=private" 1`] = `[]`;
168 changes: 153 additions & 15 deletions __tests__/unittest/templates.test.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
const cds = require('@sap/cds');
const templates = require('../../lib/templates');
const {
createEntityTypeTemplate,
createGroupsTemplateForService,
createAPIResourceTemplate,
createEventResourceTemplate
} = require('../../lib/templates');

describe('templates', () => {
let linkedModel;

const appConfig = {
ordNamespace: 'customer.testNamespace',
appName: 'testAppName',
lastUpdate: '2022-12-19T15:47:04+00:00'
};

beforeEach(() => {
beforeAll(() => {
linkedModel = cds.linked(`
namespace customer.testNamespace123;
entity Books {
Expand All @@ -21,7 +27,7 @@ describe('templates', () => {

describe('createEntityTypeTemplate', () => {
it('should return default value', () => {
expect(templates.createEntityTypeTemplate(linkedModel)).toEqual({
expect(createEntityTypeTemplate(linkedModel)).toEqual({
ordId: 'sap.odm:entityType:undefined:v1'
});
});
Expand All @@ -35,7 +41,7 @@ describe('templates', () => {
groupTypeId: 'sap.cds:service',
title: 'test Service'
};
expect(templates.createGroupsTemplateForService(testServiceName, linkedModel, appConfig)).toEqual(testResult);
expect(createGroupsTemplateForService(testServiceName, linkedModel, appConfig)).toEqual(testResult);
});
});

Expand All @@ -44,7 +50,7 @@ describe('templates', () => {
const serviceName = 'MyService';
const srvDefinition = linkedModel
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
expect(templates.createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
expect(createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
});
});

Expand All @@ -53,19 +59,19 @@ describe('templates', () => {
const serviceName = 'MyService';
const srvDefinition = linkedModel
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
expect(templates.createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
expect(createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
});

it('should create event resource template correctly with packageIds including namespace', () => {
const serviceName = 'MyService';
const srvDefinition = linkedModel
const packageIds = ['customer.testNamespace:package:test:v1'];
expect(templates.createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
expect(createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
});
});

describe('ordExtension', () => {
it('should add events with ord extensions correctly', () => {
it('should add apiResources with ORD Extension "visibility=public"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
Expand All @@ -74,22 +80,67 @@ describe('templates', () => {
title: String;
}
}
@ODM.entityName: 'testOdmEntity'
entity Books {
key ID: UUID;
title: String;
}
annotate MyService with @ORD.Extensions : {
title : 'This is test MyService event title',
shortDescription: 'short description for test MyService event',
visibility : 'private',
title : 'This is test MyService apiResource title',
shortDescription: 'short description for test MyService apiResource',
visibility : 'public',
version : '2.0.0',
partOfPackage : 'sap.test.cdsrc.sample:package:test-other:v1',
extensible : {
supported : 'yes'
}
};
`);
const srvDefinition = linkedModel.definitions[serviceName];
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
expect(templates.createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
appConfig['odmEntity'] = 'sap.odm:entityType:test:v1'
const packageIds = ['customer.testNamespace:package:test:v1'];
const apiResourceTemplate = createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(apiResourceTemplate).toBeInstanceOf(Array);
expect(apiResourceTemplate).toMatchSnapshot();
});

it('should add apiResources with ord extensions correctly', () => {
it('should not add apiResources with ORD Extension "visibility=internal"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
entity Books {
key ID: UUID;
title: String;
}
}
@ODM.entityName: 'testOdmEntity'
entity Books {
key ID: UUID;
title: String;
}
annotate MyService with @ORD.Extensions : {
title : 'This is test MyService apiResource title',
shortDescription: 'short description for test MyService apiResource',
visibility : 'internal',
version : '2.0.0',
partOfPackage : 'sap.test.cdsrc.sample:package:test-other:v1',
extensible : {
supported : 'yes'
}
};
`);
const srvDefinition = linkedModel.definitions[serviceName];
appConfig['odmEntity'] = 'sap.odm:entityType:test:v1'
const packageIds = ['customer.testNamespace:package:test:v1'];
const apiResourceTemplate = createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(apiResourceTemplate).toBeInstanceOf(Array);
expect(apiResourceTemplate).toMatchSnapshot();
expect(apiResourceTemplate).toEqual([]);
});

it('should not add apiResources with ORD Extension "visibility=private"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
Expand Down Expand Up @@ -117,7 +168,94 @@ describe('templates', () => {
const srvDefinition = linkedModel.definitions[serviceName];
appConfig['odmEntity'] = 'sap.odm:entityType:test:v1'
const packageIds = ['customer.testNamespace:package:test:v1'];
expect(templates.createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds)).toMatchSnapshot();
const apiResourceTemplate = createAPIResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(apiResourceTemplate).toBeInstanceOf(Array);
expect(apiResourceTemplate).toMatchSnapshot();
expect(apiResourceTemplate).toEqual([]);
});

it('should add events with ORD Extension "visibility=public"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
entity Books {
key ID: UUID;
title: String;
}
}
annotate MyService with @ORD.Extensions : {
title : 'This is test MyService event title',
shortDescription: 'short description for test MyService event',
visibility : 'public',
version : '2.0.0',
extensible : {
supported : 'yes'
}
};
`);
const srvDefinition = linkedModel.definitions[serviceName];
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
const eventResourceTemplate = createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(eventResourceTemplate).toBeInstanceOf(Array);
expect(eventResourceTemplate).toMatchSnapshot();
});

it('should not add events with ORD Extension "visibility=internal"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
entity Books {
key ID: UUID;
title: String;
}
}
annotate MyService with @ORD.Extensions : {
title : 'This is test MyService event title',
shortDescription: 'short description for test MyService event',
visibility : 'internal',
version : '2.0.0',
extensible : {
supported : 'yes'
}
};
`);
const srvDefinition = linkedModel.definitions[serviceName];
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
const eventResourceTemplate = createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(eventResourceTemplate).toBeInstanceOf(Array);
expect(eventResourceTemplate).toMatchSnapshot();
expect(eventResourceTemplate).toEqual([]);
});

it('should not add events with ORD Extension "visibility=private"', () => {
const serviceName = 'MyService';
linkedModel = cds.linked(`
service MyService {
entity Books {
key ID: UUID;
title: String;
}
}
annotate MyService with @ORD.Extensions : {
title : 'This is test MyService event title',
shortDescription: 'short description for test MyService event',
visibility : 'private',
version : '2.0.0',
extensible : {
supported : 'yes'
}
};
`);
const srvDefinition = linkedModel.definitions[serviceName];
const packageIds = ['sap.test.cdsrc.sample:package:test-event:v1', 'sap.test.cdsrc.sample:package:test-api:v1'];
const eventResourceTemplate = createEventResourceTemplate(serviceName, srvDefinition, appConfig, packageIds);

expect(eventResourceTemplate).toBeInstanceOf(Array);
expect(eventResourceTemplate).toMatchSnapshot();
expect(eventResourceTemplate).toEqual([]);
});
});
});

0 comments on commit 4f4150c

Please sign in to comment.