const nm_assert = require("assert"); declare var describe; declare var it; _heimdall.init(); describe( "heimdall", () => { function datetimestring_to_timestamp(datetimestring) { return Math.floor((new Date(datetimestring)).getTime() / 1000); }; function resolve_condition(condition_raw) { return { "unknown": _heimdall.enum_condition.unknown, "ok": _heimdall.enum_condition.ok, "concerning": _heimdall.enum_condition.concerning, "critical": _heimdall.enum_condition.critical, }[condition_raw]; }; describe( "master.determine_due", () => { const dimensions = [ {"name": "annoy", "elements": [false, true]}, {"name": "condition", "elements": ["unknown", "ok", "concerning", "critical"]}, {"name": "treshold_reached", "elements": [false, true]}, {"name": "passed", "elements": ["none", "attentive", "regular", "reminding"]}, ]; const parameters = { "check": { "active": true, "threshold": 1, "schedule": { "attentive_interval": 120, "regular_interval": 3600, "reminding_interval": 86400, }, "notifications": [], "name": "test", "title": "Test", "kind": "BOGUS", "parameters": {}, "custom": null, }, "old_item_state": { "timestamp": "2023-01-15T11:00:00", "last_notification_timestamp": "2023-01-15T10:00:00", }, }; const cases = ( dimensions .reduce( (product, dimension) => ( product .map( tuple => ( dimension.elements .map( element => Object.fromEntries( Object.entries(tuple) .concat([[dimension.name, element]]) ) ) ) ) .reduce( ((x, y) => x.concat(y)), [] ) ), [{}] ) .map( input => ({ "name": JSON.stringify(input), "input": input, // "output": false, }) ) ); const data = { "parameters": parameters, "cases": ( cases .map( case_ => { // setup const check : _heimdall.type_check = Object.assign( parameters["check"], { "annoy": case_.input["annoy"], } ); const old_item_state : _heimdall.type_item_state = { "timestamp": datetimestring_to_timestamp(parameters["old_item_state"]["timestamp"]), "condition": resolve_condition(case_.input["condition"]), "count": (case_.input["treshold_reached"] ? null : 0), "last_notification_timestamp": datetimestring_to_timestamp(parameters["old_item_state"]["last_notification_timestamp"]), }; const timestamp : int = ( datetimestring_to_timestamp( parameters["old_item_state"]["timestamp"] ) + ( { "none": 0, "attentive": parameters["check"]["schedule"]["attentive_interval"], "regular": parameters["check"]["schedule"]["regular_interval"], "reminding": parameters["check"]["schedule"]["reminding_interval"] }[case_.input["passed"]] ) + 60 ); console.info({check,old_item_state,timestamp}); // execution const result : boolean = _heimdall.master.determine_due( check, old_item_state, { "timestamp": timestamp, } ); return Object.assign( case_, { "output": result, } ); } ) ) }; process.stdout.write(JSON.stringify(data, undefined, "\t") + "\n"); /* data.cases.forEach( case_ => { it( case_.name, () => { // setup const check : _heimdall.type_check = Object.assign( data.parameters["check"], { "annoy": case_.input["annoy"], } ); const old_item_state : _heimdall.type_item_state = { "timestamp": datetimestring_to_timestamp(data.parameters["old_item_state"]["timestamp"]), "condition": resolve_condition(case_.input["condition"]), "count": (case_.input["treshold_reached"] ? null : 0), "last_notification_timestamp": datetimestring_to_timestamp(data.parameters["old_item_state"]["last_notification_timestamp"]), }; const timestamp : int = ( datetimestring_to_timestamp( data.parameters["old_item_state"]["timestamp"] ) + ( { "none": 0, "attentive": data.parameters["check"]["schedule"]["attentive_interval"], "regular": data.parameters["check"]["schedule"]["regular_interval"], "reminding": data.parameters["check"]["schedule"]["reminding_interval"] }[case_.input["passed"]] ) + 60 ); console.info({check,old_item_state,timestamp}); // execution const result : boolean = _heimdall.master.determine_due( check, old_item_state, { "timestamp": timestamp, } ); // assertions nm_assert.equal(result, case_.output); } ); } ); */ } ); } );