Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

date based electron tests are using today instead of specific date #3597

Closed
khassel opened this issue Oct 23, 2024 · 13 comments
Closed

date based electron tests are using today instead of specific date #3597

khassel opened this issue Oct 23, 2024 · 13 comments

Comments

@khassel
Copy link
Collaborator

khassel commented Oct 23, 2024

see #3596

The helper is not working (anymore) so every (electron) test running with a specific date does not run with this date but uses today.

Above PR should be reverted if this is solved.

@khassel khassel added the bug label Oct 23, 2024
@sdetweil
Copy link
Collaborator

yes, the 'work around' is to code the Date() setting IN the config.js file for the tescase instead of in the calendar_spec.js runner (which uses helper)
my newly added testcases have it in the config.js testcase file.. and also in the runner.. copied other working testcases..

in the config.js for the testcase works for local debugging

@khassel
Copy link
Collaborator Author

khassel commented Oct 23, 2024

but you have to be careful coding this in config because there are config's which are used in several tests ...

@sdetweil
Copy link
Collaborator

yes, this one (ICS)

auth-default.js:						url: "http://localhost:8080/tests/mocks/calendar_test.ics",
basic-auth.js:						url: "http://localhost:8080/tests/mocks/calendar_test.ics",
changed-port.js:						url: "http://localhost:8010/tests/mocks/calendar_test.ics",
default.js:						url: "http://localhost:8080/tests/mocks/calendar_test.ics"
fail-basic-auth.js:						url: "http://localhost:8020/tests/mocks/calendar_test.ics",
old-basic-auth.js:						url: "http://localhost:8080/tests/mocks/calendar_test.ics",
show-duplicates-in-calendar.js:						url: "http://localhost:8080/tests/mocks/calendar_test.ics" 

but each has diff .js file, which contains the Date() function

@sdetweil
Copy link
Collaborator

those other tests are used in e2e and do not care about the number of events posted..

@khassel khassel self-assigned this Oct 24, 2024
rejas pushed a commit that referenced this issue Oct 25, 2024
fixes #3597 

Changes:
- electron tests: add mocking to `electron.js` for mocking the server
side, before only the browser side was mocked
- publish "/tests/configs" and "/tests/mocks" always in `server.js`,
this reverts a change done with latest release, we need this for
debugging (otherwise you get on the screen that your config has errors
but config check is successful ...)
- revert hotfix in
`tests/configs/modules/calendar/show-duplicates-in-calendar.js`
- fix `tests/configs/modules/calendar/custom.js` to allow events in the
past (~~I don't know how this could work before~~ when testing css
classes `yesterday` and `dayBeforeYesterday` --> it worked before
because the server side did not mock and therefore was not in the past)
@sdetweil
Copy link
Collaborator

i have merged develop now that #3599 is merged

BUT the testcases in Electron still have Date().... in them did you intend for these to be changed too so that only date in runner applies?

grep "new Date" *.js
3_move_first_allday_repeating_event.js:	return new Date("01 Oct 2024 10:38:00 GMT+2:00").valueOf();
berlin_end_of_day_repeating.js:	return new Date("08 Oct 2024 12:30:00 GMT+02:00").valueOf();
berlin_multi.js:	return new Date("08 Oct 2024 12:30:00 GMT+02:00").valueOf();
berlin_whole_day_event_moved_over_dst_change.js:	return new Date("08 Oct 2024 12:30:00 GMT+02:00").valueOf();
chicago_late_in_timezone.js:	return new Date("01 Sept 2024 10:38:00 GMT-05:00").valueOf();
diff_tz_start_end.js:	return new Date("08 Oct 2024 12:30:00 GMT-07:00").valueOf();
end_of_day_berlin_moved.js:	return new Date("08 Oct 2024 12:30:00 GMT+02:00").valueOf();
event_with_time_over_multiple_days_non_repeating_display_end.js:	return new Date("15 Sep 2024 12:30:00 GMT").valueOf();
event_with_time_over_multiple_days_non_repeating_no_display_end.js:	return new Date("15 Sep 2024 12:30:00 GMT").valueOf();
exdate_and_recurrence_together.js:	return new Date("08 Oct 2024 12:30:00 GMT+07:00").valueOf();
exdate_la_at_midnight_dst.js:	return new Date("19 Oct 2023 12:30:00 GMT-07:00").valueOf();
exdate_la_at_midnight_std.js:	return new Date("19 Oct 2023 12:30:00 GMT-07:00").valueOf();
exdate_la_before_midnight.js:	return new Date("19 Oct 2023 12:30:00 GMT-07:00").valueOf();
exdate_syd_at_midnight_dst.js:	return new Date("14 Sep 2023 12:30:00 GMT+10:00").valueOf();
exdate_syd_at_midnight_std.js:	return new Date("14 Sep 2023 12:30:00 GMT+10:00").valueOf();
exdate_syd_before_midnight.js:	return new Date("14 Sep 2023 12:30:00 GMT+10:00").valueOf();
fullday_event_over_multiple_days_nonrepeating.js:	return new Date("15 Sep 2024 12:30:00 GMT").valueOf();
germany_at_end_of_day_repeating.js:	return new Date("01 Oct 2024 10:38:00 GMT+2:00").valueOf();
rrule_until.js:	return new Date("07 Mar 2024 10:38:00 GMT-07:00").valueOf();
show-duplicates-in-calendar.js:	return new Date("15 Sep 2024 12:30:00 GMT").valueOf();
sliceMultiDayEvents.js:	return new Date("01 Sept 2024 10:38:00 GMT+2:00").valueOf();

@sdetweil
Copy link
Collaborator

sdetweil commented Oct 25, 2024

also in helper
we don't need this as its all about setting the date, which is done a different way now

	for (const win of global.electronApp.windows()) {
		const title = await win.title();
		expect(["MagicMirror²", "DevTools"]).toContain(title);
		if (title === "MagicMirror²") { <---- here  -------------------
			global.page = win;
			if (systemDate) {
				await global.page.evaluate((systemDate) => {
					Date.now = () => {
						return new Date(systemDate).valueOf();
					};
				}, systemDate);
			}
		}  <---- thru here  -------------------------
	}

@sdetweil
Copy link
Collaborator

this will fix all the testcases.. in the tests/config/modules/calendar folder

grep Date.now *.js | awk -F: '{print $1}' | xargs sed -i -e '/Date.now/,+3d'

@sdetweil
Copy link
Collaborator

my helper suggestion however causes failure to locate content

@khassel
Copy link
Collaborator Author

khassel commented Oct 25, 2024

I did several tests yesterday and as I wrote already in the PR, I think we need both, the date mocking in the browser and the date mocking in the backend (maybe except for modules running completly in the browser as weather).

But I'm happy to merge a simpler solution ...

@sdetweil
Copy link
Collaborator

sdetweil commented Oct 25, 2024

sorry,, I missed the implementation detail of mocking on both. I 'assumed' that mocking on the server would set the date for the browser that was started later.

i removed all the config Date.now from the testcases.... and all were executed correctly, regarless of my system timezone

so I think the env sets the side for node_helpers.. and the helper global setup still does the same for the browser..
but the Date... in the actual testcases is not needed now..

this way there is only ONE place for the execution date( the runner)
course that makes debugging a little harder..

@khassel
Copy link
Collaborator Author

khassel commented Oct 25, 2024

but the Date... in the actual testcases is not needed now..

do you mean this e.g. in exdate_syd_at_midnight_dst.js:

Date.now = () => {
	return new Date("19 Oct 2023 12:30:00 GMT-07:00").valueOf();
};

was not aware of setting dates in the configs.

So now I understand your grep statement, will you provide a PR for removing this? Otherwise I can do this ...

@sdetweil
Copy link
Collaborator

see #3600

sdetweil added a commit to sdetweil/MagicMirror that referenced this issue Oct 25, 2024
khassel pushed a commit that referenced this issue Oct 25, 2024
…e testcase runner (#3601)

cleanup testcases with hard coded Date settings after #3597
@khassel
Copy link
Collaborator Author

khassel commented Oct 25, 2024

as test stuff is running on develop we don't have to wait for this until next release, so closing this now as completed.

@khassel khassel closed this as completed Oct 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants