Skip to content

Commit

Permalink
Merge pull request #166 from RobD-tech/main
Browse files Browse the repository at this point in the history
feat: option to calculate with business days only and bump to version PFR-909
  • Loading branch information
thomas9911 authored Nov 18, 2024
2 parents e080051 + 13c2a11 commit 730e0e1
Show file tree
Hide file tree
Showing 5 changed files with 439 additions and 2 deletions.
226 changes: 226 additions & 0 deletions __tests__/date-time-offset/1.1/date-time-offset.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
import { addMinutes } from 'date-fns';
import dateTimeOffset from '../../../functions/date-time-offset/1.1';

describe('Date Time Offset', () => {
test('return date time for 1 second added to a new javascript date for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: true,
customStartDate: null,
offsetType: 'ss',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);

const dateDiff =
new Date(result) -
addMinutes(new Date(), parseInt(testData.timeZoneOffset, 10));
expect(dateDiff).toBeLessThan(1000);
expect(dateDiff).toBeGreaterThan(0);
});

test('return 1 second added to a new javascript date for UTC-6 zone', async () => {
const testData = {
businessDays: false,
currentDate: true,
customStartDate: null,
offsetType: 'ss',
offset: '1',
resultType: 'DT',
timeZoneOffset: '-360',
};
const checkDate = addMinutes(
new Date(),
parseInt(testData.timeZoneOffset, 10),
);
const { result } = await dateTimeOffset(testData);
const dateDiff = new Date(result) - checkDate;
expect(dateDiff).toBeLessThan(1000);
expect(dateDiff).toBeGreaterThan(0);
});

test('return time for 1 second added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'ss',
offset: '1',
resultType: 'T',
timeZoneOffset: '60',
};

const { result } = await dateTimeOffset(testData);
expect(result).toMatch('00:00:01');
});

test('return date time for 1 second added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'ss',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2022-01-01 00:00:01');
});

test('return time for 2 minutes added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'mm',
offset: '2',
resultType: 'T',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('00:02:00');
});

test('return time for 1 hour added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'hh',
offset: '1',
resultType: 'T',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('01:00:00');
});

test('return date for 1 day added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'DD',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2022-01-02 00:00:00');
});

test('return date for 1 business day added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: true,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'DD',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2022-01-03 00:00:00');
});

test('return date for 1 week added to 2022-01-01 01:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 01:00:00',
offsetType: 'WW',
offset: '1',
resultType: 'D',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2022-01-08');
});

test('return date time for 1 month added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'MM',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2022-02-01 00:00:00');
});

test('return date time for 1 year added to 2022-01-01 00:00:00 for UTC+1 zone', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'YYYY',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('2023-01-01 00:00:00');
});

test('return invalid offset type', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'INCORRECT',
offset: '1',
resultType: 'DT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('Incorrect offset type');
});

test('return invalid result type', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2022-01-01 00:00:00',
offsetType: 'MM',
offset: '1',
resultType: 'INCORRECT',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('Incorrect formatting type');
});

test('return invalid date, based on custom incorrect date', async () => {
const testData = {
businessDays: false,
currentDate: false,
customStartDate: '2023-31-31 00:00:00',
offsetType: 'MM',
offset: '1',
resultType: 'D',
timeZoneOffset: '60',
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('Invalid Date');
});

test('return invalid date, based on NO data', async () => {
const testData = {
businessDays: false,
currentDate: null,
customStartDate: null,
offsetType: null,
offset: null,
resultType: null,
timeZoneOffset: null,
};
const { result } = await dateTimeOffset(testData);
expect(result).toMatch('Invalid Date');
});
});
2 changes: 1 addition & 1 deletion blocks/date-time-offset.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"dependencies": ["date-fns"],
"functions": ["dateTimeOffset 1.0"],
"functions": ["dateTimeOffset 1.1"],
"includes": []
}
2 changes: 1 addition & 1 deletion functions/date-time-offset/1.0/function.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,4 @@
}
],
"yields": "NONE"
}
}
121 changes: 121 additions & 0 deletions functions/date-time-offset/1.1/function.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
{
"description": "Calculate a date, time or date with time based on a provided date in text (YYYY-MM-DD hh:mm:ss) or the current date",
"label": "Date/Time Offset",
"category": "Misc",
"icon": {
"name": "DateTimeIcon",
"color": "Yellow"
},
"options": [
{
"name": "customStartDate",
"label": "Specify your date in YYYY-MM-DD hh:mm:ss notation",
"meta": {
"type": "Text"
}
},
{
"name": "currentDate",
"label": "OR use the current date/time ",
"meta": {
"type": "Boolean"
}
},
{
"name": "businessDays",
"label": "Business days only",
"meta": {
"type": "Boolean"
},
"info": "If checked, the calculation will skip weekends (Saturday and Sunday) and will only count working days (Monday to Friday). This option only works in combination with offset type \"Days\"."
},
{
"name": "offsetType",
"label": "Offset Type",
"meta": {
"type": "Select",
"validations": {
"required": true
},
"values": [
{ "label": "Seconds", "value": "ss" },
{ "label": "Minutes", "value": "mm" },
{ "label": "Hours", "value": "hh" },
{ "label": "Days", "value": "DD" },
{ "label": "Weeks", "value": "WW" },
{ "label": "Months", "value": "MM" },
{ "label": "Years", "value": "YYYY" }
]
}
},
{
"name": "offset",
"label": "offset",
"meta": {
"type": "Number",
"validations": {
"required": true
}
}
},
{
"name": "resultType",
"label": "Result type",
"meta": {
"type": "Select",
"validations": {
"required": true
},
"values": [
{ "label": "Date", "value": "D" },
{ "label": "Date Time", "value": "DT" },
{ "label": "Time", "value": "T" },
{ "label": "Unix Time stamp (epoch)", "value": "UT" }
]
}
},
{
"name": "timeZoneOffset",
"label": "UTC timezone offset for your zone (i.e. NL3 = UTC+1, USA2 = UTC-6)",
"meta": {
"type": "Select",
"validations": {
"required": true
},
"values": [
{ "label": "UTC-8", "value": "-480" },
{ "label": "UTC-7", "value": "-420" },
{ "label": "UTC-6", "value": "-360" },
{ "label": "UTC-5", "value": "-300" },
{ "label": "UTC-4", "value": "-240" },
{ "label": "UTC-3", "value": "-180" },
{ "label": "UTC-2", "value": "-120" },
{ "label": "UTC-1", "value": "-60" },
{ "label": "UTC", "value": "0" },
{ "label": "UTC+1", "value": "60" },
{ "label": "UTC+2", "value": "120" },
{ "label": "UTC+3", "value": "180" },
{ "label": "UTC+4", "value": "240" },
{ "label": "UTC+5", "value": "300" },
{ "label": "UTC+6", "value": "360" },
{ "label": "UTC+7", "value": "420" },
{ "label": "UTC+8", "value": "480" }
]
}
},
{
"name": "result",
"label": "Result",
"meta": {
"type": "Output",
"validations": {
"required": true
},
"output": {
"type": "Text"
}
}
}
],
"yields": "NONE"
}
Loading

0 comments on commit 730e0e1

Please sign in to comment.