diff --git a/compute/disks/createComputeHyperdisk.js b/compute/disks/createComputeHyperdisk.js index 76b231eded..e46c04c030 100644 --- a/compute/disks/createComputeHyperdisk.js +++ b/compute/disks/createComputeHyperdisk.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(diskName) { // [START compute_hyperdisk_create] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -28,14 +28,14 @@ async function main() { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // Project ID or project number of the Google Cloud project you want to use. const projectId = await disksClient.getProjectId(); // The zone where your VM and new disk are located. const zone = 'europe-central2-b'; // The name of the new disk - const diskName = 'disk-name'; + // diskName = 'disk-name'; // The type of disk. This value uses the following format: // "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)". // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced" @@ -78,22 +78,14 @@ async function main() { }); } - const hyperdisk = ( - await disksClient.get({ - project: projectId, - zone, - disk: diskName, - }) - )[0]; - - console.log(JSON.stringify(hyperdisk)); + console.log(`Disk: ${diskName} created.`); } await callCreateComputeHyperdisk(); // [END compute_hyperdisk_create] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/disks/createComputeHyperdiskFromPool.js b/compute/disks/createComputeHyperdiskFromPool.js index 3a2c34d09d..01b8aa87aa 100644 --- a/compute/disks/createComputeHyperdiskFromPool.js +++ b/compute/disks/createComputeHyperdiskFromPool.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(diskName, storagePoolName) { // [START compute_hyperdisk_create_from_pool] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -28,16 +28,16 @@ async function main() { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // Project ID or project number of the Google Cloud project you want to use. const projectId = await disksClient.getProjectId(); // The zone where your VM and new disk are located. const zone = 'us-central1-a'; // The name of the new disk - const diskName = 'disk-from-pool-name'; + // diskName = 'disk-from-pool-name'; // The name of the storage pool - const storagePoolName = 'storage-pool-name'; + // storagePoolName = 'storage-pool-name'; // Link to the storagePool you want to use. Use format: // https://www.googleapis.com/compute/v1/projects/{projectId}/zones/{zone}/storagePools/{storagePoolName} const storagePool = `https://www.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/storagePools/${storagePoolName}`; @@ -84,22 +84,14 @@ async function main() { }); } - const hyperdisk = ( - await disksClient.get({ - project: projectId, - zone, - disk: diskName, - }) - )[0]; - - console.log(JSON.stringify(hyperdisk)); + console.log(`Disk: ${diskName} created.`); } await callCreateComputeHyperdiskFromPool(); // [END compute_hyperdisk_create_from_pool] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/disks/createComputeHyperdiskPool.js b/compute/disks/createComputeHyperdiskPool.js index d8ae457e6b..faa2e4b0db 100644 --- a/compute/disks/createComputeHyperdiskPool.js +++ b/compute/disks/createComputeHyperdiskPool.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(storagePoolName) { // [START compute_hyperdisk_pool_create] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -28,14 +28,14 @@ async function main() { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // Project ID or project number of the Google Cloud project you want to use. const projectId = await storagePoolClient.getProjectId(); // Name of the zone in which you want to create the storagePool. const zone = 'us-central1-a'; // Name of the storagePool you want to create. - const storagePoolName = 'storage-pool-name'; + // storagePoolName = 'storage-pool-name'; // The type of disk you want to create. This value uses the following format: // "projects/{projectId}/zones/{zone}/storagePoolTypes/(hyperdisk-throughput|hyperdisk-balanced)" const storagePoolType = `projects/${projectId}/zones/${zone}/storagePoolTypes/hyperdisk-balanced`; @@ -79,22 +79,14 @@ async function main() { }); } - const createdStoragePool = ( - await storagePoolClient.get({ - project: projectId, - zone, - storagePool: storagePoolName, - }) - )[0]; - - console.log(JSON.stringify(createdStoragePool)); + console.log(`Storage pool: ${storagePoolName} created.`); } await callCreateComputeHyperdiskPool(); // [END compute_hyperdisk_pool_create] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/package.json b/compute/package.json index 374d13e292..541353f6cb 100644 --- a/compute/package.json +++ b/compute/package.json @@ -25,6 +25,7 @@ "chai": "^4.5.0", "mocha": "^10.0.0", "proxyquire": "^2.0.1", + "sinon": "^18.0.0", "uuid": "^10.0.0" } } diff --git a/compute/reservations/createReservationFromProperties.js b/compute/reservations/createReservationFromProperties.js index 42e23755e8..e4f00a1e59 100644 --- a/compute/reservations/createReservationFromProperties.js +++ b/compute/reservations/createReservationFromProperties.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(reservationName) { // [START compute_reservation_create] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -28,14 +28,14 @@ async function main() { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // The ID of the project where you want to reserve resources. const projectId = await reservationsClient.getProjectId(); // The zone in which to reserve resources. const zone = 'us-central1-a'; // The name of the reservation to create. - const reservationName = 'reservation-01'; + // reservationName = 'reservation-01'; // The number of VMs to reserve. const vmsNumber = 3; // Machine type to use for each VM. @@ -96,22 +96,14 @@ async function main() { }); } - const createdReservation = ( - await reservationsClient.get({ - project: projectId, - zone, - reservation: reservationName, - }) - )[0]; - - console.log(JSON.stringify(createdReservation)); + console.log(`Reservation: ${reservationName} created.`); } await callCreateComputeReservationFromProperties(); // [END compute_reservation_create] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/reservations/createReservationInstanceTemplate.js b/compute/reservations/createReservationInstanceTemplate.js index 796bbc6064..ad9236e7f7 100644 --- a/compute/reservations/createReservationInstanceTemplate.js +++ b/compute/reservations/createReservationInstanceTemplate.js @@ -16,7 +16,7 @@ 'use strict'; -async function main(location, instanceTemplateName) { +async function main(reservationName, location, instanceTemplateName) { // [START compute_reservation_create_template] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -28,14 +28,14 @@ async function main(location, instanceTemplateName) { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // The ID of the project where you want to reserve resources and where the instance template exists. const projectId = await reservationsClient.getProjectId(); // The zone in which to reserve resources. const zone = 'us-central1-a'; // The name of the reservation to create. - const reservationName = 'reservation-01'; + // reservationName = 'reservation-01'; // The number of VMs to reserve. const vmsNumber = 3; @@ -87,15 +87,7 @@ async function main(location, instanceTemplateName) { }); } - const createdReservation = ( - await reservationsClient.get({ - project: projectId, - zone, - reservation: reservationName, - }) - )[0]; - - console.log(JSON.stringify(createdReservation)); + console.log(`Reservation: ${reservationName} created.`); } await callCreateComputeReservationInstanceTemplate(); diff --git a/compute/reservations/createSharedReservation.js b/compute/reservations/createSharedReservation.js new file mode 100644 index 0000000000..84cce08ffa --- /dev/null +++ b/compute/reservations/createSharedReservation.js @@ -0,0 +1,107 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(reservationsClient, zoneOperationsClient) { + // [START compute_reservation_create_shared] + // Import the Compute library + const computeLib = require('@google-cloud/compute'); + const compute = computeLib.protos.google.cloud.compute.v1; + + /** + * TODO(developer): Uncomment reservationsClient and zoneOperationsClient before running the sample. + */ + // Instantiate a reservationsClient + // reservationsClient = new computeLib.ReservationsClient(); + // Instantiate a zoneOperationsClient + // zoneOperationsClient = new computeLib.ZoneOperationsClient(); + + /** + * TODO(developer): Update these variables before running the sample. + */ + // The ID of the project where you want to reserve resources and where the instance template exists. + const projectId = await reservationsClient.getProjectId(); + // The zone in which to reserve resources. + const zone = 'us-central1-a'; + // The name of the reservation to create. + const reservationName = 'reservation-01'; + // The number of VMs to reserve. + const vmsNumber = 3; + // The name of an existing instance template. + const instanceTemplateName = 'global-instance-template-name'; + // The location of the instance template. + const location = 'global'; + + async function callCreateComputeSharedReservation() { + // Create reservation for 3 VMs in zone us-central1-a by specifying a instance template. + const specificReservation = new compute.AllocationSpecificSKUReservation({ + count: vmsNumber, + sourceInstanceTemplate: `projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}`, + }); + + // Create share settings. Share reservation with one customer project. + const shareSettings = new compute.ShareSettings({ + shareType: 'SPECIFIC_PROJECTS', + projectMap: { + // The IDs of projects that can consume this reservation. You can include up to 100 consumer projects. + // These projects must be in the same organization as the owner project. + // Don't include the owner project. By default, it is already allowed to consume the reservation. + consumer_project_id: { + projectId: 'consumer_project_id', + }, + }, + }); + + // Create a reservation. + const reservation = new compute.Reservation({ + name: reservationName, + specificReservation, + specificReservationRequired: true, + shareSettings, + }); + + const [response] = await reservationsClient.insert({ + project: projectId, + reservationResource: reservation, + zone, + }); + + let operation = response.latestResponse; + + // Wait for the create reservation operation to complete. + while (operation.status !== 'DONE') { + [operation] = await zoneOperationsClient.wait({ + operation: operation.name, + project: projectId, + zone: operation.zone.split('/').pop(), + }); + } + + console.log(`Reservation: ${reservationName} created.`); + } + + await callCreateComputeSharedReservation(); + // [END compute_reservation_create_shared] +} + +module.exports = main; + +// TODO(developer): Uncomment below lines before running the sample. +// main(...process.argv.slice(2)).catch(err => { +// console.error(err); +// process.exitCode = 1; +// }); diff --git a/compute/reservations/getReservation.js b/compute/reservations/getReservation.js index 733090ae6d..a57836083e 100644 --- a/compute/reservations/getReservation.js +++ b/compute/reservations/getReservation.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(reservationName) { // [START compute_reservation_get] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -25,14 +25,14 @@ async function main() { const reservationsClient = new computeLib.ReservationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // The ID of the project where your reservation is located. const projectId = await reservationsClient.getProjectId(); // The zone where your reservation is located. const zone = 'us-central1-a'; // The name of the reservation to return. - const reservationName = 'reservation-01'; + // reservationName = 'reservation-01'; async function callGetReservation() { const requestedReservation = ( @@ -50,7 +50,7 @@ async function main() { // [END compute_reservation_get] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/reservations/reservationVmsUpdate.js b/compute/reservations/reservationVmsUpdate.js index 24305367f7..629075f365 100644 --- a/compute/reservations/reservationVmsUpdate.js +++ b/compute/reservations/reservationVmsUpdate.js @@ -16,7 +16,7 @@ 'use strict'; -async function main() { +async function main(reservationName) { // [START compute_reservation_vms_update] // Import the Compute library const computeLib = require('@google-cloud/compute'); @@ -27,14 +27,14 @@ async function main() { const zoneOperationsClient = new computeLib.ZoneOperationsClient(); /** - * TODO(developer): Update these variables before running the sample. + * TODO(developer): Update/uncomment these variables before running the sample. */ // The ID of the project where the reservation is located. const projectId = await reservationsClient.getProjectId(); // The zone where the reservation is located. const zone = 'us-central1-a'; // The name of an existing reservation. - const reservationName = 'reservation-01'; + // reservationName = 'reservation-01'; // The new number of VMs to reserve(increase or decrease the number). Before modifying the number of VMs, // ensure that all required conditions are met. See: https://cloud.google.com/compute/docs/instances/reservations-modify#resizing_a_reservation. const vmsNumber = 1; @@ -61,22 +61,14 @@ async function main() { }); } - const updatedReservation = ( - await reservationsClient.get({ - project: projectId, - zone, - reservation: reservationName, - }) - )[0]; - - console.log(JSON.stringify(updatedReservation)); + console.log(`Reservation: ${reservationName} updated.`); } await callComputeReservationVmsUpdate(); // [END compute_reservation_vms_update] } -main().catch(err => { +main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; }); diff --git a/compute/test/createComputeHyperdisk.test.js b/compute/test/createComputeHyperdisk.test.js index ac4721f764..dfcaa43e07 100644 --- a/compute/test/createComputeHyperdisk.test.js +++ b/compute/test/createComputeHyperdisk.test.js @@ -26,23 +26,13 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); describe('Create compute hyperdisk', async () => { - const diskName = 'disk-name'; + const diskName = `hyperdisk-name-941ad2d${Math.floor(Math.random() * 1000 + 1)}`; const zone = 'europe-central2-b'; const disksClient = new DisksClient(); let projectId; before(async () => { projectId = await disksClient.getProjectId(); - try { - // Ensure resource is deleted attempting to recreate it - await disksClient.delete({ - project: projectId, - disk: diskName, - zone, - }); - } catch { - // ok to ignore (resource doesn't exist) - } }); after(async () => { @@ -54,12 +44,13 @@ describe('Create compute hyperdisk', async () => { }); it('should create a new hyperdisk', () => { - const response = JSON.parse( - execSync('node ./disks/createComputeHyperdisk.js', { + const response = execSync( + `node ./disks/createComputeHyperdisk.js ${diskName}`, + { cwd, - }) + } ); - assert.equal(response.name, diskName); + assert.include(response, `Disk: ${diskName} created.`); }); }); diff --git a/compute/test/createComputeHyperdiskFromPool.test.js b/compute/test/createComputeHyperdiskFromPool.test.js index 5813a2158c..35dabcec43 100644 --- a/compute/test/createComputeHyperdiskFromPool.test.js +++ b/compute/test/createComputeHyperdiskFromPool.test.js @@ -66,22 +66,14 @@ async function cleanupResources(projectId, zone, diskName, storagePoolName) { } describe('Create compute hyperdisk from pool', async () => { - const diskName = 'disk-from-pool-name'; + const diskName = `disk-from-pool-name-745d98${Math.floor(Math.random() * 1000 + 1)}f`; const zone = 'us-central1-a'; - const storagePoolName = 'storage-pool-name'; + const storagePoolName = `storage-pool-name-745d9${Math.floor(Math.random() * 1000 + 1)}5f`; const disksClient = new DisksClient(); let projectId; before(async () => { projectId = await disksClient.getProjectId(); - - // Ensure resources are deleted before attempting to recreate them - try { - await cleanupResources(projectId, zone, diskName, storagePoolName); - } catch (err) { - // Should be ok to ignore (resources do not exist) - console.error(err); - } }); after(async () => { @@ -89,26 +81,24 @@ describe('Create compute hyperdisk from pool', async () => { }); it('should create a new storage pool', () => { - const response = JSON.parse( - execSync('node ./disks/createComputeHyperdiskPool.js', { + const response = execSync( + `node ./disks/createComputeHyperdiskPool.js ${storagePoolName}`, + { cwd, - }) + } ); - assert.equal(response.name, storagePoolName); + assert.include(response, `Storage pool: ${storagePoolName} created.`); }); it('should create a new hyperdisk from pool', () => { - const response = JSON.parse( - execSync('node ./disks/createComputeHyperdiskFromPool.js', { + const response = execSync( + `node ./disks/createComputeHyperdiskFromPool.js ${diskName} ${storagePoolName}`, + { cwd, - }) + } ); - assert.equal(response.name, diskName); - assert.equal( - response.storagePool, - `https://www.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/storagePools/${storagePoolName}` - ); + assert.include(response, `Disk: ${diskName} created.`); }); }); diff --git a/compute/test/createReservationGlobalInstanceTemplate.test.js b/compute/test/createReservationGlobalInstanceTemplate.test.js index df34b1ad56..1f962ecfe4 100644 --- a/compute/test/createReservationGlobalInstanceTemplate.test.js +++ b/compute/test/createReservationGlobalInstanceTemplate.test.js @@ -17,7 +17,7 @@ 'use strict'; const path = require('path'); -const assert = require('node:assert/strict'); +const {assert} = require('chai'); const {after, before, describe, it} = require('mocha'); const cp = require('child_process'); const {ReservationsClient} = require('@google-cloud/compute').v1; @@ -26,8 +26,8 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); describe('Create compute reservation using global instance template', async () => { - const reservationName = 'reservation-01'; - const instanceTemplateName = 'pernament-global-template-name'; + const reservationName = `global-reservation-68ef06a${Math.floor(Math.random() * 1000 + 1)}`; + const instanceTemplateName = `pernament-global-template-68ef06a${Math.floor(Math.random() * 1000 + 1)}`; const location = 'global'; const reservationsClient = new ReservationsClient(); let projectId; @@ -45,7 +45,7 @@ describe('Create compute reservation using global instance template', async () = after(() => { // Delete reservation - execSync('node ./reservations/deleteReservation.js', { + execSync(`node ./reservations/deleteReservation.js ${reservationName}`, { cwd, }); // Delete template @@ -58,20 +58,13 @@ describe('Create compute reservation using global instance template', async () = }); it('should create a new reservation', () => { - const response = JSON.parse( - execSync( - `node ./reservations/createReservationInstanceTemplate.js ${location} ${instanceTemplateName}`, - { - cwd, - } - ) + const response = execSync( + `node ./reservations/createReservationInstanceTemplate.js ${reservationName} ${location} ${instanceTemplateName}`, + { + cwd, + } ); - assert.equal(response.name, reservationName); - assert.equal(response.specificReservation.count, '3'); - assert.equal( - response.specificReservation.sourceInstanceTemplate, - `https://www.googleapis.com/compute/v1/projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}` - ); + assert.include(response, `Reservation: ${reservationName} created.`); }); }); diff --git a/compute/test/createReservationRegionalInstanceTemplate.test.js b/compute/test/createReservationRegionalInstanceTemplate.test.js index 76522e3e2b..b909e0fd7e 100644 --- a/compute/test/createReservationRegionalInstanceTemplate.test.js +++ b/compute/test/createReservationRegionalInstanceTemplate.test.js @@ -17,47 +17,33 @@ 'use strict'; const path = require('path'); -const assert = require('node:assert/strict'); -const {after, before, describe, it} = require('mocha'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); const cp = require('child_process'); -const {ReservationsClient} = require('@google-cloud/compute').v1; const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); describe('Create compute reservation using regional instance template', async () => { - const reservationName = 'reservation-01'; + const reservationName = `regional-reservation-04bf4ed${Math.floor(Math.random() * 1000 + 1)}`; const instanceTemplateName = 'pernament-region-template-name'; const location = 'regions/us-central1'; - const reservationsClient = new ReservationsClient(); - let projectId; - - before(async () => { - projectId = await reservationsClient.getProjectId(); - }); after(() => { // Delete reservation - execSync('node ./reservations/deleteReservation.js', { + execSync(`node ./reservations/deleteReservation.js ${reservationName}`, { cwd, }); }); it('should create a new reservation', () => { - const response = JSON.parse( - execSync( - `node ./reservations/createReservationInstanceTemplate.js ${location} ${instanceTemplateName}`, - { - cwd, - } - ) + const response = execSync( + `node ./reservations/createReservationInstanceTemplate.js ${reservationName} ${location} ${instanceTemplateName}`, + { + cwd, + } ); - assert.equal(response.name, reservationName); - assert.equal(response.specificReservation.count, '3'); - assert.equal( - response.specificReservation.sourceInstanceTemplate, - `https://www.googleapis.com/compute/v1/projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}` - ); + assert.include(response, `Reservation: ${reservationName} created.`); }); }); diff --git a/compute/test/sharedReservation.test.js b/compute/test/sharedReservation.test.js new file mode 100644 index 0000000000..ce7cfca3a8 --- /dev/null +++ b/compute/test/sharedReservation.test.js @@ -0,0 +1,70 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const {beforeEach, afterEach, describe, it} = require('mocha'); +const {expect} = require('chai'); +const sinon = require('sinon'); +const createSharedReservation = require('../reservations/createSharedReservation.js'); + +describe('Create compute shared reservation using global instance template', async () => { + const reservationName = 'reservation-01'; + let reservationsClientMock; + let zoneOperationsClientMock; + + beforeEach(() => { + sinon.stub(console, 'log'); + reservationsClientMock = { + getProjectId: sinon.stub().resolves('project_id'), + insert: sinon.stub().resolves([ + { + latestResponse: { + status: 'DONE', + name: 'operation-1234567890', + zone: { + value: 'us-central1-a', + }, + }, + }, + ]), + }; + zoneOperationsClientMock = { + wait: sinon.stub().resolves([ + { + latestResponse: { + status: 'DONE', + }, + }, + ]), + }; + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should create shared reservation', async () => { + await createSharedReservation( + reservationsClientMock, + zoneOperationsClientMock + ); + + expect(console.log.calledOnce).to.be.true; + expect(console.log.calledWith(`Reservation: ${reservationName} created.`)) + .to.be.true; + }); +});