Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,5 @@ Icons made by [freepik](https://www.flaticon.com/authors/freepik) from [www.flat
Original Timer icon by [lucy-g](https://icon-icons.com/icon/timer/121243), colored variations and formats modified from it.

Sick icon by [SVG Repo](https://www.svgrepo.com/svg/271898/sick).

View Switch icon made by [Pixel perfect](https://www.flaticon.com/authors/pixel-perfect) from [www.flaticon.com](https://www.flaticon.com).
165 changes: 163 additions & 2 deletions __tests__/__renderer__/classes/Calendar.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const Store = require('electron-store');
const { defaultPreferences } = require('../../../js/user-preferences');
const Calendar = require('../../../js/classes/Calendar');
const { CalendarFactory } = require('../../../js/classes/Calendar');

window.$ = window.jQuery = require('jquery');

Expand Down Expand Up @@ -36,7 +36,7 @@ describe('Calendar class Tests', () => {

const today = new Date();
let testPreferences = defaultPreferences;
let calendar = new Calendar(testPreferences);
let calendar = CalendarFactory.getInstance(testPreferences);

test('Calendar creates with today\'s date', () => {
expect(calendar._today.getDate()).toBe(today.getDate());
Expand Down Expand Up @@ -149,5 +149,166 @@ describe('Calendar class Tests', () => {
expect(calendar._year).toBe(today.getFullYear());
expect(calendar._getYear()).toBe(today.getFullYear());
});

test('Calendar to DayCalendar', () => {
store.clear();
store.set(regularEntries);

waivedWorkdays.clear();
waivedWorkdays.set(waivedEntries);

testPreferences['view'] = 'day';
expect(calendar.constructor.name).toBe("Calendar");

// last state of the internal store was 10 elements
expect(Object.keys(calendar._internalStore).length).toStrictEqual(10);

calendar = CalendarFactory.getInstance(testPreferences, calendar);
expect(calendar.constructor.name).toBe("DayCalendar");

// internal store is again set with 9 elements after store reset
expect(Object.keys(calendar._internalStore).length).toStrictEqual(9);
});

test('DayCalendar starts with today\'s date', () => {
expect(calendar._today.getDate()).toBe(today.getDate());
expect(calendar._year).toBe(today.getFullYear());
expect(calendar._month).toBe(today.getMonth());
});

test('DayCalendar internal storage correct loading', () => {
expect(calendar._internalStore['2020-3-1-day-begin']).toBe('08:00');
expect(calendar._getStore(1, 3, 2020, 'day-begin')).toBe('08:00');
expect(calendar._internalStore['2010-3-1-day-begin']).toBe(undefined);
expect(calendar._getStore(1, 3, 2010, 'day-begin')).toBe(undefined);

expect(Object.keys(calendar._internalStore).length).toStrictEqual(9);
expect(store.size).toStrictEqual(9);

calendar._setStore(1, 3, 2010, 'day-begin', '05:00');
expect(calendar._internalStore['2010-3-1-day-begin']).toBe('05:00');
expect(calendar._getStore(1, 3, 2010, 'day-begin')).toBe('05:00');

expect(Object.keys(calendar._internalStore).length).toStrictEqual(10);
expect(store.size).toStrictEqual(10);

calendar._removeStore(1, 3, 2010, 'day-begin');
expect(calendar._internalStore['2010-3-1-day-begin']).toBe(undefined);
expect(calendar._getStore(1, 3, 2010, 'day-begin')).toBe(undefined);

// remove just sets the value as undefined in internal store, if it existed
expect(Object.keys(calendar._internalStore).length).toStrictEqual(10);
expect(store.size).toStrictEqual(9);
});

test('DayCalendar internal waiver storage correct loading', () => {
// Waiver Store internally saves the human month index, but the calendar methods use JS month index
expect(calendar._internalWaiverStore['2019-12-31']).toStrictEqual({reason: 'New Year\'s eve', hours: '08:00'});
expect(calendar._getWaiverStore(31, 11, 2019)).toStrictEqual({reason: 'New Year\'s eve', hours: '08:00'});
expect(calendar._internalWaiverStore['2010-12-31']).toStrictEqual(undefined);
expect(calendar._getWaiverStore(31, 11, 2010)).toStrictEqual(undefined);

expect(waivedWorkdays.size).toStrictEqual(3);
expect(Object.keys(calendar._internalWaiverStore).length).toStrictEqual(3);

const newWaivedEntry = {
'2010-12-31': {reason: 'New Year\'s eve', hours: '08:00'}
};
waivedWorkdays.set(newWaivedEntry);

expect(calendar._internalWaiverStore['2010-12-31']).toStrictEqual(undefined);
expect(calendar._getWaiverStore(31, 11, 2010)).toStrictEqual(undefined);

calendar.loadInternalWaiveStore();

expect(Object.keys(calendar._internalWaiverStore).length).toStrictEqual(4);

expect(calendar._internalWaiverStore['2010-12-31']).toStrictEqual({reason: 'New Year\'s eve', hours: '08:00'});
expect(calendar._getWaiverStore(31, 11, 2010)).toStrictEqual({reason: 'New Year\'s eve', hours: '08:00'});
});

test('DayCalendar Day Changes', () => {
expect(calendar._today.getDate()).toBe(today.getDate());

let expectedNextDay = new Date(today);
expectedNextDay.setDate(expectedNextDay.getDate() + 1);
let expectedPrevDay = new Date(today);
expectedPrevDay.setDate(expectedPrevDay.getDate() - 1);

calendar._nextDay();
expect(calendar._today.getDate()).toBe(expectedNextDay.getDate());

calendar._prevDay();
expect(calendar._today.getDate()).toBe(today.getDate());

calendar._prevDay();
expect(calendar._today.getDate()).toBe(expectedPrevDay.getDate());

calendar._goToCurrentDate();
expect(calendar._today.getDate()).toBe(today.getDate());
});

test('DayCalendar Month Changes', () => {
expect(calendar._month).toBe(today.getMonth());
const expectedNextMonth = today.getMonth() + 1 === 12 ? 0 : (today.getMonth() + 1);
const expectedPrevMonth = today.getMonth() === 0 ? 11 : (today.getMonth() - 1);

for (let i = 0; i < 31; i++) {
calendar._nextDay();
}

expect(calendar._month).toBe(expectedNextMonth);
expect(calendar._getMonth()).toBe(expectedNextMonth);

calendar._goToCurrentDate();
expect(calendar._today.getDate()).toBe(today.getDate());
expect(calendar._month).toBe(today.getMonth());
expect(calendar._getMonth()).toBe(today.getMonth());

for (let i = 0; i < 31; i++) {
calendar._prevDay();
}

expect(calendar._month).toBe(expectedPrevMonth);
expect(calendar._getMonth()).toBe(expectedPrevMonth);

calendar._goToCurrentDate();
expect(calendar._today.getDate()).toBe(today.getDate());
expect(calendar._month).toBe(today.getMonth());
expect(calendar._getMonth()).toBe(today.getMonth());
});

test('DayCalendar Year Changes', () => {
expect(calendar._year).toBe(today.getFullYear());
expect(calendar._getYear()).toBe(today.getFullYear());
const expectedNextYear = today.getFullYear() + 1;
const expectedPrevYear = today.getFullYear() - 1;

for (let i = 0; i < 365; i++) {
calendar._nextDay();
}

expect(calendar._year).toBe(expectedNextYear);
expect(calendar._getYear()).toBe(expectedNextYear);

calendar._goToCurrentDate();
expect(calendar._today.getDate()).toBe(today.getDate());
expect(calendar._month).toBe(today.getMonth());
expect(calendar._year).toBe(today.getFullYear());
expect(calendar._getYear()).toBe(today.getFullYear());

for (let i = 0; i < 365; i++) {
calendar._prevDay();
}

expect(calendar._year).toBe(expectedPrevYear);
expect(calendar._getYear()).toBe(expectedPrevYear);

calendar._goToCurrentDate();
expect(calendar._today.getDate()).toBe(today.getDate());
expect(calendar._month).toBe(today.getMonth());
expect(calendar._year).toBe(today.getFullYear());
expect(calendar._getYear()).toBe(today.getFullYear());
});
});

1 change: 1 addition & 0 deletions assets/switch.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
- Fix: [#250] Silently ignoring waiver on non-working day or non-working day range
- Enhancement: [#228] Improved performance of TTL - Now moving through the calendar is much faster
- Enhancement: [#152] Adding a "Copy" option in the "About message", making it easier to copy information when opening an issue
- Enhancement: [#247] Day View - new minimalist view that shows the calendar day by day
- Upgrade: Upgrading jquery to 3.5.0
- Upgrade: [#236] Upgrade all dependencies

Loading