• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-client-gateway / 24403590962

14 Apr 2026 08:52AM UTC coverage: 90.038% (+0.5%) from 89.502%
24403590962

push

github

vseehausen
ci(observability): enable datadog test visibility in ci

3236 of 4031 branches covered (80.28%)

Branch coverage included in aggregate %.

15238 of 16487 relevant lines covered (92.42%)

610.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.38
/src/__tests__/testing-module.ts
1
// SPDX-License-Identifier: FSL-1.1-MIT
2
import { Test, type TestingModule } from '@nestjs/testing';
98✔
3
import { AppModule } from '@/app.module';
98✔
4
import configuration from '@/config/entities/__tests__/configuration';
98✔
5
import { CacheModule } from '@/datasources/cache/cache.module';
98✔
6
import { TestCacheModule } from '@/datasources/cache/__tests__/test.cache.module';
98✔
7
import { RequestScopedLoggingModule } from '@/logging/logging.module';
98✔
8
import { TestLoggingModule } from '@/logging/__tests__/test.logging.module';
98✔
9
import { NetworkModule } from '@/datasources/network/network.module';
98✔
10
import { TestNetworkModule } from '@/datasources/network/__tests__/test.network.module';
98✔
11
import { QueuesApiModule } from '@/modules/queues/datasources/queues-api.module';
98✔
12
import { TestQueuesApiModule } from '@/modules/queues/datasources/__tests__/test.queues-api.module';
98✔
13
import { PostgresDatabaseModule } from '@/datasources/db/v1/postgres-database.module';
98✔
14
import { TestPostgresDatabaseModule } from '@/datasources/db/__tests__/test.postgres-database.module';
98✔
15
import { PostgresDatabaseModuleV2 } from '@/datasources/db/v2/postgres-database.module';
98✔
16
import { TestPostgresDatabaseModuleV2 } from '@/datasources/db/v2/test.postgres-database.module';
98✔
17
import { TargetedMessagingDatasourceModule } from '@/modules/targeted-messaging/datasources/targeted-messaging.datasource.module';
98✔
18
import { TestTargetedMessagingDatasourceModule } from '@/modules/targeted-messaging/datasources/__tests__/test.targeted-messaging.datasource.module';
98✔
19
import type { ModuleDefinition } from '@nestjs/core/interfaces/module-definition.interface';
20
import { CacheKeyPrefix } from '@/datasources/cache/constants';
98✔
21
import type { Provider } from '@nestjs/common';
22
import { CsvExportModule } from '@/modules/csv-export/csv-export.module';
98✔
23
import { TestCsvExportModule } from '@/modules/csv-export/v1/__tests__/test.csv-export.module';
98✔
24
import { PushNotificationModule } from '@/modules/notifications/domain/push/push-notification.module';
98✔
25
import { TestPushNotificationModule } from '@/modules/notifications/domain/push/__tests__/test.push-notification.module';
98✔
26
import { TxAuthNetworkModule } from '@/datasources/network/tx-auth.network.module';
98✔
27
import { TestTxAuthNetworkModule } from '@/datasources/network/__tests__/test.tx-auth.network.module';
98✔
28
import { BlocklistModule } from '@/config/entities/blocklist.module';
98✔
29
import { TestBlocklistModule } from '@/config/entities/__tests__/test.blocklist.module';
98✔
30

31
export interface CreateBaseTestModuleOptions {
32
  config?: typeof configuration;
33
  overridePostgresV2?: boolean;
34
  cacheKeyPrefix?: string;
35
  modules?: Array<ModuleOverride>;
36
  providers?: Array<Provider>;
37
  guards?: Array<GuardOverride>;
38
}
39

40
export interface ModuleOverride {
41
  originalModule: ModuleDefinition;
42
  testModule: ModuleDefinition;
43
}
44

45
export interface GuardOverride {
46
  originalGuard: unknown;
47
  testGuard: unknown;
48
}
49

50
export async function createTestModule(
98✔
51
  options: CreateBaseTestModuleOptions = {},
126✔
52
): Promise<TestingModule> {
53
  const {
54
    config,
55
    cacheKeyPrefix,
56
    overridePostgresV2,
57
    modules: additionalOverrides = [],
727✔
58
    guards: guards = [],
883✔
59
    providers = [],
788✔
60
  } = options;
1,766✔
61

62
  return createBaseTestModule({
1,766✔
63
    config,
64
    overridePostgresV2,
65
    cacheKeyPrefix,
66
    guards,
67
    providers,
68
    modules: [
69
      {
70
        originalModule: BlocklistModule,
71
        testModule: TestBlocklistModule,
72
      },
73
      {
74
        originalModule: CacheModule,
75
        testModule: TestCacheModule,
76
      },
77
      {
78
        originalModule: RequestScopedLoggingModule,
79
        testModule: TestLoggingModule,
80
      },
81
      {
82
        originalModule: NetworkModule,
83
        testModule: TestNetworkModule,
84
      },
85
      {
86
        originalModule: TxAuthNetworkModule,
87
        testModule: TestTxAuthNetworkModule,
88
      },
89
      ...additionalOverrides,
90
    ],
91
  });
92
}
93

94
export async function createBaseTestModule(
98✔
95
  options: CreateBaseTestModuleOptions = {},
×
96
): Promise<TestingModule> {
97
  const {
98
    config = configuration,
165✔
99
    overridePostgresV2 = true, // Enable Postgres V2 by default
878✔
100
    cacheKeyPrefix = crypto.randomUUID(),
883✔
101
    modules: additionalOverrides = [],
×
102
    guards: guards = [],
×
103
    providers = [],
×
104
  } = options;
1,766✔
105

106
  const moduleBuilder = Test.createTestingModule({
1,766✔
107
    imports: [AppModule.register(config)],
108
    providers: providers,
109
  })
110
    .overrideProvider(CacheKeyPrefix)
111
    .useValue(cacheKeyPrefix)
112
    .overrideModule(PostgresDatabaseModule)
113
    .useModule(TestPostgresDatabaseModule)
114
    .overrideModule(TargetedMessagingDatasourceModule)
115
    .useModule(TestTargetedMessagingDatasourceModule)
116
    .overrideModule(QueuesApiModule)
117
    .useModule(TestQueuesApiModule)
118
    .overrideModule(CsvExportModule)
119
    .useModule(TestCsvExportModule)
120
    .overrideModule(PushNotificationModule)
121
    .useModule(TestPushNotificationModule);
122

123
  if (overridePostgresV2) {
1,766✔
124
    moduleBuilder
1,756✔
125
      .overrideModule(PostgresDatabaseModuleV2)
126
      .useModule(TestPostgresDatabaseModuleV2);
127
  }
128

129
  for (const guard of guards) {
1,766✔
130
    moduleBuilder.overrideGuard(guard.originalGuard).useValue(guard.testGuard);
×
131
  }
132

133
  // Apply additional overrides
134
  for (const override of additionalOverrides) {
1,766✔
135
    moduleBuilder
9,294✔
136
      .overrideModule(override.originalModule)
137
      .useModule(override.testModule);
138
  }
139

140
  return moduleBuilder.compile();
1,766✔
141
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc