diff --git a/src/api/services/v3/cmp/ResourceStructuredParameterValueService.js b/src/api/services/v3/cmp/ResourceStructuredParameterValueService.js new file mode 100644 index 0000000..1e61983 --- /dev/null +++ b/src/api/services/v3/cmp/ResourceStructuredParameterValueService.js @@ -0,0 +1,64 @@ +import crud from '../../../crudOperations' + +const buildUrl = (resourceStructuredId) => + `v3/cmp/resourcesStructured/${resourceStructuredId}/parameterValues` + +/** + * @typedef {object} ResourceStructuredParameterValue + * @property {string} fieldId An id of a Parameter + * @property {string} value The value for the parameter on this ResourceStructured + */ + +export default { + /** + * Retrieve a list of existing Parameter Values on the given Resource Structured + * @param {string} resourceStructuredId id or global_id of the Resource Structured + * @param {object} options anything parsable by URLSearchParams. See useful options here https://docs.cloudbolt.io/articles/#!cloudbolt-latest-docs/api-conventions/a/h2__904191799 + * @returns {Promise} resolves with a list of Parameter Values + */ + list: (resourceStructuredId, options) => + crud.getItems(buildUrl(resourceStructuredId), options), + + /** + * Retrieve an existing Parameter Value by id on the given Resource Structured + * @param {string} resourceStructuredId id or global_id of the Resource Structured + * @param {string} id global_id of the Parameter + * @param {object} options anything parsable by URLSearchParams. See useful options here https://docs.cloudbolt.io/articles/#!cloudbolt-latest-docs/api-conventions/a/h2__904191799 + * @returns {Promise} resolves with a cloudbolt API Response object of the Parameter Value object + */ + get: (resourceStructuredId, id, options) => + crud.getItemById(buildUrl(resourceStructuredId), id, options), + + /** + * Create a new Parameter Value on the given Resource Structured + * @param {string} resourceStructuredId id or global_id of the Resource Structured + * @param {ResourceStructuredParameterValue} newParameterValue new Parameter Value object definition + * @returns {Promise} resolves with a new Parameter Value object with all server-filled fields + */ + create: (resourceStructuredId, newParameterValue) => + crud.createNewItem(buildUrl(resourceStructuredId), newParameterValue), + + /** + * Update an existing Parameter Value on the given Resource Structured + * @param {string} resourceStructuredId id or global_id of the Resource Structured + * @param {string} id global_id of the Parameter + * @param {ResourceStructuredParameterValue} updatedParameterValue new Parameter Value object definition + * @returns {Promise} resolves with a new Parameter Value object with all server-filled fields + * @returns {Promise} resolves with a cloudbolt API Response of the updated Parameter Value object + */ + update: (resourceStructuredId, id, updatedParameterValue) => + crud.patchItemById( + buildUrl(resourceStructuredId), + id, + updatedParameterValue + ), + + /** + * Delete an existing Parameter Value + * @param {string} resourceStructuredId id or global_id of the Resource Structured + * @param {string} id global_id of the Parameter + * @returns {Promise} resolves with a cloudbolt API Success Response + */ + delete: (resourceStructuredId, id) => + crud.deleteItemById(buildUrl(resourceStructuredId), id) +} diff --git a/src/api/services/v3/cmp/ResourceStructuredParameterValueService.test.js b/src/api/services/v3/cmp/ResourceStructuredParameterValueService.test.js new file mode 100644 index 0000000..7bed583 --- /dev/null +++ b/src/api/services/v3/cmp/ResourceStructuredParameterValueService.test.js @@ -0,0 +1,46 @@ +import { baseApi } from '../../../baseApi' +import ResourceStructuredParameterValueService from './ResourceStructuredParameterValueService' + +const RS_ID = 'RSC-123' +const BASE_URL = `/v3/cmp/resourcesStructured/${RS_ID}/parameterValues/` +const VAL_ID = 'VAL-123' +const VAL_URL = `${BASE_URL}${VAL_ID}/` +const goodPayload = { + fieldId: VAL_ID, + value: 'test value' +} +const mockResponse = { data: { hello: 'world' } } + +test('list calls the correct endpoint', async () => { + const mockFn = jest.spyOn(baseApi, 'get').mockResolvedValue(mockResponse) + await ResourceStructuredParameterValueService.list(RS_ID) + expect(mockFn).toHaveBeenCalledWith(BASE_URL) +}) + +test('get calls the correct endpoint', async () => { + const mockFn = jest.spyOn(baseApi, 'get').mockResolvedValue(mockResponse) + await ResourceStructuredParameterValueService.get(RS_ID, VAL_ID) + expect(mockFn).toHaveBeenCalledWith(VAL_URL) +}) + +test('create calls the correct endpoint', async () => { + const mockFn = jest.spyOn(baseApi, 'post').mockResolvedValue(mockResponse) + await ResourceStructuredParameterValueService.create(RS_ID, goodPayload) + expect(mockFn).toHaveBeenCalledWith(BASE_URL, goodPayload) +}) + +test('update calls the correct endpoint', async () => { + const mockFn = jest.spyOn(baseApi, 'patch').mockResolvedValue(mockResponse) + await ResourceStructuredParameterValueService.update( + RS_ID, + VAL_ID, + goodPayload + ) + expect(mockFn).toHaveBeenCalledWith(VAL_URL, goodPayload) +}) + +test('delete calls the correct endpoint', async () => { + const mockFn = jest.spyOn(baseApi, 'delete').mockResolvedValue({}) + await ResourceStructuredParameterValueService.delete(RS_ID, VAL_ID) + expect(mockFn).toHaveBeenCalledWith(VAL_URL) +}) diff --git a/src/api/services/v3/cmp/ResourcesStructuredService.js b/src/api/services/v3/cmp/ResourcesStructuredService.js index 5f3e3cb..74780b4 100644 --- a/src/api/services/v3/cmp/ResourcesStructuredService.js +++ b/src/api/services/v3/cmp/ResourcesStructuredService.js @@ -1,4 +1,5 @@ import crud from '../../../crudOperations' +import parameterValues from './ResourceStructuredParameterValueService' const URL = 'v3/cmp/resourcesStructured' @@ -16,5 +17,7 @@ export default { * @param {Object} options anything parsable by URLSearchParams. See useful options here https://docs.cloudbolt.io/articles/#!cloudbolt-latest-docs/api-conventions/a/h2__904191799 * @returns {Promise} resolves with a cloudbolt API Response object of the Structured Resource object */ - get: (id, options) => crud.getItemById(URL, id, options) + get: (id, options) => crud.getItemById(URL, id, options), + + parameterValues } diff --git a/src/api/services/v3/cmp/ResourcesStructuredService.test.js b/src/api/services/v3/cmp/ResourcesStructuredService.test.js index 3e4b503..18f2685 100644 --- a/src/api/services/v3/cmp/ResourcesStructuredService.test.js +++ b/src/api/services/v3/cmp/ResourcesStructuredService.test.js @@ -20,3 +20,7 @@ test('get calls the correct endpoint', async () => { `${RESOURCES_STRUCTURED_ENDPOINT}resource-id/` ) }) + +test('has a parameterValues service', () => { + expect(ResourcesStructuredService.parameterValues).toBeDefined() +})