diff --git a/packages/cli/src/databases/repositories/usageMetrics.repository.ts b/packages/cli/src/databases/repositories/usageMetrics.repository.ts index c7cd36ed9b533..23f9ef34dc3dd 100644 --- a/packages/cli/src/databases/repositories/usageMetrics.repository.ts +++ b/packages/cli/src/databases/repositories/usageMetrics.repository.ts @@ -61,7 +61,7 @@ export class UsageMetricsRepository extends Repository { `)) as Row[]; const toNumber = (value: string | number) => - typeof value === 'number' ? value : parseInt(value, 10); + (typeof value === 'number' ? value : parseInt(value, 10)) || 0; return { enabledUsers: toNumber(enabledUsers), diff --git a/packages/cli/test/integration/usageMetrics.repository.test.ts b/packages/cli/test/integration/usageMetrics.repository.test.ts index 602536f12a5d9..4ecb53a3faf63 100644 --- a/packages/cli/test/integration/usageMetrics.repository.test.ts +++ b/packages/cli/test/integration/usageMetrics.repository.test.ts @@ -2,27 +2,24 @@ import { UsageMetricsRepository } from '@/databases/repositories/usageMetrics.re import { createAdmin, createMember, createOwner, createUser } from './shared/db/users'; import * as testDb from './shared/testDb'; import Container from 'typedi'; -import { CredentialsRepository } from '@/databases/repositories/credentials.repository'; import { createManyWorkflows } from './shared/db/workflows'; import { createManyCredentials } from './shared/db/credentials'; import { WorkflowStatisticsRepository } from '@/databases/repositories/workflowStatistics.repository'; import { StatisticsNames } from '@/databases/entities/WorkflowStatistics'; -import { WorkflowRepository } from '@/databases/repositories/workflow.repository'; describe('UsageMetricsRepository', () => { let usageMetricsRepository: UsageMetricsRepository; - let credentialsRepository: CredentialsRepository; let workflowStatisticsRepository: WorkflowStatisticsRepository; - let workflowRepository: WorkflowRepository; beforeAll(async () => { await testDb.init(); usageMetricsRepository = Container.get(UsageMetricsRepository); - credentialsRepository = Container.get(CredentialsRepository); + workflowStatisticsRepository = Container.get(WorkflowStatisticsRepository); - workflowRepository = Container.get(WorkflowRepository); + }); + beforeEach(async () => { await testDb.truncate(['User', 'Credentials', 'Workflow', 'Execution', 'WorkflowStatistics']); }); @@ -74,5 +71,20 @@ describe('UsageMetricsRepository', () => { manualExecutions: 2, }); }); + + test('should handle zero execution statistics correctly', async () => { + await Promise.all([createOwner(), createManyWorkflows(3, { active: true })]); + + const metrics = await usageMetricsRepository.getLicenseRenewalMetrics(); + + expect(metrics).toStrictEqual({ + enabledUsers: 1, + totalCredentials: 0, + totalWorkflows: 3, + activeWorkflows: 3, + productionExecutions: 0, // not NaN + manualExecutions: 0, // not NaN + }); + }); }); });