This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 52244a9f9fab9541bdb6ca90a0b253652983a2d8 Author: Marcus Christie <[email protected]> AuthorDate: Fri Jul 30 14:30:25 2021 -0400 AIRAVATA-3491 Add applicationInterfaceId option to createExperiment --- .../js/utils/ExperimentUtils.js | 15 ++++++++-- .../tests/utils/ExperimentUtils.test.js | 32 +++++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/django_airavata/apps/api/static/django_airavata_api/js/utils/ExperimentUtils.js b/django_airavata/apps/api/static/django_airavata_api/js/utils/ExperimentUtils.js index 0088e27..be91f0a 100644 --- a/django_airavata/apps/api/static/django_airavata_api/js/utils/ExperimentUtils.js +++ b/django_airavata/apps/api/static/django_airavata_api/js/utils/ExperimentUtils.js @@ -3,12 +3,17 @@ import { services } from "../index"; const createExperiment = async function ({ applicationName, // name of the application interface (usually the same as the application module) applicationId, // the id of the application module + applicationInterfaceId, // the id of the application interface computeResourceName, experimentName, experimentInputs, } = {}) { let applicationInterface = null; - if (applicationId) { + if (applicationInterfaceId) { + applicationInterface = await loadApplicationInterfaceById( + applicationInterfaceId + ); + } else if (applicationId) { applicationInterface = await loadApplicationInterfaceByApplicationModuleId( applicationId ); @@ -17,7 +22,7 @@ const createExperiment = async function ({ applicationName ); } else { - throw new Error("Either applicationName or applicationId is required"); + throw new Error("Either applicationInterfaceId or applicationId or applicationName is required"); } const applicationModuleId = applicationInterface.applicationModuleId; let computeResourceId = null; @@ -90,6 +95,12 @@ const loadApplicationInterfaceByName = async function (applicationName) { return applicationInterface; }; +const loadApplicationInterfaceById = async function (applicationInterfaceId) { + return await services.ApplicationInterfaceService.retrieve({ + lookup: applicationInterfaceId, + }); +}; + const loadApplicationInterfaceByApplicationModuleId = async function ( applicationId ) { diff --git a/django_airavata/apps/api/static/django_airavata_api/tests/utils/ExperimentUtils.test.js b/django_airavata/apps/api/static/django_airavata_api/tests/utils/ExperimentUtils.test.js index 8e64229..f57e4af 100644 --- a/django_airavata/apps/api/static/django_airavata_api/tests/utils/ExperimentUtils.test.js +++ b/django_airavata/apps/api/static/django_airavata_api/tests/utils/ExperimentUtils.test.js @@ -8,6 +8,10 @@ import { createExperiment } from "../../js/utils/ExperimentUtils"; // Mock out 'index' so that RESTful service calls can be mocked jest.mock("../../js/index"); +beforeEach(() => { + jest.resetAllMocks(); +}); + test("error thrown when no applicationName given", async () => { try { expect.assertions(2); @@ -15,7 +19,7 @@ test("error thrown when no applicationName given", async () => { } catch (e) { expect(e).toBeInstanceOf(Error); expect(e.message).toEqual( - "Either applicationName or applicationId is required" + "Either applicationInterfaceId or applicationId or applicationName is required" ); } }); @@ -65,6 +69,32 @@ test("verify if applicationId and applicationName are given, applicationInterfac } }); +test("verify if applicationInterfaceId and applicationId and applicationName are given, applicationInterface is loaded with applicationId", async () => { + services.ApplicationInterfaceService.retrieve.mockResolvedValue( + new ApplicationInterfaceDefinition({ + applicationInterfaceId: "Foo_interface1", + applicationName: "Foo", + applicationModules: ["Foo_module1"], + }) + ); + try { + expect.assertions(3); + await createExperiment({ + applicationInterfaceId: "Foo_interface1", + applicationId: "Foo_module1", + applicationName: "Foo", + }); + } catch (e) { + expect(services.ApplicationModuleService.getApplicationInterface).not.toHaveBeenCalled(); + expect(services.ApplicationInterfaceService.list).not.toHaveBeenCalled(); + expect( + services.ApplicationInterfaceService.retrieve + ).toHaveBeenCalledWith({ + lookup: "Foo_interface1", + }); + } +}); + test("error thrown when no computeResourceName given", async () => { services.ApplicationInterfaceService.list.mockResolvedValue([ new ApplicationInterfaceDefinition({
