From d5c4f461b5e871e873bbc97cd011b178826f130a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Fri, 11 Aug 2023 13:19:55 +0200 Subject: [PATCH] [Flaky Test #111821] Mock `moment` to avoid midnight TZ issues (#163157) --- .../integration_tests/daily_rollups.test.ts | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts index 32ce4ed198038..6014c3b3acf4c 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/rollups/integration_tests/daily_rollups.test.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import moment, { type MomentInput } from 'moment'; import type { Logger, ISavedObjectsRepository, SavedObject } from '@kbn/core/server'; import { type TestElasticsearchUtils, @@ -13,7 +14,7 @@ import { createTestServers, createRootWithCorePlugins, } from '@kbn/core-test-helpers-kbn-server'; -import { rollDailyData } from '../daily'; + import { metricsServiceMock } from '@kbn/core/server/mocks'; import { @@ -21,10 +22,21 @@ import { serializeSavedObjectId, EventLoopDelaysDaily, } from '../../saved_objects'; -import moment from 'moment'; +import { rollDailyData } from '../daily'; const eventLoopDelaysMonitor = metricsServiceMock.createEventLoopDelaysMonitor(); +/* + * Mocking the constructor of moment, so we can control the time of the day. + * This is to avoid flaky tests when starting to run before midnight and ending the test after midnight + * because the logic might remove one extra document since we moved to the next day. + */ +jest.doMock('moment', () => { + const mockedMoment = (date?: MomentInput) => moment(date ?? '2023-07-04T10:00:00.000Z'); + Object.setPrototypeOf(mockedMoment, moment); // inherit the prototype of `moment` so it has all the same methods. + return mockedMoment; +}); + function createRawObject(date: moment.MomentInput): SavedObject { const pid = Math.round(Math.random() * 10000); const instanceUuid = 'mock_instance'; @@ -45,8 +57,8 @@ function createRawObject(date: moment.MomentInput): SavedObject { +describe(`daily rollups integration test`, () => { let esServer: TestElasticsearchUtils; let root: TestKibanaUtils['root']; let internalRepository: ISavedObjectsRepository; @@ -82,15 +93,6 @@ describe.skip(`daily rollups integration test`, () => { logger = root.logger.get('test daily rollups'); internalRepository = start.savedObjects.createInternalRepository([SAVED_OBJECTS_DAILY_TYPE]); - // If we are less than 1 second away from midnight, let's wait 1 second before creating the docs. - // Otherwise, we may receive 1 document less than the expected ones. - if (moment().endOf('day').diff(moment(), 's', true) < 1) { - logger.info( - 'Delaying the creation of the docs 1s, just in case we create them before midnight and run the tests on the following day.' - ); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - // Create the docs now const rawDailyDocs = createRawEventLoopDelaysDailyDocs(); rawEventLoopDelaysDaily = rawDailyDocs.rawEventLoopDelaysDaily;