diff --git a/.eslintrc.js b/.eslintrc.js index e4f98e3f85ee456e7f9ef51c9f4b6b5befbc403c..de9c35b0a34109c8eb80937313cafa7cbf943d24 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 1f80029664e3e6c673aa235ed04c58c0fe716fdb..50da25f22e63e16d1815f4aa8ce3d8d3040abca1 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 2b9a41a680d94b53c83d4e60acfbeda66abd24aa..b39445ec6c3fd1bfa706a883d776e3b2fb7cf396 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 3d8540225226727f34f872c2ea8829b4931d9781..1e295b2933607f0d70748e704890e4809d7e4506 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 e79d15e3084d57328d0c3a83012b4e384a3c3d9e..0e0dea00ca76941f03ae901e8ed4c7d890b71030 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 441f4a27a6dbc261c6312ffaca3078597bcfe3b1..efd0abdeb3f53c2d24da9202c395a269a43e8a59 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 6dac376e5b60fed7502cb3afa8b1003505b52916..cde3563d4bdb3933e542bce3c37a1b666864a2dd 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 64a349dda2822c6df7a4267da875e6e07b63e964..6bd4fe0f095a1e5ceb2a332f9d3c5513b9b6a2c6 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 10ce560cae3060bf92779a22a43b95abe905a9a8..a2336f765e407f8bdcf6fa63a50f70a6ecf6f6cd 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':