зеркало из
1
0
Форкнуть 0
template-building-blocks/test/resourcesSpec.js

339 строки
16 KiB
JavaScript

let resources = require('../src/core/resources.js');
let validationMessages = require('../src/core/validationMessages.js');
describe('resources', () => {
describe('resourceId function', () => {
let subscriptionId = '00000000-0000-1000-8000-000000000000';
let resourceGroupName = 'test-rg';
let virtualNetworksResourceType = 'Microsoft.Network/virtualNetworks';
let subnetsResourceType = `${virtualNetworksResourceType}/subnets`;
let resourceName = 'my-virtual-network';
let subresourceName = 'my-subnet';
describe('subscriptionId validations', () => {
it('null subscriptionId', () => {
expect(() => {
resources.resourceId(null, null, null, null, null);
}).toThrow(`subscriptionId: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('empty subscriptionId', () => {
expect(() => {
resources.resourceId('', null, null, null, null);
}).toThrow(`subscriptionId: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('whitespace subscriptionId', () => {
expect(() => {
resources.resourceId(' ', null, null, null, null);
}).toThrow(`subscriptionId: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('invalid subscriptionId', () => {
expect(() => {
resources.resourceId('NOT_VALID', null, null, null, null);
}).toThrow(`subscriptionId: ${validationMessages.StringIsNotAValidGuid}`);
});
});
describe('resourceGroupName validations', () => {
it('null resourceGroupName', () => {
expect(() => {
resources.resourceId(subscriptionId, null, null, null, null);
}).toThrow(`resourceGroupName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('empty resourceGroupName', () => {
expect(() => {
resources.resourceId(subscriptionId, '', null, null, null);
}).toThrow(`resourceGroupName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('whitespace resourceGroupName', () => {
expect(() => {
resources.resourceId(subscriptionId, ' ', null, null, null);
}).toThrow(`resourceGroupName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
});
describe('resourceType validations', () => {
it('null resourceType', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, null, null, null);
}).toThrow(`resourceType: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('empty resourceType', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, '', null, null);
}).toThrow(`resourceType: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('whitespace resourceType', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, ' ', null, null);
}).toThrow(`resourceType: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('resourceType parts less than 2', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, 'Microsoft.Network', null, null);
}).toThrow('resourceType: Invalid length 1');
});
it('resourceType parts greater than 3', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, 'Microsoft.Network/virtualNetworks/subnets/extra', null, null);
}).toThrow('resourceType: Invalid length 4');
});
});
describe('resourceName validations', () => {
it('null resourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, virtualNetworksResourceType, null, null);
}).toThrow(`resourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('empty resourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, virtualNetworksResourceType, '', null);
}).toThrow(`resourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('whitespace resourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, virtualNetworksResourceType, ' ', null);
}).toThrow(`resourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
});
describe('subresourceName validations', () => {
it('null subresourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, subnetsResourceType, resourceName, null);
}).toThrow(`subresourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('empty subresourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, subnetsResourceType, resourceName, '');
}).toThrow(`subresourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('whitespace subresourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, subnetsResourceType, resourceName, ' ');
}).toThrow(`subresourceName: ${validationMessages.StringCannotBeNullUndefinedEmptyOrOnlyWhitespace}`);
});
it('invalid resource type for subresourceName', () => {
expect(() => {
resources.resourceId(subscriptionId, resourceGroupName, virtualNetworksResourceType, resourceName, subresourceName);
}).toThrow(`subresourceName: ${validationMessages.resources.SubresourceNameShouldNotBeSpecifiedForTopLevelResourceType}`);
});
});
describe('valid resourceId parameters', () => {
it('valid resource', () => {
let returnValue = resources.resourceId(subscriptionId, resourceGroupName, virtualNetworksResourceType, resourceName);
expect(returnValue).toBe(`/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Network/virtualNetworks/${resourceName}`);
});
it('valid subresource', () => {
let returnValue = resources.resourceId(subscriptionId, resourceGroupName, subnetsResourceType, resourceName,subresourceName);
expect(returnValue).toBe(`/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Network/virtualNetworks/${resourceName}/subnets/${subresourceName}`);
});
});
});
describe('setupResources', () => {
it('properties set', () => {
let buildingBlockSettings = {
subscriptionId: '00000000-0000-1000-8000-000000000000',
resourceGroupName: 'test-rg',
location: 'westus2'
};
let settings = {
resource: {
name: 'my-name'
}
};
let result = resources.setupResources(settings, buildingBlockSettings, (parentKey) => {
return ((parentKey === null) || (parentKey === 'resource'));
});
expect(result.subscriptionId).toEqual(buildingBlockSettings.subscriptionId);
expect(result.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.location).toEqual(buildingBlockSettings.location);
expect(result.resource.subscriptionId).toEqual(buildingBlockSettings.subscriptionId);
expect(result.resource.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.resource.location).toEqual(buildingBlockSettings.location);
});
it('properties overridden', () => {
let buildingBlockSettings = {
subscriptionId: '00000000-0000-1000-8000-000000000000',
resourceGroupName: 'test-rg',
location: 'westus2'
};
let settings = {
resource: {
subscriptionId: '11111111-0000-1000-8000-000000000000',
name: 'my-name'
}
};
let result = resources.setupResources(settings, buildingBlockSettings, (parentKey) => {
return ((parentKey === null) || (parentKey === 'resource'));
});
expect(result.subscriptionId).toEqual(buildingBlockSettings.subscriptionId);
expect(result.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.location).toEqual(buildingBlockSettings.location);
expect(result.resource.subscriptionId).toEqual(settings.resource.subscriptionId);
expect(result.resource.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.resource.location).toEqual(buildingBlockSettings.location);
});
it('properties inherited', () => {
let buildingBlockSettings = {
subscriptionId: '00000000-0000-1000-8000-000000000000',
resourceGroupName: 'test-rg'
};
let settings = {
resource: {
subscriptionId: '11111111-0000-1000-8000-000000000000',
name: 'my-name',
subresource: {
name: 'my-subresource'
}
}
};
let result = resources.setupResources(settings, buildingBlockSettings, (parentKey) => {
return ((parentKey === null) || (parentKey === 'resource') || (parentKey === 'subresource'));
});
expect(result.subscriptionId).toEqual(buildingBlockSettings.subscriptionId);
expect(result.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.location).toEqual(buildingBlockSettings.location);
expect(result.resource.subscriptionId).toEqual(settings.resource.subscriptionId);
expect(result.resource.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.resource.location).toEqual(buildingBlockSettings.location);
expect(result.resource.subresource.subscriptionId).toEqual(settings.resource.subscriptionId);
expect(result.resource.subresource.resourceGroupName).toEqual(buildingBlockSettings.resourceGroupName);
expect(result.resource.subresource.location).toEqual(buildingBlockSettings.location);
});
});
describe('extractResourceGroups', () => {
it('single resource group with settings array', () => {
let settings = [
{
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
name: 'my-name',
subresource: {
name: 'my-subresource',
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
}
}
];
let result = resources.extractResourceGroups(settings);
expect(result.length).toEqual(1);
expect(result[0].subscriptionId).toEqual(settings[0].subscriptionId);
expect(result[0].resourceGroupName).toEqual(settings[0].resourceGroupName);
expect(result[0].location).toEqual(settings[0].location);
});
it('single resource group with settings object', () => {
let settings = {
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
name: 'my-name',
subresource: {
name: 'my-subresource',
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
}
};
let result = resources.extractResourceGroups(settings);
expect(result.length).toEqual(1);
expect(result[0].subscriptionId).toEqual(settings.subscriptionId);
expect(result[0].resourceGroupName).toEqual(settings.resourceGroupName);
expect(result[0].location).toEqual(settings.location);
});
it('multiple resource group with settings array', () => {
let settings = [
{
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
name: 'my-name',
subresource: {
name: 'my-subresource',
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg2',
location: 'westus2',
}
}
];
let result = resources.extractResourceGroups(settings, settings[0].subresource);
expect(result.length).toEqual(2);
expect(result[0].subscriptionId).toEqual(settings[0].subscriptionId);
expect(result[0].resourceGroupName).toEqual(settings[0].resourceGroupName);
expect(result[0].location).toEqual(settings[0].location);
expect(result[1].subscriptionId).toEqual(settings[0].subresource.subscriptionId);
expect(result[1].resourceGroupName).toEqual(settings[0].subresource.resourceGroupName);
expect(result[1].location).toEqual(settings[0].subresource.location);
});
it('multiple resource group with settings object', () => {
let settings = {
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg',
location: 'westus2',
name: 'my-name',
subresource: {
name: 'my-subresource',
subscriptionId: '11111111-0000-1000-8000-000000000000',
resourceGroupName: 'my-test-rg2',
location: 'westus2',
}
};
let result = resources.extractResourceGroups(settings, settings.subresource);
expect(result.length).toEqual(2);
expect(result[0].subscriptionId).toEqual(settings.subscriptionId);
expect(result[0].resourceGroupName).toEqual(settings.resourceGroupName);
expect(result[0].location).toEqual(settings.location);
expect(result[1].subscriptionId).toEqual(settings.subresource.subscriptionId);
expect(result[1].resourceGroupName).toEqual(settings.subresource.resourceGroupName);
expect(result[1].location).toEqual(settings.subresource.location);
});
});
});