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

safe-global / safe-client-gateway / 20091945613

10 Dec 2025 08:19AM UTC coverage: 89.03% (-1.2%) from 90.212%
20091945613

push

github

web-flow
refactor(cache): change Zerion cache keys to be per address only (#2839)

* refactor(cache): change Zerion cache keys to be per address only

Remove chainId from Zerion cache keys for balances, collectibles, and positions.
This changes the caching strategy from per-chain-per-address to per-address only,
allowing data to be shared across chains for the same address.

Cache key changes:
- Before: {chainId}_zerion_balances_{safeAddress}
- After: zerion_balances_{safeAddress}

Similar changes applied to positions and collectibles cache keys.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Prettier

* refactor: remove unused chainId parameter from clear methods

Remove chainId parameter from clearBalances and clearCollectibles methods
in IBalancesApi interface and implementations. After the refactoring to
per-address cache keys, chainId is no longer needed by the API methods:

- ZerionBalancesApi uses address-only cache keys
- SafeBalancesApi uses its instance chainId variable

The repositories still accept chainId (needed to select the correct API)
but no longer pass it to the clear methods.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Fix tests: Separate unit tests from integration/e2e tests

- Renamed tests requiring real infrastructure (.spec.ts -> .integration.spec.ts or .e2e-spec.ts)
- Updated package.json Jest config to exclude integration and e2e tests from default 'yarn test' run
- Tests requiring Redis, Postgres, or full app bootstrap are now properly categorized
- All 308 unit test suites now pass without requiring external services

Renamed files:
- Redis cache service test -> integration test
- Postgres database module tests (v1 & v2) -> integration tests
- Postgres database service test -> integration test
- Auth decorator test -> e2e test
- Spaces-related controller tests -> e2e tests
- ... (continued)

2835 of 3551 branches covered (79.84%)

Branch coverage included in aggregate %.

4 of 8 new or added lines in 5 files covered. (50.0%)

199 existing lines in 34 files now uncovered.

13616 of 14927 relevant lines covered (91.22%)

564.15 hits per line

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

96.3
/src/modules/spaces/spaces.module.ts
1
import { AuthModule } from '@/modules/auth/auth.module';
92✔
2
import { UsersModule } from '@/modules/users/users.module';
92✔
3
import { PostgresDatabaseModuleV2 } from '@/datasources/db/v2/postgres-database.module';
92✔
4
import { SpaceSafe } from '@/modules/spaces/datasources/entities/space-safes.entity.db';
92✔
5
import { Space } from '@/modules/spaces/datasources/entities/space.entity.db';
92✔
6
import { Member } from '@/modules/users/datasources/entities/member.entity.db';
92✔
7
import { AddressBookItem } from '@/modules/spaces/datasources/entities/address-book-item.entity.db';
92✔
8
import { SpaceSafesRepository } from '@/modules/spaces/domain/space-safes.repository';
92✔
9
import { ISpaceSafesRepository } from '@/modules/spaces/domain/space-safes.repository.interface';
92✔
10
import { SpacesRepository } from '@/modules/spaces/domain/spaces.repository';
92✔
11
import { ISpacesRepository } from '@/modules/spaces/domain/spaces.repository.interface';
92✔
12
import { AddressBookItemsRepository } from '@/modules/spaces/domain/address-books/address-book-items.repository';
92✔
13
import { IAddressBookItemsRepository } from '@/modules/spaces/domain/address-books/address-book-items.repository.interface';
92✔
14
import { WalletsRepository } from '@/modules/wallets/domain/wallets.repository';
92✔
15
import { IWalletsRepository } from '@/modules/wallets/domain/wallets.repository.interface';
92✔
16
import { AddressBooksController } from '@/modules/spaces/routes/address-books.controller';
92✔
17
import { AddressBooksService } from '@/modules/spaces/routes/address-books.service';
92✔
18
import { SpaceSafesController } from '@/modules/spaces/routes/space-safes.controller';
92✔
19
import { SpaceSafesService } from '@/modules/spaces/routes/space-safes.service';
92✔
20
import { SpacesController } from '@/modules/spaces/routes/spaces.controller';
92✔
21
import { SpacesService } from '@/modules/spaces/routes/spaces.service';
92✔
22
import { MembersController } from '@/modules/spaces/routes/members.controller';
92✔
23
import { MembersService } from '@/modules/spaces/routes/members.service';
92✔
24
import { Module, forwardRef } from '@nestjs/common';
92✔
25
import { TypeOrmModule } from '@nestjs/typeorm';
92✔
26

27
@Module({
28
  imports: [
29
    PostgresDatabaseModuleV2,
30
    TypeOrmModule.forFeature([Space, SpaceSafe, Member, AddressBookItem]),
31
    AuthModule,
UNCOV
32
    forwardRef(() => UsersModule),
×
33
  ],
34
  controllers: [
35
    AddressBooksController,
36
    SpacesController,
37
    SpaceSafesController,
38
    MembersController,
39
  ],
40
  providers: [
41
    AddressBooksService,
42
    SpacesService,
43
    SpaceSafesService,
44
    MembersService,
45
    {
46
      provide: ISpacesRepository,
47
      useClass: SpacesRepository,
48
    },
49
    {
50
      provide: ISpaceSafesRepository,
51
      useClass: SpaceSafesRepository,
52
    },
53
    {
54
      provide: IAddressBookItemsRepository,
55
      useClass: AddressBookItemsRepository,
56
    },
57
    {
58
      provide: IWalletsRepository,
59
      useClass: WalletsRepository,
60
    },
61
  ],
62
  exports: [
63
    ISpacesRepository,
64
    ISpaceSafesRepository,
65
    IAddressBookItemsRepository,
66
  ],
67
})
68
export class SpacesModule {}
92✔
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