From 1f7a5a32e5584135b196feb9a347dc1a6df77112 Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Tue, 8 Oct 2024 14:49:09 +0000 Subject: [PATCH] chore(lint): enable more rules & fix exhaustive switch cases --- .eslintrc.js | 6 +++++ src/components/FluidChart/FluidChart.tsx | 2 ++ src/components/Loader/Loader.tsx | 25 +++++++++++-------- .../PartnerIssue/PartnerIssueModal.tsx | 16 +++--------- src/migrations/migration.ts | 2 ++ src/services/queryRunner.service.ts | 2 ++ src/services/quiz.service.ts | 4 +++ src/utils/utils.spec.ts | 16 ++++++++++++ src/utils/utils.ts | 13 ++++++++++ 9 files changed, 64 insertions(+), 22 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e4f98e3f8..de9c35b0a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,6 +31,12 @@ module.exports = { '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/default-param-last': 'error', + '@typescript-eslint/prefer-for-of': 'warn', + '@typescript-eslint/prefer-includes': 'error', + '@typescript-eslint/prefer-string-starts-ends-with': 'error', + '@typescript-eslint/switch-exhaustiveness-check': 'error', + // causes a build error and has a lot of effects on components '@typescript-eslint/prefer-nullish-coalescing': 'off', diff --git a/src/components/FluidChart/FluidChart.tsx b/src/components/FluidChart/FluidChart.tsx index 1f8002966..50da25f22 100644 --- a/src/components/FluidChart/FluidChart.tsx +++ b/src/components/FluidChart/FluidChart.tsx @@ -112,6 +112,8 @@ const FluidChart = ({ fluidType }: { fluidType: FluidType }) => { case FluidType.WATER: dispatch(setShowOfflineData(false)) break + default: + throw new Error('Unexpected fluid type') } } diff --git a/src/components/Loader/Loader.tsx b/src/components/Loader/Loader.tsx index 2b9a41a68..b39445ec6 100644 --- a/src/components/Loader/Loader.tsx +++ b/src/components/Loader/Loader.tsx @@ -18,16 +18,21 @@ const Loader = ({ color = 'gold', fluidType, text }: LoaderProps) => { const { t } = useI18n() let variant = color - switch (fluidType) { - case FluidType.ELECTRICITY: - variant = 'elec' - break - case FluidType.GAS: - variant = 'gaz' - break - case FluidType.WATER: - variant = 'water' - break + if (fluidType !== undefined) { + switch (fluidType) { + case FluidType.ELECTRICITY: + variant = 'elec' + break + case FluidType.GAS: + variant = 'gaz' + break + case FluidType.WATER: + variant = 'water' + break + case FluidType.MULTIFLUID: + variant = 'gold' + break + } } return ( diff --git a/src/components/PartnerIssue/PartnerIssueModal.tsx b/src/components/PartnerIssue/PartnerIssueModal.tsx index 3d8540225..1e295b293 100644 --- a/src/components/PartnerIssue/PartnerIssueModal.tsx +++ b/src/components/PartnerIssue/PartnerIssueModal.tsx @@ -7,6 +7,7 @@ import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton' import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n' import { FluidType } from 'enums' import React from 'react' +import { getFluidLabel } from 'utils/utils' import './partnerIssueModal.scss' interface PartnerIssueModalProps { @@ -22,17 +23,6 @@ const PartnerIssueModal = ({ }: PartnerIssueModalProps) => { const { t } = useI18n() - const getFluidTypeLabel = () => { - switch (issuedFluid) { - case FluidType.ELECTRICITY: - return 'elec' - case FluidType.WATER: - return 'water' - case FluidType.GAS: - return 'gaz' - } - } - return ( <Dialog open={open} @@ -66,7 +56,9 @@ const PartnerIssueModal = ({ className="partner-issue-content text-16-normal" dangerouslySetInnerHTML={{ __html: t( - `consumption.partner_issue_modal.error_connect_${getFluidTypeLabel()}` + `consumption.partner_issue_modal.error_connect_${getFluidLabel( + issuedFluid + )}` ), }} /> diff --git a/src/migrations/migration.ts b/src/migrations/migration.ts index e79d15e30..0e0dea00c 100644 --- a/src/migrations/migration.ts +++ b/src/migrations/migration.ts @@ -167,6 +167,8 @@ export async function migrate( } switch (result.type) { + case MIGRATION_RESULT_FAILED: + throw new Error('Migration failed') case MIGRATION_RESULT_NOOP: case MIGRATION_RESULT_COMPLETE: await updateSchemaVersion(_client, migration.targetSchemaVersion) diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts index 441f4a27a..efd0abdeb 100644 --- a/src/services/queryRunner.service.ts +++ b/src/services/queryRunner.service.ts @@ -250,6 +250,8 @@ export default class QueryRunner { }, } break + case TimeStep.HOUR: + throw new Error('Unexpected time step') } return predicate } diff --git a/src/services/quiz.service.ts b/src/services/quiz.service.ts index 6dac376e5..cde3563d4 100644 --- a/src/services/quiz.service.ts +++ b/src/services/quiz.service.ts @@ -347,6 +347,10 @@ export default class QuizService { let endTime = today const isPeriod = Object.keys(period).length !== 0 switch (interval) { + case TimeStep.HALF_AN_HOUR: + case TimeStep.HOUR: + case TimeStep.DAY: + throw new Error('Unexpected time step') case TimeStep.WEEK: startTime = isPeriod ? DateTime.fromObject(period).startOf('week') diff --git a/src/utils/utils.spec.ts b/src/utils/utils.spec.ts index 64a349dda..6bd4fe0f0 100644 --- a/src/utils/utils.spec.ts +++ b/src/utils/utils.spec.ts @@ -13,6 +13,7 @@ import { formatOffPeakHours, formatTwoDigits, getChallengeTitleWithLineReturn, + getFluidLabel, getFluidName, getFluidTypeTranslation, getFluidUnit, @@ -262,6 +263,21 @@ describe('utils test', () => { }) }) + describe('getFluidLabel', () => { + it('should return elec', () => { + expect(getFluidLabel(FluidType.ELECTRICITY)).toBe('elec') + }) + it('should return gas', () => { + expect(getFluidLabel(FluidType.GAS)).toBe('gaz') + }) + it('should return water', () => { + expect(getFluidLabel(FluidType.WATER)).toBe('water') + }) + it('should return multi', () => { + expect(getFluidLabel(FluidType.MULTIFLUID)).toBe('multi') + }) + }) + describe('formatListWithAnd', () => { it('should return empty string', () => { expect(formatListWithAnd([])).toBe('') diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 10ce560ca..a2336f765 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -64,6 +64,19 @@ export const getPartnerKey = (fluidType: FluidType) => { } } +export const getFluidLabel = (fluidType: FluidType) => { + switch (fluidType) { + case FluidType.ELECTRICITY: + return 'elec' + case FluidType.GAS: + return 'gaz' + case FluidType.WATER: + return 'water' + case FluidType.MULTIFLUID: + return 'multi' + } +} + export function getKonnectorUpdateError(type: string) { switch (type.toUpperCase()) { case 'USER_ACTION_NEEDED.OAUTH_OUTDATED': -- GitLab