diff --git a/src/components/Analysis/MaxConsumptionCard/MaxConsumptionCard.tsx b/src/components/Analysis/MaxConsumptionCard/MaxConsumptionCard.tsx index 46656f1f9406b307455512e596f4ddeddb8941a5..9e2888a8f34279e83dc0c89c0f551fa99772af18 100644 --- a/src/components/Analysis/MaxConsumptionCard/MaxConsumptionCard.tsx +++ b/src/components/Analysis/MaxConsumptionCard/MaxConsumptionCard.tsx @@ -62,11 +62,11 @@ const MaxConsumptionCard = ({ endDate: analysisMonth.minus({ month: 1 }).endOf('month'), } const consumptionService = new ConsumptionDataManager(client) - const monthlyData = await consumptionService.getGraphData( + const monthlyData = await consumptionService.getGraphData({ timePeriod, - TimeStep.DAY, - [currentFluid] - ) + timeStep: TimeStep.DAY, + fluidTypes: [currentFluid], + }) if (monthlyData && monthlyData?.actualData.length > 0) { setChartData(monthlyData) diff --git a/src/components/Analysis/TotalAnalysisChart/TotalAnalysisChart.tsx b/src/components/Analysis/TotalAnalysisChart/TotalAnalysisChart.tsx index fd512fb31d2d47fd0ec432c8c6a64700f2b7b3d8..f50fee73138e27b1b7d7e6892ff928add7a50ee3 100644 --- a/src/components/Analysis/TotalAnalysisChart/TotalAnalysisChart.tsx +++ b/src/components/Analysis/TotalAnalysisChart/TotalAnalysisChart.tsx @@ -41,14 +41,12 @@ const TotalAnalysisChart = ({ endDate: analysisMonth.minus({ month: 1 }).endOf('month'), } const consumptionService = new ConsumptionDataManager(client) - const monthTotalData = await consumptionService.getGraphData( + const monthTotalData = await consumptionService.getGraphData({ timePeriod, - TimeStep.MONTH, - fluidsWithData, - undefined, - undefined, - true - ) + timeStep: TimeStep.MONTH, + fluidTypes: fluidsWithData, + isHome: true, + }) if (monthTotalData?.actualData) { setDataLoadValueDetailArray(monthTotalData.actualData[0].valueDetail) setTotalLoadValue(monthTotalData.actualData[0].value) diff --git a/src/components/FluidChart/FluidChartSlide.tsx b/src/components/FluidChart/FluidChartSlide.tsx index 9a66f31ed68559e22efadc6a80a795e3a7ef0fc0..ddeff8b141c386f49e6125e27014f0d00fd59ba0 100644 --- a/src/components/FluidChart/FluidChartSlide.tsx +++ b/src/components/FluidChart/FluidChartSlide.tsx @@ -72,14 +72,14 @@ const FluidChartSlide = ({ const consumptionService = new ConsumptionService(client) const isMulti = fluidType === FluidType.MULTIFLUID const fluidTypeArray: FluidType[] = isMulti ? fluidTypes : [fluidType] - const graphData = await consumptionService.getGraphData( + const graphData = await consumptionService.getGraphData({ timePeriod, - currentTimeStep, - fluidTypeArray, + timeStep: currentTimeStep, + fluidTypes: fluidTypeArray, fluidStatus, compareTimePeriod, - isMulti - ) + isHome: isMulti, + }) if (subscribed && graphData && graphData?.actualData.length > 0) { setChartData(graphData) setIsDataLoaded(true) diff --git a/src/components/Options/ExportData/Modals/exportLoadingModal.tsx b/src/components/Options/ExportData/Modals/exportLoadingModal.tsx index f25b2e28cd389aa8e53eca6aa830f70f4979bf73..17925bfb12490ab521b6e0198ea04e9e40827a07 100644 --- a/src/components/Options/ExportData/Modals/exportLoadingModal.tsx +++ b/src/components/Options/ExportData/Modals/exportLoadingModal.tsx @@ -8,7 +8,7 @@ import { useI18n } from 'cozy-ui/transpiled/react/I18n' import Icon from 'cozy-ui/transpiled/react/Icon' import { FluidType, TimeStep } from 'enums' import FileSaver from 'file-saver' -import { Datachart, Dataload, TimePeriod } from 'models' +import { Dataload, TimePeriod } from 'models' import React, { useCallback, useEffect } from 'react' import ConsumptionDataManager from 'services/consumption.service' import EnedisMonthlyAnalysisDataService from 'services/enedisMonthlyAnalysisData.service' @@ -110,15 +110,13 @@ const ExportLoadingModal = ({ endDate: lastDataDate[0], } - const dataLoad: Datachart | null = await consumptionService.getGraphData( + const dataLoad = await consumptionService.getGraphData({ timePeriod, - TimeStep.MONTH, - [fluidType], - undefined, - undefined, - false, - true - ) + timeStep: TimeStep.MONTH, + fluidTypes: [fluidType], + isHome: false, + isExport: true, + }) if (!dataLoad?.actualData) return null diff --git a/src/components/Options/ReportOptions/ReportOptions.tsx b/src/components/Options/ReportOptions/ReportOptions.tsx index ab9bf280a489403943a040a97096087dce19943e..112aa1f30b4dc8cfc357545eac0643c9e875a28a 100644 --- a/src/components/Options/ReportOptions/ReportOptions.tsx +++ b/src/components/Options/ReportOptions/ReportOptions.tsx @@ -69,14 +69,12 @@ const ReportOptions = () => { endDate: DateTime.now(), } const consumptionService = new ConsumptionDataManager(client) - const lastSemesterMax = await consumptionService.getMaxLoad( - timePeriod, - TimeStep.DAY, - [FluidType.WATER], - undefined, - false, - true - ) + const lastSemesterMax = await consumptionService.getMaxLoad({ + maxTimePeriod: timePeriod, + timeStep: TimeStep.DAY, + fluidTypes: [FluidType.WATER], + withDate: true, + }) if (lastSemesterMax) { setLastSemesterMaxDay(lastSemesterMax as Dataload) } diff --git a/src/services/challenge.service.ts b/src/services/challenge.service.ts index 516c73913b2e54bea6e268f8df0a5c7f5678c349..9a12620f77cdaf7694d3c6a75921647f212d62a7 100644 --- a/src/services/challenge.service.ts +++ b/src/services/challenge.service.ts @@ -16,7 +16,6 @@ import { import { DateTime } from 'luxon' import { ChallengeEntity, - Datachart, Dataload, DuelEntity, Ecogesture, @@ -782,7 +781,6 @@ export default class ChallengeService { /** * Retrieve the dataload for a UserChallenge with duel ongoing * @param {UserChallenge} userChallenge - userChallenge to update - * @param {UserChallengeUpdateFlag} flag - update flag */ public async getUserChallengeDataload( userChallenge: UserChallenge @@ -795,14 +793,12 @@ export default class ChallengeService { day: userChallenge.duel.duration.days - 1, }), } - const dataChart: Datachart | null = await consumptionService.getGraphData( + const dataChart = await consumptionService.getGraphData({ timePeriod, - TimeStep.DAY, - userChallenge.duel.fluidTypes, - undefined, - undefined, - true - ) + timeStep: TimeStep.DAY, + fluidTypes: userChallenge.duel.fluidTypes, + isHome: true, + }) if (dataChart) { return dataChart.actualData } diff --git a/src/services/consumption.service.spec.ts b/src/services/consumption.service.spec.ts index 384bb583109386f398532a53f6942442259efcd8..149ae17033714183500eca4af8991f82b783df1a 100644 --- a/src/services/consumption.service.spec.ts +++ b/src/services/consumption.service.spec.ts @@ -21,6 +21,7 @@ import { fluidStatusConnectedData } from 'tests/__mocks__/fluidStatusData.mock' import { loadDayData } from 'tests/__mocks__/loadDayData.mock' import { allFluids } from 'utils/utils' import ConsumptionDataManager from './consumption.service' +import ConsumptionValidatorService from './consumptionValidator.service' const mockFetchFluidData = jest.fn() const mockFetchFluidMaxData = jest.fn() @@ -78,15 +79,15 @@ describe('Consumption service', () => { ] describe('getGraphData method', () => { - it('should return null', async () => { - const result = await consumptionDataManager.getGraphData( - mockTimePeriod, - TimeStep.DAY, - [], - [], - mockTimePeriodComparison, - false - ) + it('should return null because input is invalid', async () => { + const result = await consumptionDataManager.getGraphData({ + timePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, + fluidTypes: [], + fluidStatus: [], + compareTimePeriod: mockTimePeriodComparison, + isHome: false, + }) expect(result).toBeNull() }) it('should return a mapped data for one fluid', async () => { @@ -135,14 +136,14 @@ describe('Consumption service', () => { }, ], } - const result = await consumptionDataManager.getGraphData( - mockTimePeriod, - TimeStep.DAY, + const result = await consumptionDataManager.getGraphData({ + timePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, fluidTypes, fluidStatus, - mockTimePeriodComparison, - false - ) + compareTimePeriod: mockTimePeriodComparison, + isHome: false, + }) expect(result).toEqual(mockResult) }) @@ -211,14 +212,14 @@ describe('Consumption service', () => { }, ], } - const result = await consumptionDataManager.getGraphData( - mockTimePeriod, - TimeStep.DAY, - allFluids, + const result = await consumptionDataManager.getGraphData({ + timePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, + fluidTypes: allFluids, fluidStatus, - mockTimePeriodComparison, - true - ) + compareTimePeriod: mockTimePeriodComparison, + isHome: true, + }) expect(result).toEqual(mockResult) }) it('should return a mapped data for multi fluid without comparison date', async () => { @@ -253,41 +254,46 @@ describe('Consumption service', () => { ], comparisonData: [], } - mockFetchFluidData.mockResolvedValue(mockFetchDataActual) - const result = await consumptionDataManager.getGraphData( - mockTimePeriod, - TimeStep.DAY, - allFluids, - fluidStatus - ) + mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) + mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) + mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) + const result = await consumptionDataManager.getGraphData({ + timePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, + fluidTypes: allFluids, + fluidStatus, + }) expect(result).toEqual(mockResult) }) it('should return null because of wrong parameters', async () => { const fluidTypes = [FluidType.WATER] - const result = await consumptionDataManager.getGraphData( - mockTimePeriod, - TimeStep.HALF_AN_HOUR, + const result = await consumptionDataManager.getGraphData({ + timePeriod: mockTimePeriod, + timeStep: TimeStep.HALF_AN_HOUR, fluidTypes, fluidStatus, - mockTimePeriodComparison, - true - ) + compareTimePeriod: mockTimePeriodComparison, + isHome: true, + }) expect(result).toBeNull() }) - it('should return null because of timePeriod and comparaison', async () => { - const fluidTypes: FluidType[] = [FluidType.ELECTRICITY] + it('should return null when not matching both cases', async () => { + const fluidTypes: FluidType[] = [] const wrongTimePeriod = { startDate: DateTime.fromISO('2020-08-03T23:59:59.999Z'), endDate: DateTime.fromISO('2020-08-01T00:00:00.000Z'), } - const result = await consumptionDataManager.getGraphData( - wrongTimePeriod, - TimeStep.DAY, + jest + .spyOn(ConsumptionValidatorService.prototype, 'ValidateGetGraphData') + .mockReturnValueOnce(true) + const result = await consumptionDataManager.getGraphData({ + timePeriod: wrongTimePeriod, + timeStep: TimeStep.DAY, fluidTypes, fluidStatus, - mockTimePeriodComparison, - true - ) + compareTimePeriod: mockTimePeriodComparison, + isHome: false, + }) expect(result).toBeNull() }) }) @@ -300,30 +306,37 @@ describe('Consumption service', () => { mockFetchFluidData.mockResolvedValueOnce(mockFetchDataComparison) } const expectedResult = 84.44375099999999 - const result = await consumptionDataManager.getMaxLoad( - mockTimePeriod, - TimeStep.DAY, - allFluids, - mockTimePeriodComparison, - true - ) + const result = await consumptionDataManager.getMaxLoad({ + maxTimePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, + fluidTypes: allFluids, + compareMaxTimePeriod: mockTimePeriodComparison, + isHome: true, + }) expect(result).toEqual(expectedResult) }) it('should return the maxed value for a time period', async () => { const fluidTypes: FluidType[] = [FluidType.ELECTRICITY] const expectedResult = 63.1254 mockFetchFluidMaxData.mockResolvedValueOnce(expectedResult) - const result = await consumptionDataManager.getMaxLoad( - mockTimePeriod, - TimeStep.DAY, + const result = await consumptionDataManager.getMaxLoad({ + maxTimePeriod: mockTimePeriod, + timeStep: TimeStep.DAY, fluidTypes, - mockTimePeriodComparison, - false - ) + compareMaxTimePeriod: mockTimePeriodComparison, + }) expect(result).toEqual(expectedResult) }) }) + describe('getLastDataload method', () => { + it('should return the last dataload', async () => { + mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) + const result = await consumptionDataManager.getLastDataload(0) + expect(result).toEqual(mockFetchDataActual) + }) + }) + describe('getPerformanceIndicators method', () => { it('should return the performance indicator', async () => { mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts index d4a85f237fd957a1ed75d5c64605fd49a23432c3..343f99e4ca7b4d2c0cdee0f4b9ede449763090fb 100644 --- a/src/services/consumption.service.ts +++ b/src/services/consumption.service.ts @@ -45,25 +45,34 @@ export default class ConsumptionDataManager { } /** Get graph data according on timeStep and fluidType */ - public async getGraphData( - timePeriod: TimePeriod, - timeStep: TimeStep, - fluidTypes: FluidType[], - fluidStatus?: FluidStatus[], - compareTimePeriod?: TimePeriod, - isHome?: boolean, + public async getGraphData({ + timePeriod, + timeStep, + fluidTypes, + fluidStatus, + compareTimePeriod, + isHome, + isExport, + }: { + timePeriod: TimePeriod + timeStep: TimeStep + fluidTypes: FluidType[] + fluidStatus?: FluidStatus[] + compareTimePeriod?: TimePeriod + isHome?: boolean + /** bypass TimePeriodLength validation to be able to export more than 12 months of data */ isExport?: boolean - ): Promise<Datachart | null> { - const InputIsValid = this._consumptionValidatorService.ValidateGetGraphData( + }): Promise<Datachart | null> { + const isInputValid = this._consumptionValidatorService.ValidateGetGraphData( timePeriod, timeStep, fluidTypes, compareTimePeriod, isExport ) - if (!InputIsValid) return null + if (!isInputValid) return null if (fluidTypes.length === 1 && !isHome) { - const fluidType: FluidType = fluidTypes[0] + const fluidType = fluidTypes[0] const fetchedData = await this.fetchSingleFluidGraphData( timePeriod, timeStep, @@ -89,7 +98,6 @@ export default class ConsumptionDataManager { fluidType, compareTimePeriod ) - // formatting data const formattedData = this.formatGraphDataManager( fetchedData, timeStep, @@ -106,27 +114,33 @@ export default class ConsumptionDataManager { } const aggregatedData = this.aggregateGraphData(toBeAggregatedData) return aggregatedData - } else return null + } + return null } - public async getMaxLoad( - maxTimePeriod: TimePeriod, - timeStep: TimeStep, - fluidTypes: FluidType[], - compareMaxTimePeriod?: TimePeriod, - isHome?: boolean, + public async getMaxLoad({ + maxTimePeriod, + timeStep, + fluidTypes, + compareMaxTimePeriod, + isHome, + withDate, + }: { + maxTimePeriod: TimePeriod + timeStep: TimeStep + fluidTypes: FluidType[] + compareMaxTimePeriod?: TimePeriod + isHome?: boolean withDate?: boolean - ): Promise<number | null | Dataload> { - let allData + }): Promise<number | null | Dataload> { if (isHome) { - allData = await this.getGraphData( - maxTimePeriod, + const allData = await this.getGraphData({ + timePeriod: maxTimePeriod, timeStep, fluidTypes, - undefined, - compareMaxTimePeriod, - isHome - ) + compareTimePeriod: compareMaxTimePeriod, + isHome, + }) return allData?.actualData ? Math.max(...allData.actualData.map(d => d.value)) : 0 @@ -143,7 +157,7 @@ export default class ConsumptionDataManager { /** get last dataload available for a given fluid - return the daily data */ public async getLastDataload( - fluidTypes: FluidType + fluidType: FluidType ): Promise<Dataload[] | null> { const timePeriod = { startDate: DateTime.now().plus({ days: -3 }).startOf('day'), @@ -153,7 +167,7 @@ export default class ConsumptionDataManager { const data = await this._queryRunnerService.fetchFluidData( timePeriod, TimeStep.DAY, - fluidTypes + fluidType ) return data } @@ -166,13 +180,12 @@ export default class ConsumptionDataManager { ): Promise<PerformanceIndicator[]> { const performanceIndicators: PerformanceIndicator[] = [] for (const fluidType of fluidTypes) { - const graphData = await this.getGraphData( + const graphData = await this.getGraphData({ timePeriod, timeStep, - [fluidType], - undefined, - compareTimePeriod - ) + fluidTypes: [fluidType], + compareTimePeriod, + }) if (graphData) { const performanceIndicator: PerformanceIndicator = { diff --git a/src/services/consumptionValidator.service.spec.ts b/src/services/consumptionValidator.service.spec.ts index 819a9724a39ae7e4890842d11e10a988f28eb9c0..5f0558d47a67c008f871548c509925e074f5a7fa 100644 --- a/src/services/consumptionValidator.service.spec.ts +++ b/src/services/consumptionValidator.service.spec.ts @@ -11,7 +11,13 @@ const mockTimePeriodComparison: TimePeriod = { startDate: DateTime.fromISO('2020-09-01T00:00:00.000Z', { zone: 'utc' }), endDate: DateTime.fromISO('2020-09-03T23:59:59.999Z', { zone: 'utc' }), } -let allFluids: FluidType[] = [0, 1, 2] +const wrongTimePeriodComparison: TimePeriod = { + startDate: DateTime.fromISO('2020-09-05T00:00:00.000Z', { + zone: 'utc', + }), + endDate: DateTime.fromISO('2020-09-03T23:59:59.999Z', { zone: 'utc' }), +} +const allFluids: FluidType[] = [0, 1, 2] describe('ConsumptionFormatter service', () => { const consumptionValidatorService = new ConsumptionValidatorService() describe('ValidateGetGraphData method', () => { @@ -33,12 +39,6 @@ describe('ConsumptionFormatter service', () => { expect(result).toBeTruthy() }) it('should return false with comparison Date', () => { - const wrongTimePeriodComparison: TimePeriod = { - startDate: DateTime.fromISO('2020-09-05T00:00:00.000Z', { - zone: 'utc', - }), - endDate: DateTime.fromISO('2020-09-03T23:59:59.999Z', { zone: 'utc' }), - } const result = consumptionValidatorService.ValidateGetGraphData( mockTimePeriod, TimeStep.DAY, @@ -47,13 +47,16 @@ describe('ConsumptionFormatter service', () => { ) expect(result).toBeFalsy() }) + it('should return false with comparison Date and incompatible timeStep', () => { + const result = consumptionValidatorService.ValidateGetGraphData( + mockTimePeriod, + TimeStep.YEAR, + allFluids, + wrongTimePeriodComparison + ) + expect(result).toBeFalsy() + }) it('should return false with comparison Date for elec', () => { - const wrongTimePeriodComparison: TimePeriod = { - startDate: DateTime.fromISO('2020-09-05T00:00:00.000Z', { - zone: 'utc', - }), - endDate: DateTime.fromISO('2020-09-07T23:59:59.999Z', { zone: 'utc' }), - } const result = consumptionValidatorService.ValidateGetGraphData( mockTimePeriod, TimeStep.HALF_AN_HOUR, @@ -94,7 +97,7 @@ describe('ConsumptionFormatter service', () => { expect(result).toBeFalsy() }) it('should return false because of HALF_AN_HOUR and ValidateTimePeriodLength', () => { - allFluids = [0] // Only fluid without TimeStep incompatibilty + const fluids = [0] // Only fluid without TimeStep incompatibility const mockTimePeriodTooLong: TimePeriod = { startDate: DateTime.fromISO('2020-10-01T00:00:00.000Z', { zone: 'utc', @@ -104,7 +107,7 @@ describe('ConsumptionFormatter service', () => { const result = consumptionValidatorService.ValidateGetGraphData( mockTimePeriodTooLong, TimeStep.HALF_AN_HOUR, - allFluids + fluids ) expect(result).toBeFalsy() }) diff --git a/src/services/duel.service.ts b/src/services/duel.service.ts index f721543a6fe7ca02e60cf59567fc99eca63c69a9..1baa8a8cc48223e60d66def3f7075766c49df213 100644 --- a/src/services/duel.service.ts +++ b/src/services/duel.service.ts @@ -5,8 +5,6 @@ import { DUEL_DOCTYPE } from 'doctypes' import { FluidState, FluidType, TimeStep, UserDuelState } from 'enums' import { DateTime, Duration } from 'luxon' import { - Datachart, - Dataload, DuelEntity, FluidStatus, PerformanceIndicator, @@ -69,31 +67,28 @@ export default class DuelService { */ private async isPeriodComplete( period: TimePeriod, - fluidType: FluidType[], + fluidTypes: FluidType[], duration: Duration ): Promise<false | TimePeriod> { - const maxDiffperiod: Duration = Duration.fromObject({ - months: 6, - }) - const maxDiffperiodMilli: number = maxDiffperiod.as('milliseconds') + const maxDiffPeriod = Duration.fromObject({ months: 6 }) + const maxDiffPeriodMilli = maxDiffPeriod.as('milliseconds') let isComplete = true const newPeriod: TimePeriod = { startDate: period.startDate.minus(duration), endDate: period.endDate.minus(duration), } - let diffFromNow = newPeriod.endDate.diffNow().toObject().milliseconds - diffFromNow = diffFromNow ? Math.abs(diffFromNow) : 0 - const consumptionService = new ConsumptionService(this._client) - const dataLoad: Datachart | null = await consumptionService.getGraphData( - period, - TimeStep.DAY, - fluidType, - undefined, - undefined, - true + const diffFromNow = Math.abs( + newPeriod.endDate.diffNow().toObject().milliseconds || 0 ) + const consumptionService = new ConsumptionService(this._client) + const dataLoad = await consumptionService.getGraphData({ + timePeriod: period, + timeStep: TimeStep.DAY, + fluidTypes, + isHome: true, + }) if (dataLoad?.actualData) { - dataLoad.actualData.forEach((d: Dataload) => { + dataLoad.actualData.forEach(d => { if ( d.value === -1 || (d.valueDetail && @@ -102,21 +97,21 @@ export default class DuelService { isComplete = false }) } - if (diffFromNow && !isComplete && diffFromNow > maxDiffperiodMilli) + if (diffFromNow && !isComplete && diffFromNow > maxDiffPeriodMilli) return false return isComplete ? period - : await this.isPeriodComplete(newPeriod, fluidType, duration) + : await this.isPeriodComplete(newPeriod, fluidTypes, duration) } /** * Retrieve all duel entities from db */ public async getAllDuelEntities(): Promise<DuelEntity[]> { const query: QueryDefinition = Q(DUEL_DOCTYPE) - const { data: dueles }: QueryResult<DuelEntity[]> = + const { data: duels }: QueryResult<DuelEntity[]> = await this._client.query(query) - return dueles + return duels } /** diff --git a/src/services/quiz.service.spec.ts b/src/services/quiz.service.spec.ts index 7b891b8419ff4ca068327a52d776f8a3ed7000d0..72e49bae4769eb4f1a373ba368ba95faee325d6e 100644 --- a/src/services/quiz.service.spec.ts +++ b/src/services/quiz.service.spec.ts @@ -217,7 +217,7 @@ describe('Quiz service', () => { }) }) describe('getCustomQuestion Method', () => { - it('should return the customQuestion for date type without period - What day did I consumme the most on the last week ?', async () => { + it('should return the customQuestion for date type without period - What day did I consume the most on the last week ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) @@ -245,7 +245,7 @@ describe('Quiz service', () => { ]) expect(result).toEqual(expected) }) - it('should return the customQuestion for date type with period - What month did I consumme the most on year 2020 ?', async () => { + it('should return the customQuestion for date type with period - What month did I consume the most on year 2020 ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) @@ -272,7 +272,7 @@ describe('Quiz service', () => { ]) expect(result).toEqual(expected) }) - it('should return the customQuestion for maxload type without period - Which is your daily max consumption on the last week ?', async () => { + it('should return the customQuestion for max load type without period - Which is your daily max consumption on the last week ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) @@ -304,7 +304,7 @@ describe('Quiz service', () => { ]) expect(result).toEqual(expected) }) - it('should return the customQuestion for maxload type with period - Which is your daily max consumption on january 2020 ?', async () => { + it('should return the customQuestion for max load type with period - Which is your daily max consumption on January 2020 ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) @@ -335,18 +335,6 @@ describe('Quiz service', () => { const result = await quizService.getCustomQuestion(mockCustomQuestion, [ FluidType.ELECTRICITY, ]) - expect(mockGetMaxLoad).toHaveBeenCalledWith( - { - startDate: DateTime.fromObject({ month: 1, year: 2020 }).startOf( - 'month' - ), - endDate: DateTime.fromObject({ month: 1, year: 2020 }).endOf('month'), - }, - TimeStep.DAY, - [FluidType.ELECTRICITY], - undefined, - true - ) expect(result).toEqual(expected) }) it('should return the customQuestion for average type without period - Which is your daily average consumption on the last week ?', async () => { @@ -413,20 +401,9 @@ describe('Quiz service', () => { const result = await quizService.getCustomQuestion(mockCustomQuestion, [ FluidType.ELECTRICITY, ]) - expect(mockGetGraphData).toHaveBeenCalledWith( - { - startDate: DateTime.fromObject({ year: 2020 }).startOf('year'), - endDate: DateTime.fromObject({ year: 2020 }).endOf('year'), - }, - TimeStep.MONTH, - [FluidType.ELECTRICITY], - undefined, - undefined, - true - ) expect(result).toEqual(expected) }) - it('should return the customQuestion for average type with weekday period - Which is your monthly average consumption on wednesday ?', async () => { + it('should return the customQuestion for average type with weekday period - Which is your monthly average consumption on Wednesday ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) @@ -460,7 +437,7 @@ describe('Quiz service', () => { ]) expect(result).toEqual(expected) }) - it('should return the customQuestion for average type with weekday period and singleFluid - Which is your monthly average consumption of #fluid in #unit on wednesday ?', async () => { + it('should return the customQuestion for average type with weekday period and singleFluid - Which is your monthly average consumption of #fluid in #unit on Wednesday ?', async () => { localSpy.mockReturnValue( DateTime.fromISO('2020-10-03T00:00:00.000Z', { zone: 'utc' }) ) diff --git a/src/services/quiz.service.ts b/src/services/quiz.service.ts index 4e4c0ea895670fd0c1c07dcd2eabc9279603d1dc..d4ab41d504a1aaafebe4bb092019563901ed0c5d 100644 --- a/src/services/quiz.service.ts +++ b/src/services/quiz.service.ts @@ -295,26 +295,25 @@ export default class QuizService { } if (customQuestionEntity.type === CustomQuestionType.DATE) { // Interval - const intervalAsnwer = await this.getMaxLoadOnLastInterval( + const intervalAnswer = await this.getMaxLoadOnLastInterval( customQuestionEntity.timeStep, finalInterval, useFluidTypes ) answers = this.getAnswersForInterval( - intervalAsnwer.date, + intervalAnswer.date, customQuestionEntity.timeStep, finalInterval ) } else if (customQuestionEntity.type === CustomQuestionType.MAXDATA) { // Max data const consumptionService = new ConsumptionDataManager(this._client) - let maxLoad = await consumptionService.getMaxLoad( - finalInterval, - customQuestionEntity.timeStep, - useFluidTypes, - undefined, - !customQuestionEntity.singleFluid - ) + let maxLoad = await consumptionService.getMaxLoad({ + maxTimePeriod: finalInterval, + timeStep: customQuestionEntity.timeStep, + fluidTypes: useFluidTypes, + isHome: !customQuestionEntity.singleFluid, + }) maxLoad = maxLoad === null ? 0 : maxLoad answers = this.getAnswersForNumberValue(maxLoad as number, unit) } else { @@ -393,7 +392,7 @@ export default class QuizService { private async getMaxLoadOnLastInterval( timeStep: TimeStep, interval: TimePeriod, - fluidType: FluidType[] + fluidTypes: FluidType[] ): Promise<IntervalAnswer> { let dateMax: DateTime = DateTime.local().setZone('utc', { keepLocalTime: true, @@ -401,11 +400,11 @@ export default class QuizService { let max = 0 const consumptionService = new ConsumptionDataManager(this._client) const limit = { date: interval.startDate, reached: false } - let graphData = await consumptionService.getGraphData( - interval, + let graphData = await consumptionService.getGraphData({ + timePeriod: interval, timeStep, - fluidType - ) + fluidTypes, + }) if (graphData?.actualData) { max = Math.max(...graphData.actualData.map(d => d.value)) @@ -426,11 +425,11 @@ export default class QuizService { newInterval.startDate = newInterval.startDate.minus(objectTimeStep) newInterval.endDate = newInterval.endDate.minus(objectTimeStep) limit.date = newInterval.startDate - graphData = await consumptionService.getGraphData( - newInterval, + graphData = await consumptionService.getGraphData({ + timePeriod: newInterval, timeStep, - fluidType - ) + fluidTypes: fluidTypes, + }) if (limit.date < DateTime.now().minus({ year: 5 })) { limit.reached = true @@ -454,11 +453,11 @@ export default class QuizService { }) .startOf('month'), } - graphData = await consumptionService.getGraphData( - newInterval, + graphData = await consumptionService.getGraphData({ + timePeriod: newInterval, timeStep, - fluidType - ) + fluidTypes: fluidTypes, + }) } if (graphData?.actualData) { max = Math.max(...graphData.actualData.map(d => d.value)) @@ -477,20 +476,18 @@ export default class QuizService { private async getAverageOnGivenPeriod( timeStep: TimeStep, interval: TimePeriod, - fluidType: FluidType[], + fluidTypes: FluidType[], weekday: number | undefined, singleFluid: boolean ): Promise<number> { const consumptionService = new ConsumptionDataManager(this._client) - logApp.info('GetAverageOnGivenPeriod is about to call getgraphdata') - const graphData = await consumptionService.getGraphData( - interval, + logApp.info('GetAverageOnGivenPeriod is about to call getGraphData') + const graphData = await consumptionService.getGraphData({ + timePeriod: interval, timeStep, - fluidType, - undefined, - undefined, - !singleFluid - ) + fluidTypes, + isHome: !singleFluid, + }) let average = 0 if (graphData?.actualData) { let total = 0 diff --git a/src/targets/services/aggregatorUsageEvents.ts b/src/targets/services/aggregatorUsageEvents.ts index 36beffe25a1f122a126fba16ff2bdab6f2dd8120..1ae6a70fe449ab7404249e68bd44b4e80770a35f 100644 --- a/src/targets/services/aggregatorUsageEvents.ts +++ b/src/targets/services/aggregatorUsageEvents.ts @@ -231,7 +231,7 @@ const buildProfileWithFluidType = async ( const getConsumptionValue = async ( client: Client, - fluidType: FluidType[] + fluidTypes: FluidType[] ): Promise<PerformanceIndicator[]> => { const consumptionService = new ConsumptionService(client) const analysisDate = DateTime.local().setZone('utc', { keepLocalTime: true }) @@ -249,7 +249,7 @@ const getConsumptionValue = async ( await consumptionService.getPerformanceIndicators( periods.timePeriod, TimeStep.MONTH, - fluidType, + fluidTypes, periods.comparisonTimePeriod ) return fetchedPerformanceIndicators diff --git a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts index 84b034a1e87c1b557436d2f4195e8e1a6aeb39a8..26efc1fad06e2c02c3dcf3e16e1e90edface5b08 100644 --- a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts +++ b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts @@ -136,9 +136,11 @@ const getEnedisMonthAnalysisData = async ( endDate: DateTime.fromObject({ month: month, year: year }).endOf('month'), } const cs = new ConsumptionService(client) - const data = await cs.getGraphData(timePeriod, TimeStep.DAY, [ - FluidType.ELECTRICITY, - ]) + const data = await cs.getGraphData({ + timePeriod, + timeStep: TimeStep.DAY, + fluidTypes: [FluidType.ELECTRICITY], + }) const monthlyAveragesLoads: EnedisMonthlyAnalysisData = { weekDaysHalfHourAverageValues: [], weekEndDaysHalfHourAverageValues: [], @@ -160,11 +162,11 @@ const getEnedisMonthAnalysisData = async ( } // for each day, we get its halfHour DataChart // so we get 48 entries per day - const halfHourDayData = await cs.getGraphData( + const halfHourDayData = await cs.getGraphData({ timePeriod, - TimeStep.HALF_AN_HOUR, - [FluidType.ELECTRICITY] - ) + timeStep: TimeStep.HALF_AN_HOUR, + fluidTypes: [FluidType.ELECTRICITY], + }) if (halfHourDayData) { populateArrayWithTotalData(weekEndValuesArray, halfHourDayData, true) populateArrayWithTotalData(weekValuesArray, halfHourDayData, false) diff --git a/src/targets/services/monthlyReportNotification.ts b/src/targets/services/monthlyReportNotification.ts index 7cb75e4a4ff03ac4b9924b6f562f91e57069fd7b..88f342166509782bb7ab4207adb682032593d0f2 100644 --- a/src/targets/services/monthlyReportNotification.ts +++ b/src/targets/services/monthlyReportNotification.ts @@ -24,11 +24,11 @@ interface MonthlyReportNotificationProps { /** * Get consumption value for all fluid if exist - * @param fluidType - FluidType + * @param fluidTypes - FluidType */ const getConsumptionValue = async ( client: Client, - fluidType: FluidType[], + fluidTypes: FluidType[], period: 'month' | 'year' ): Promise<PerformanceIndicator[]> => { const consumptionService = new ConsumptionService(client) @@ -48,7 +48,7 @@ const getConsumptionValue = async ( return consumptionService.getPerformanceIndicators( timePeriod, TimeStep.MONTH, - fluidType, + fluidTypes, comparisonTimePeriod ) }