Skip to content

Commit

Permalink
Merge branch 'main' into migrate-subtract-to-builtin
Browse files Browse the repository at this point in the history
Signed-off-by: Joseph Cook <33655003+jmcook1186@users.noreply.github.com>
  • Loading branch information
jmcook1186 committed May 23, 2024
2 parents 8363396 + 5ce27fc commit 7d8d233
Show file tree
Hide file tree
Showing 15 changed files with 613 additions and 8 deletions.
4 changes: 2 additions & 2 deletions manifests/bugs/azure-importer-ignoring-defaults.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ initialize:
method: AzureImporter
path: "@grnsft/if-unofficial-plugins"
"try-defaults-1":
path: "@grnsft/if-plugins"
path: "builtin"
method: Coefficient
global-config:
input-parameter: grid/carbon-intensity
coefficient: 0.1
output-parameter: grid/carbon-intensity
"try-defaults-2":
path: "@grnsft/if-plugins"
path: "builtin"
method: Coefficient
global-config:
input-parameter: network/energy
Expand Down
4 changes: 2 additions & 2 deletions manifests/bugs/azure-importer-incorrect-calculation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ initialize:
path: '@grnsft/if-unofficial-plugins'
method: AzureImporter
try-defaults-1:
path: '@grnsft/if-plugins'
path: 'builtin'
method: Coefficient
global-config:
input-parameter: grid/carbon-intensity
coefficient: 0.1
output-parameter: grid/carbon-intensity
try-defaults-2:
path: '@grnsft/if-plugins'
path: 'builtin'
method: Coefficient
global-config:
input-parameter: network/energy
Expand Down
2 changes: 1 addition & 1 deletion manifests/examples/generics.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ initialize:
- network/energy
output-parameter: energy-sum
"coefficient":
path: "@grnsft/if-plugins"
path: "builtin"
method: Coefficient
global-config:
input-parameter: energy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ initialize:
plugins:
coefficient:
method: Coefficient
path: "@grnsft/if-plugins"
path: "builtin"
global-config:
input-parameter: 4
coefficient: 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ initialize:
plugins:
coefficient:
method: Coefficient
path: "@grnsft/if-plugins"
path: "builtin"
global-config:
input-parameter: "carbon"
coefficient: 3
Expand Down
2 changes: 1 addition & 1 deletion manifests/plugins/coefficient/success.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ initialize:
plugins:
coefficient:
method: Coefficient
path: "@grnsft/if-plugins"
path: "builtin"
global-config:
input-parameter: "carbon"
coefficient: 3
Expand Down
123 changes: 123 additions & 0 deletions src/__tests__/unit/builtins/coefficient.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import {Coefficient} from '../../../builtins/coefficient';

import {ERRORS} from '../../../util/errors';

const {InputValidationError, ConfigNotFoundError} = ERRORS;

describe('builtins/coefficient: ', () => {
describe('Coefficient: ', () => {
const globalConfig = {
'input-parameter': 'carbon',
coefficient: 3,
'output-parameter': 'carbon-product',
};
const coefficient = Coefficient(globalConfig);

describe('init: ', () => {
it('successfully initalized.', () => {
expect(coefficient).toHaveProperty('metadata');
expect(coefficient).toHaveProperty('execute');
});
});

describe('execute(): ', () => {
it('successfully applies coefficient strategy to given input.', () => {
expect.assertions(1);

const expectedResult = [
{
duration: 3600,
carbon: 3,
'carbon-product': 9,
timestamp: '2021-01-01T00:00:00Z',
},
];

const result = coefficient.execute([
{
duration: 3600,
carbon: 3,
timestamp: '2021-01-01T00:00:00Z',
},
]);

expect.assertions(1);

expect(result).toStrictEqual(expectedResult);
});

it('throws an error when global config is not provided.', () => {
const config = undefined;
const coefficient = Coefficient(config!);
const expectedMessage = 'Global config is not provided.';

expect.assertions(1);

try {
coefficient.execute([
{
duration: 3600,
timestamp: '2021-01-01T00:00:00Z',
carbon: 3,
},
]);
} catch (error) {
expect(error).toStrictEqual(new ConfigNotFoundError(expectedMessage));
}
});

it('throws an error on missing `input-parameter` param in input.', () => {
const invalidConfig = {
'input-parameter': '',
coefficient: 3,
'output-parameter': 'carbon-product',
};
const coefficient = Coefficient(invalidConfig);
const expectedMessage =
'"input-parameter" parameter is string must contain at least 1 character(s). Error code: too_small.';

expect.assertions(1);

try {
coefficient.execute([
{
duration: 3600,
timestamp: '2021-01-01T00:00:00Z',
carbon: 3,
},
]);
} catch (error) {
expect(error).toStrictEqual(
new InputValidationError(expectedMessage)
);
}
});

it('throws an error on missing `output-parameter` param in input.', () => {
const invalidConfig = {
'input-parameter': 'carbon',
coefficient: 10,
'output-parameter': '',
};
const coefficient = Coefficient(invalidConfig);
const expectedMessage =
'"output-parameter" parameter is string must contain at least 1 character(s). Error code: too_small.';

expect.assertions(1);
try {
coefficient.execute([
{
duration: 3600,
timestamp: '2021-01-01T00:00:00Z',
carbon: 3,
},
]);
} catch (error) {
expect(error).toStrictEqual(
new InputValidationError(expectedMessage)
);
}
});
});
});
});
118 changes: 118 additions & 0 deletions src/__tests__/unit/builtins/exponent.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import {Exponent} from '../../../builtins/exponent';

import {ERRORS} from '../../../util/errors';

const {InputValidationError} = ERRORS;

describe('lib/exponent: ', () => {
describe('Exponent: ', () => {
const globalConfig = {
'input-parameter': 'energy/base',
exponent: 3,
'output-parameter': 'energy',
};
const exponent = Exponent(globalConfig);

describe('init: ', () => {
it('successfully initalized.', () => {
expect(exponent).toHaveProperty('metadata');
expect(exponent).toHaveProperty('execute');
});
});

describe('execute(): ', () => {
it('successfully applies Exponent strategy to given input.', async () => {
expect.assertions(1);

const expectedResult = [
{
duration: 3600,
'energy/base': 2,
energy: 8,
timestamp: '2021-01-01T00:00:00Z',
},
];

const result = await exponent.execute([
{
duration: 3600,
'energy/base': 2,
timestamp: '2021-01-01T00:00:00Z',
},
]);

expect(result).toStrictEqual(expectedResult);
});

it('throws an error on missing params in input.', async () => {
const expectedMessage =
'Exponent: energy/base is missing from the input array.';

expect.assertions(1);

try {
await exponent.execute([
{
duration: 3600,
timestamp: '2021-01-01T00:00:00Z',
},
]);
} catch (error) {
expect(error).toStrictEqual(
new InputValidationError(expectedMessage)
);
}
});

it('throws an error on input param value not numeric.', async () => {
const expectedMessage = 'Exponent: i-am-not-a-number is not numeric.';

expect.assertions(1);

try {
await exponent.execute([
{
duration: 3600,
'energy/base': 'i-am-not-a-number',
timestamp: '2021-01-01T00:00:00Z',
},
]);
} catch (error) {
expect(error).toStrictEqual(
new InputValidationError(expectedMessage)
);
}
});

it('returns a result with input params not related to energy.', async () => {
expect.assertions(1);
const newConfig = {
'input-parameter': 'carbon/base',
exponent: 4,
'output-parameter': 'carbon',
};
const exponent = Exponent(newConfig);

const data = [
{
duration: 3600,
timestamp: '2021-01-01T00:00:00Z',
'carbon/base': 2,
},
];
const response = await exponent.execute(data);

const expectedResult = [
{
duration: 3600,
'carbon/base': 2,
carbon: 16,
timestamp: '2021-01-01T00:00:00Z',
},
];

expect(response).toEqual(expectedResult);
});
});
});
});

0 comments on commit 7d8d233

Please sign in to comment.