@volontariapp/domain-user 2.3.5-snap-7ff4433 → 2.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +0 -2
  2. package/dist/entities/user.entity.d.ts +1 -3
  3. package/dist/entities/user.entity.d.ts.map +1 -1
  4. package/dist/entities/user.entity.js +0 -41
  5. package/dist/entities/user.entity.js.map +1 -1
  6. package/dist/models/user.model.js +3 -3
  7. package/dist/models/user.model.js.map +1 -1
  8. package/package.json +4 -16
  9. package/dist/models/mapper.d.ts +0 -2
  10. package/dist/models/mapper.d.ts.map +0 -1
  11. package/dist/models/mapper.js +0 -36
  12. package/dist/models/mapper.js.map +0 -1
  13. package/dist/repositories/index.d.ts +0 -4
  14. package/dist/repositories/index.d.ts.map +0 -1
  15. package/dist/repositories/index.js +0 -4
  16. package/dist/repositories/index.js.map +0 -1
  17. package/dist/repositories/interfaces/badge.repository.d.ts +0 -11
  18. package/dist/repositories/interfaces/badge.repository.d.ts.map +0 -1
  19. package/dist/repositories/interfaces/badge.repository.js +0 -2
  20. package/dist/repositories/interfaces/badge.repository.js.map +0 -1
  21. package/dist/repositories/interfaces/index.d.ts +0 -3
  22. package/dist/repositories/interfaces/index.d.ts.map +0 -1
  23. package/dist/repositories/interfaces/index.js +0 -3
  24. package/dist/repositories/interfaces/index.js.map +0 -1
  25. package/dist/repositories/interfaces/user.repository.d.ts +0 -16
  26. package/dist/repositories/interfaces/user.repository.d.ts.map +0 -1
  27. package/dist/repositories/interfaces/user.repository.js +0 -2
  28. package/dist/repositories/interfaces/user.repository.js.map +0 -1
  29. package/dist/repositories/postgres-badge.repository.d.ts +0 -12
  30. package/dist/repositories/postgres-badge.repository.d.ts.map +0 -1
  31. package/dist/repositories/postgres-badge.repository.js +0 -38
  32. package/dist/repositories/postgres-badge.repository.js.map +0 -1
  33. package/dist/repositories/postgres-user.repository.d.ts +0 -23
  34. package/dist/repositories/postgres-user.repository.d.ts.map +0 -1
  35. package/dist/repositories/postgres-user.repository.js +0 -96
  36. package/dist/repositories/postgres-user.repository.js.map +0 -1
  37. package/dist/services/auth.service.d.ts +0 -29
  38. package/dist/services/auth.service.d.ts.map +0 -1
  39. package/dist/services/auth.service.js +0 -93
  40. package/dist/services/auth.service.js.map +0 -1
  41. package/dist/services/badge.service.d.ts +0 -15
  42. package/dist/services/badge.service.d.ts.map +0 -1
  43. package/dist/services/badge.service.js +0 -139
  44. package/dist/services/badge.service.js.map +0 -1
  45. package/dist/services/user.service.d.ts +0 -19
  46. package/dist/services/user.service.d.ts.map +0 -1
  47. package/dist/services/user.service.js +0 -188
  48. package/dist/services/user.service.js.map +0 -1
  49. package/dist/test/__test-utils__/factories/badge.factory.d.ts +0 -7
  50. package/dist/test/__test-utils__/factories/badge.factory.d.ts.map +0 -1
  51. package/dist/test/__test-utils__/factories/badge.factory.js +0 -29
  52. package/dist/test/__test-utils__/factories/badge.factory.js.map +0 -1
  53. package/dist/test/__test-utils__/factories/commands.factory.d.ts +0 -6
  54. package/dist/test/__test-utils__/factories/commands.factory.d.ts.map +0 -1
  55. package/dist/test/__test-utils__/factories/commands.factory.js +0 -24
  56. package/dist/test/__test-utils__/factories/commands.factory.js.map +0 -1
  57. package/dist/test/__test-utils__/factories/user.factory.d.ts +0 -8
  58. package/dist/test/__test-utils__/factories/user.factory.d.ts.map +0 -1
  59. package/dist/test/__test-utils__/factories/user.factory.js +0 -42
  60. package/dist/test/__test-utils__/factories/user.factory.js.map +0 -1
  61. package/dist/test/__test-utils__/mocks/badge.repository.mock.d.ts +0 -4
  62. package/dist/test/__test-utils__/mocks/badge.repository.mock.d.ts.map +0 -1
  63. package/dist/test/__test-utils__/mocks/badge.repository.mock.js +0 -11
  64. package/dist/test/__test-utils__/mocks/badge.repository.mock.js.map +0 -1
  65. package/dist/test/__test-utils__/mocks/user.repository.mock.d.ts +0 -4
  66. package/dist/test/__test-utils__/mocks/user.repository.mock.d.ts.map +0 -1
  67. package/dist/test/__test-utils__/mocks/user.repository.mock.js +0 -16
  68. package/dist/test/__test-utils__/mocks/user.repository.mock.js.map +0 -1
  69. package/dist/test/data-source.d.ts +0 -8
  70. package/dist/test/data-source.d.ts.map +0 -1
  71. package/dist/test/data-source.js +0 -36
  72. package/dist/test/data-source.js.map +0 -1
  73. package/dist/test/integration/postgres-badge.repository.int.spec.d.ts +0 -2
  74. package/dist/test/integration/postgres-badge.repository.int.spec.d.ts.map +0 -1
  75. package/dist/test/integration/postgres-badge.repository.int.spec.js +0 -129
  76. package/dist/test/integration/postgres-badge.repository.int.spec.js.map +0 -1
  77. package/dist/test/integration/postgres-user.repository.int.spec.d.ts +0 -2
  78. package/dist/test/integration/postgres-user.repository.int.spec.d.ts.map +0 -1
  79. package/dist/test/integration/postgres-user.repository.int.spec.js +0 -222
  80. package/dist/test/integration/postgres-user.repository.int.spec.js.map +0 -1
  81. package/dist/test/migrations/1776334421317-InitialUserSchema.d.ts +0 -7
  82. package/dist/test/migrations/1776334421317-InitialUserSchema.d.ts.map +0 -1
  83. package/dist/test/migrations/1776334421317-InitialUserSchema.js +0 -58
  84. package/dist/test/migrations/1776334421317-InitialUserSchema.js.map +0 -1
  85. package/dist/test/setup.d.ts +0 -2
  86. package/dist/test/setup.d.ts.map +0 -1
  87. package/dist/test/setup.js +0 -2
  88. package/dist/test/setup.js.map +0 -1
  89. package/dist/test/unit/auth.service.unit.spec.d.ts +0 -2
  90. package/dist/test/unit/auth.service.unit.spec.d.ts.map +0 -1
  91. package/dist/test/unit/auth.service.unit.spec.js +0 -236
  92. package/dist/test/unit/auth.service.unit.spec.js.map +0 -1
  93. package/dist/test/unit/badge.service.unit.spec.d.ts +0 -2
  94. package/dist/test/unit/badge.service.unit.spec.d.ts.map +0 -1
  95. package/dist/test/unit/badge.service.unit.spec.js +0 -120
  96. package/dist/test/unit/badge.service.unit.spec.js.map +0 -1
  97. package/dist/test/unit/mapper.unit.spec.d.ts +0 -2
  98. package/dist/test/unit/mapper.unit.spec.d.ts.map +0 -1
  99. package/dist/test/unit/mapper.unit.spec.js +0 -358
  100. package/dist/test/unit/mapper.unit.spec.js.map +0 -1
  101. package/dist/test/unit/user.service.unit.spec.d.ts +0 -2
  102. package/dist/test/unit/user.service.unit.spec.d.ts.map +0 -1
  103. package/dist/test/unit/user.service.unit.spec.js +0 -480
  104. package/dist/test/unit/user.service.unit.spec.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/user.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAiC,EAAE;QAC9C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,EAAE;YACrC,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,QAAQ,GAAG,cAAc;YAChC,MAAM,EAAE,QAAQ,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,IAAI,iBAAiB,EAAE,EAAE;YAC9B,GAAG,EAAE,gBAAgB,GAAG,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,EAAE;YACV,GAAG,SAAS;SACb,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAiC,EAAE;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA6C,EAAE;QAC/D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,QAAQ,GAAG,cAAc;YAChC,MAAM,EAAE,QAAQ,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,IAAI,iBAAiB,EAAE,EAAE;YAC9B,GAAG,EAAE,gBAAgB,GAAG,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,EAAE;YACV,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;CACF"}
@@ -1,4 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import type { IBadgeRepository } from '../../../repositories/interfaces/badge.repository.js';
3
- export declare const createBadgeRepositoryMock: () => jest.Mocked<IBadgeRepository>;
4
- //# sourceMappingURL=badge.repository.mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"badge.repository.mock.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/badge.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,eAAO,MAAM,yBAAyB,QAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CASzB,CAAC"}
@@ -1,11 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- export const createBadgeRepositoryMock = () => ({
3
- findById: jest.fn(),
4
- findManyByIds: jest.fn(),
5
- findBySlug: jest.fn(),
6
- findAll: jest.fn(),
7
- create: jest.fn(),
8
- update: jest.fn(),
9
- delete: jest.fn(),
10
- });
11
- //# sourceMappingURL=badge.repository.mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"badge.repository.mock.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/badge.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAkC,EAAE,CAC3E,CAAC;IACC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IACnB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;IACxB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;IACrB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;CAClB,CAA6C,CAAC"}
@@ -1,4 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import type { IUserRepository } from '../../../repositories/interfaces/user.repository.js';
3
- export declare const createUserRepositoryMock: () => jest.Mocked<IUserRepository>;
4
- //# sourceMappingURL=user.repository.mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.repository.mock.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/user.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAE3F,eAAO,MAAM,wBAAwB,QAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAcxB,CAAC"}
@@ -1,16 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- export const createUserRepositoryMock = () => ({
3
- findById: jest.fn(),
4
- findByEmail: jest.fn(),
5
- findByRna: jest.fn(),
6
- findAll: jest.fn(),
7
- create: jest.fn(),
8
- update: jest.fn(),
9
- delete: jest.fn(),
10
- addBadgeToUser: jest.fn(),
11
- removeBadgeFromUser: jest.fn(),
12
- incrementImpactScore: jest.fn(),
13
- createWithHashedPassword: jest.fn(),
14
- findPasswordHashByEmail: jest.fn(),
15
- });
16
- //# sourceMappingURL=user.repository.mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.repository.mock.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/user.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAiC,EAAE,CACzE,CAAC;IACC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IACnB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;IACtB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;IACpB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;IACzB,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC9B,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC/B,wBAAwB,EAAE,IAAI,CAAC,EAAE,EAAE;IACnC,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE;CACnC,CAA4C,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Repository } from '@volontariapp/database';
2
- import { DataSource } from 'typeorm';
3
- export declare const testDataSource: DataSource;
4
- export declare const getTestRepository: <T extends object>(ModelClass: new () => T) => Repository<T>;
5
- export declare const initializeTestDb: () => Promise<void>;
6
- export declare const closeTestDb: () => Promise<void>;
7
- export declare const truncateAll: () => Promise<void>;
8
- //# sourceMappingURL=data-source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AASrC,eAAO,MAAM,cAAc,YAYzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,cAAc,UAAU,CAAC,KAAG,UAAU,CAAC,CAAC,CACpB,CAAC;AAEvE,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAMrD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAIhD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAEhD,CAAC"}
@@ -1,36 +0,0 @@
1
- import { DataSource } from 'typeorm';
2
- import { UserModel } from '../models/user.model.js';
3
- import { BadgeModel } from '../models/badge.model.js';
4
- import { UserBadgeModel } from '../models/user-badge.model.js';
5
- import { InitialUserSchema1776334421317 } from './migrations/1776334421317-InitialUserSchema.js';
6
- import { registerUserMappings } from '../models/mapper.js';
7
- const isMigrationRun = process.env.TYPEORM_MIGRATION_RUN === 'true';
8
- export const testDataSource = new DataSource({
9
- type: 'postgres',
10
- host: process.env.DB_HOST ?? 'localhost',
11
- port: Number(process.env.DB_PORT ?? 5432),
12
- username: process.env.DB_USER ?? 'user',
13
- password: process.env.DB_PASSWORD ?? 'password',
14
- database: process.env.DB_NAME ?? 'ms_user',
15
- entities: [UserModel, BadgeModel, UserBadgeModel],
16
- migrationsRun: true,
17
- migrations: isMigrationRun ? [InitialUserSchema1776334421317] : [],
18
- synchronize: false,
19
- logging: false,
20
- });
21
- export const getTestRepository = (ModelClass) => testDataSource.getRepository(ModelClass);
22
- export const initializeTestDb = async () => {
23
- if (!testDataSource.isInitialized) {
24
- await testDataSource.initialize();
25
- }
26
- registerUserMappings();
27
- };
28
- export const closeTestDb = async () => {
29
- if (testDataSource.isInitialized) {
30
- await testDataSource.destroy();
31
- }
32
- };
33
- export const truncateAll = async () => {
34
- await testDataSource.query('TRUNCATE TABLE users, badges, user_badges RESTART IDENTITY CASCADE');
35
- };
36
- //# sourceMappingURL=data-source.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAC;AAEpE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;IACxC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM;IACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU;IAC/C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS;IAC1C,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACjD,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE;IAClE,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAmB,UAAuB,EAAiB,EAAE,CAC5F,cAAc,CAAC,aAAa,CAAC,UAAU,CAA6B,CAAC;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;IACxD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,oBAAoB,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,cAAc,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACnG,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- //# sourceMappingURL=postgres-badge.repository.int.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres-badge.repository.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/integration/postgres-badge.repository.int.spec.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -1,129 +0,0 @@
1
- import 'reflect-metadata';
2
- import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
3
- import { initializeTestDb, closeTestDb, truncateAll, getTestRepository } from '../data-source.js';
4
- import { BadgeModel } from '../../models/badge.model.js';
5
- import { PostgresBadgeRepository } from '../../repositories/postgres-badge.repository.js';
6
- import { BadgeFactory } from '../__test-utils__/factories/badge.factory.js';
7
- import { BadgeEntity } from '../../entities/badge.entity.js';
8
- describe('PostgresBadgeRepository (Integration)', () => {
9
- let repository;
10
- beforeAll(async () => {
11
- await initializeTestDb();
12
- repository = new PostgresBadgeRepository(getTestRepository(BadgeModel));
13
- });
14
- afterAll(async () => {
15
- await closeTestDb();
16
- });
17
- beforeEach(async () => {
18
- await truncateAll();
19
- });
20
- describe('create()', () => {
21
- it('should persist badge and return mapped BadgeEntity', async () => {
22
- const input = BadgeFactory.buildInput({ iconPath: 'icon.svg' });
23
- const result = await repository.create(input);
24
- expect(result).toBeInstanceOf(BadgeEntity);
25
- expect(result.id).toBeDefined();
26
- expect(result.name).toBe(input.name);
27
- expect(result.slug).toBe(input.slug);
28
- expect(result.description).toBe(input.description);
29
- });
30
- it('should generate UUID for id', async () => {
31
- const input = BadgeFactory.buildInput({ iconPath: 'icon.svg' });
32
- const result = await repository.create(input);
33
- expect(result.id).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
34
- });
35
- it('should throw on duplicate slug (unique constraint)', async () => {
36
- const input = BadgeFactory.buildInput({ slug: 'unique-slug', iconPath: 'icon.svg' });
37
- await repository.create(input);
38
- await expect(repository.create(input)).rejects.toThrow();
39
- });
40
- });
41
- describe('findById()', () => {
42
- it('should return BadgeEntity when badge exists', async () => {
43
- const created = await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
44
- const result = await repository.findById(created.id);
45
- expect(result).not.toBeNull();
46
- expect(result?.id).toBe(created.id);
47
- expect(result?.slug).toBe(created.slug);
48
- });
49
- it('should return null when badge does not exist', async () => {
50
- const result = await repository.findById('00000000-0000-0000-0000-000000000000');
51
- expect(result).toBeNull();
52
- });
53
- });
54
- describe('findBySlug()', () => {
55
- it('should return badge when slug matches', async () => {
56
- const created = await repository.create(BadgeFactory.buildInput({ slug: 'test-slug', iconPath: 'icon.svg' }));
57
- const result = await repository.findBySlug('test-slug');
58
- expect(result).not.toBeNull();
59
- expect(result?.id).toBe(created.id);
60
- expect(result?.slug).toBe('test-slug');
61
- });
62
- it('should return null when slug does not exist', async () => {
63
- const result = await repository.findBySlug('nonexistent-slug');
64
- expect(result).toBeNull();
65
- });
66
- });
67
- describe('findAll()', () => {
68
- it('should return all persisted badges', async () => {
69
- await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
70
- await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
71
- const result = await repository.findAll();
72
- expect(result).toHaveLength(2);
73
- expect(result[0]).toBeInstanceOf(BadgeEntity);
74
- });
75
- it('should return empty array when no badges exist', async () => {
76
- const result = await repository.findAll();
77
- expect(result).toHaveLength(0);
78
- });
79
- });
80
- describe('findManyByIds()', () => {
81
- it('should return badges matching the given IDs', async () => {
82
- const badge1 = await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
83
- const badge2 = await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
84
- await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
85
- const result = await repository.findManyByIds([badge1.id, badge2.id]);
86
- expect(result).toHaveLength(2);
87
- expect(result.map((b) => b.id)).toEqual(expect.arrayContaining([badge1.id, badge2.id]));
88
- });
89
- it('should return empty array when IDs do not match any badge', async () => {
90
- const result = await repository.findManyByIds(['00000000-0000-0000-0000-000000000000']);
91
- expect(result).toHaveLength(0);
92
- });
93
- });
94
- describe('update()', () => {
95
- it('should update badge name and return updated entity', async () => {
96
- const created = await repository.create(BadgeFactory.buildInput({ name: 'Original Name', iconPath: 'icon.svg' }));
97
- const result = await repository.update(created.id, { name: 'Updated Name' });
98
- expect(result).not.toBeNull();
99
- expect(result?.id).toBe(created.id);
100
- expect(result?.name).toBe('Updated Name');
101
- });
102
- it('should update badge description without touching other fields', async () => {
103
- const created = await repository.create(BadgeFactory.buildInput({ slug: 'my-slug', iconPath: 'icon.svg' }));
104
- const result = await repository.update(created.id, { description: 'New description' });
105
- expect(result?.description).toBe('New description');
106
- expect(result?.slug).toBe('my-slug');
107
- });
108
- it('should return null when updating non-existent badge', async () => {
109
- const result = await repository.update('00000000-0000-0000-0000-000000000000', {
110
- name: 'Ghost',
111
- });
112
- expect(result).toBeNull();
113
- });
114
- });
115
- describe('delete()', () => {
116
- it('should delete badge and return true', async () => {
117
- const created = await repository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
118
- const result = await repository.delete(created.id);
119
- expect(result).toBe(true);
120
- const found = await repository.findById(created.id);
121
- expect(found).toBeNull();
122
- });
123
- it('should return false when deleting non-existent badge', async () => {
124
- const result = await repository.delete('00000000-0000-0000-0000-000000000000');
125
- expect(result).toBe(false);
126
- });
127
- });
128
- });
129
- //# sourceMappingURL=postgres-badge.repository.int.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres-badge.repository.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/postgres-badge.repository.int.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- //# sourceMappingURL=postgres-user.repository.int.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres-user.repository.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/integration/postgres-user.repository.int.spec.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -1,222 +0,0 @@
1
- import 'reflect-metadata';
2
- import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
3
- import { testDataSource, initializeTestDb, closeTestDb, truncateAll, getTestRepository, } from '../data-source.js';
4
- import { UserModel } from '../../models/user.model.js';
5
- import { BadgeModel } from '../../models/badge.model.js';
6
- import { PostgresUserRepository } from '../../repositories/postgres-user.repository.js';
7
- import { PostgresBadgeRepository } from '../../repositories/postgres-badge.repository.js';
8
- import { UserFactory } from '../__test-utils__/factories/user.factory.js';
9
- import { BadgeFactory } from '../__test-utils__/factories/badge.factory.js';
10
- import { UserEntity } from '../../entities/user.entity.js';
11
- import { hashPassword } from '@volontariapp/crypto';
12
- describe('PostgresUserRepository (Integration)', () => {
13
- let userRepository;
14
- let badgeRepository;
15
- beforeAll(async () => {
16
- await initializeTestDb();
17
- userRepository = new PostgresUserRepository(getTestRepository(UserModel), 'test-email-encryption-secret-32ch');
18
- badgeRepository = new PostgresBadgeRepository(getTestRepository(BadgeModel));
19
- });
20
- afterAll(async () => {
21
- await closeTestDb();
22
- });
23
- beforeEach(async () => {
24
- await truncateAll();
25
- });
26
- const createTestUser = async (overrides = {}) => {
27
- const input = UserFactory.buildInput(overrides);
28
- return userRepository.createWithHashedPassword(input, hashPassword('TestPassword123!'));
29
- };
30
- describe('createWithHashedPassword()', () => {
31
- it('should persist user and return mapped UserEntity', async () => {
32
- const input = UserFactory.buildInput({ email: 'test@example.com', pseudo: 'testuser' });
33
- const hashedPwd = hashPassword('Password123!');
34
- const result = await userRepository.createWithHashedPassword(input, hashedPwd);
35
- expect(result).toBeInstanceOf(UserEntity);
36
- expect(result.id).toBeDefined();
37
- expect(result.email).toBe('test@example.com');
38
- expect(result.pseudo).toBe('testuser');
39
- expect(result.totalImpactScore).toBe(0);
40
- expect(result.badges).toEqual([]);
41
- });
42
- it('should generate UUID for id', async () => {
43
- const input = UserFactory.buildInput();
44
- const hashedPwd = hashPassword('Password123!');
45
- const result = await userRepository.createWithHashedPassword(input, hashedPwd);
46
- expect(result.id).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
47
- });
48
- it('should throw on duplicate email (unique constraint violation)', async () => {
49
- const input = UserFactory.buildInput({ email: 'dup@example.com' });
50
- await userRepository.createWithHashedPassword(input, hashPassword('Pass123!'));
51
- await expect(userRepository.createWithHashedPassword(input, hashPassword('Pass123!'))).rejects.toThrow();
52
- });
53
- });
54
- describe('findPasswordHashByEmail()', () => {
55
- it('should return the stored hash when user exists', async () => {
56
- const hashedPwd = hashPassword('MySecurePassword!');
57
- const input = UserFactory.buildInput({ email: 'pw@example.com' });
58
- await userRepository.createWithHashedPassword(input, hashedPwd);
59
- const result = await userRepository.findPasswordHashByEmail('pw@example.com');
60
- expect(result).not.toBeNull();
61
- expect(result).toBe(hashedPwd);
62
- });
63
- it('should return null when user does not exist', async () => {
64
- const result = await userRepository.findPasswordHashByEmail('nouser@example.com');
65
- expect(result).toBeNull();
66
- });
67
- });
68
- describe('findByEmail()', () => {
69
- it('should return user entity when email matches', async () => {
70
- const created = await createTestUser({ email: 'find@example.com' });
71
- const result = await userRepository.findByEmail('find@example.com');
72
- expect(result).not.toBeNull();
73
- expect(result?.id).toBe(created.id);
74
- expect(result?.email).toBe('find@example.com');
75
- });
76
- it('should return null when email does not exist', async () => {
77
- const result = await userRepository.findByEmail('nonexistent@example.com');
78
- expect(result).toBeNull();
79
- });
80
- });
81
- describe('findByRna()', () => {
82
- it('should return user entity when RNA matches', async () => {
83
- const created = await createTestUser({ rna: 'W123456789' });
84
- const result = await userRepository.findByRna('W123456789');
85
- expect(result).not.toBeNull();
86
- expect(result?.id).toBe(created.id);
87
- expect(result?.rna).toBe('W123456789');
88
- });
89
- it('should return null when RNA does not exist', async () => {
90
- const result = await userRepository.findByRna('W000000000');
91
- expect(result).toBeNull();
92
- });
93
- });
94
- describe('findById()', () => {
95
- it('should return user entity when id matches', async () => {
96
- const created = await createTestUser();
97
- const result = await userRepository.findById(created.id);
98
- expect(result).not.toBeNull();
99
- expect(result?.id).toBe(created.id);
100
- expect(result?.badges).toEqual([]);
101
- });
102
- it('should return null when id does not exist', async () => {
103
- const result = await userRepository.findById('00000000-0000-0000-0000-000000000000');
104
- expect(result).toBeNull();
105
- });
106
- });
107
- describe('findAll()', () => {
108
- it('should return all persisted users with total count', async () => {
109
- await createTestUser();
110
- await createTestUser();
111
- await createTestUser();
112
- const [users, total] = await userRepository.findAll();
113
- expect(users).toHaveLength(3);
114
- expect(total).toBe(3);
115
- expect(users[0]).toBeInstanceOf(UserEntity);
116
- });
117
- it('should respect limit and offset for pagination', async () => {
118
- await createTestUser();
119
- await createTestUser();
120
- await createTestUser();
121
- const [users, total] = await userRepository.findAll(2, 0);
122
- expect(users).toHaveLength(2);
123
- expect(total).toBe(3);
124
- });
125
- it('should return empty array and 0 when no users exist', async () => {
126
- const [users, total] = await userRepository.findAll();
127
- expect(users).toHaveLength(0);
128
- expect(total).toBe(0);
129
- });
130
- });
131
- describe('update()', () => {
132
- it('should update user pseudo and return updated entity', async () => {
133
- const created = await createTestUser({ pseudo: 'old-pseudo' });
134
- const result = await userRepository.update(created.id, { pseudo: 'new-pseudo' });
135
- expect(result).not.toBeNull();
136
- expect(result?.id).toBe(created.id);
137
- expect(result?.pseudo).toBe('new-pseudo');
138
- });
139
- it('should update user bio without touching other fields', async () => {
140
- const created = await createTestUser({ pseudo: 'unchanged', bio: 'old bio' });
141
- const result = await userRepository.update(created.id, { bio: 'new bio' });
142
- expect(result?.bio).toBe('new bio');
143
- expect(result?.pseudo).toBe('unchanged');
144
- });
145
- it('should return null when updating non-existent user', async () => {
146
- const result = await userRepository.update('00000000-0000-0000-0000-000000000000', {
147
- pseudo: 'ghost',
148
- });
149
- expect(result).toBeNull();
150
- });
151
- });
152
- describe('delete()', () => {
153
- it('should delete user and return true', async () => {
154
- const created = await createTestUser();
155
- const result = await userRepository.delete(created.id);
156
- expect(result).toBe(true);
157
- const found = await userRepository.findById(created.id);
158
- expect(found).toBeNull();
159
- });
160
- it('should return false when deleting non-existent user', async () => {
161
- const result = await userRepository.delete('00000000-0000-0000-0000-000000000000');
162
- expect(result).toBe(false);
163
- });
164
- });
165
- describe('addBadgeToUser()', () => {
166
- it('should create user_badges row linking user and badge', async () => {
167
- const user = await createTestUser();
168
- const badge = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
169
- await userRepository.addBadgeToUser(user.id, badge.id);
170
- const rows = await testDataSource.query('SELECT * FROM user_badges WHERE user_id = $1 AND badge_id = $2', [user.id, badge.id]);
171
- expect(rows).toHaveLength(1);
172
- expect(rows[0].user_id).toBe(user.id);
173
- expect(rows[0].badge_id).toBe(badge.id);
174
- });
175
- it('should associate multiple badges to the same user', async () => {
176
- const user = await createTestUser();
177
- const badge1 = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
178
- const badge2 = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
179
- await userRepository.addBadgeToUser(user.id, badge1.id);
180
- await userRepository.addBadgeToUser(user.id, badge2.id);
181
- const rows = await testDataSource.query('SELECT * FROM user_badges WHERE user_id = $1', [user.id]);
182
- expect(rows).toHaveLength(2);
183
- });
184
- });
185
- describe('removeBadgeFromUser()', () => {
186
- it('should remove user_badges row when badge is unlinked', async () => {
187
- const user = await createTestUser();
188
- const badge = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
189
- await userRepository.addBadgeToUser(user.id, badge.id);
190
- await userRepository.removeBadgeFromUser(user.id, badge.id);
191
- const removedRows = await testDataSource.query('SELECT * FROM user_badges WHERE user_id = $1 AND badge_id = $2', [user.id, badge.id]);
192
- expect(removedRows).toHaveLength(0);
193
- });
194
- it('should only remove the targeted badge, not others', async () => {
195
- const user = await createTestUser();
196
- const badge1 = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
197
- const badge2 = await badgeRepository.create(BadgeFactory.buildInput({ iconPath: 'icon.svg' }));
198
- await userRepository.addBadgeToUser(user.id, badge1.id);
199
- await userRepository.addBadgeToUser(user.id, badge2.id);
200
- await userRepository.removeBadgeFromUser(user.id, badge1.id);
201
- const remainingRows = await testDataSource.query('SELECT * FROM user_badges WHERE user_id = $1', [user.id]);
202
- expect(remainingRows).toHaveLength(1);
203
- expect(remainingRows[0].badge_id).toBe(badge2.id);
204
- });
205
- });
206
- describe('incrementImpactScore()', () => {
207
- it('should increment total_impact_score in DB', async () => {
208
- const created = await createTestUser();
209
- await userRepository.incrementImpactScore(created.id, 10);
210
- const scoreRows = await testDataSource.query('SELECT total_impact_score FROM users WHERE id = $1', [created.id]);
211
- expect(Number(scoreRows[0].total_impact_score)).toBe(10);
212
- });
213
- it('should accumulate multiple increments', async () => {
214
- const created = await createTestUser();
215
- await userRepository.incrementImpactScore(created.id, 5);
216
- await userRepository.incrementImpactScore(created.id, 3);
217
- const accRows = await testDataSource.query('SELECT total_impact_score FROM users WHERE id = $1', [created.id]);
218
- expect(Number(accRows[0].total_impact_score)).toBe(8);
219
- });
220
- });
221
- });
222
- //# sourceMappingURL=postgres-user.repository.int.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres-user.repository.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/postgres-user.repository.int.spec.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { MigrationInterface, QueryRunner } from 'typeorm';
2
- export declare class InitialUserSchema1776334421317 implements MigrationInterface {
3
- name: string;
4
- up(queryRunner: QueryRunner): Promise<void>;
5
- down(queryRunner: QueryRunner): Promise<void>;
6
- }
7
- //# sourceMappingURL=1776334421317-InitialUserSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1776334421317-InitialUserSchema.d.ts","sourceRoot":"","sources":["../../../src/test/migrations/1776334421317-InitialUserSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,8BAA+B,YAAW,kBAAkB;IACvE,IAAI,SAAoC;IAC3B,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3D"}
@@ -1,58 +0,0 @@
1
- export class InitialUserSchema1776334421317 {
2
- name = 'InitialUserSchema1776334421317';
3
- async up(queryRunner) {
4
- await queryRunner.query(`
5
- CREATE TABLE "badges" (
6
- "id" uuid NOT NULL DEFAULT uuid_generate_v4(),
7
- "name" varchar NOT NULL,
8
- "slug" varchar NOT NULL,
9
- "description" text NOT NULL,
10
- "icon_path" varchar NOT NULL,
11
- CONSTRAINT "UQ_badges_slug" UNIQUE ("slug"),
12
- CONSTRAINT "PK_badges_id" PRIMARY KEY ("id")
13
- )
14
- `);
15
- await queryRunner.query(`
16
- CREATE TABLE "users" (
17
- "id" uuid NOT NULL DEFAULT uuid_generate_v4(),
18
- "email" varchar(255) NOT NULL,
19
- "phone" varchar,
20
- "pseudo" varchar(255) NOT NULL,
21
- "role" varchar NOT NULL,
22
- "password_hash" varchar NOT NULL,
23
- "bio" text,
24
- "logo_path" varchar,
25
- "total_impact_score" integer NOT NULL DEFAULT 0,
26
- "rna" varchar,
27
- CONSTRAINT "UQ_users_email" UNIQUE ("email"),
28
- CONSTRAINT "PK_users_id" PRIMARY KEY ("id")
29
- )
30
- `);
31
- await queryRunner.query(`
32
- CREATE TABLE "user_badges" (
33
- "user_id" uuid NOT NULL,
34
- "badge_id" uuid NOT NULL,
35
- "awarded_at" TIMESTAMP NOT NULL DEFAULT now(),
36
- CONSTRAINT "PK_user_badges" PRIMARY KEY ("user_id", "badge_id")
37
- )
38
- `);
39
- await queryRunner.query(`
40
- ALTER TABLE "user_badges"
41
- ADD CONSTRAINT "FK_user_badges_user" FOREIGN KEY ("user_id")
42
- REFERENCES "users"("id") ON DELETE CASCADE
43
- `);
44
- await queryRunner.query(`
45
- ALTER TABLE "user_badges"
46
- ADD CONSTRAINT "FK_user_badges_badge" FOREIGN KEY ("badge_id")
47
- REFERENCES "badges"("id") ON DELETE CASCADE
48
- `);
49
- }
50
- async down(queryRunner) {
51
- await queryRunner.query(`ALTER TABLE "user_badges" DROP CONSTRAINT "FK_user_badges_badge"`);
52
- await queryRunner.query(`ALTER TABLE "user_badges" DROP CONSTRAINT "FK_user_badges_user"`);
53
- await queryRunner.query(`DROP TABLE "user_badges"`);
54
- await queryRunner.query(`DROP TABLE "users"`);
55
- await queryRunner.query(`DROP TABLE "badges"`);
56
- }
57
- }
58
- //# sourceMappingURL=1776334421317-InitialUserSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1776334421317-InitialUserSchema.js","sourceRoot":"","sources":["../../../src/test/migrations/1776334421317-InitialUserSchema.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,8BAA8B;IACzC,IAAI,GAAG,gCAAgC,CAAC;IACjC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;;;;;;SAUnB,CAAC,CAAC;QAEP,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;SAenB,CAAC,CAAC;QAEP,MAAM,WAAW,CAAC,KAAK,CAAC;;;;;;;SAOnB,CAAC,CAAC;QAEP,MAAM,WAAW,CAAC,KAAK,CAAC;;;;SAInB,CAAC,CAAC;QACP,MAAM,WAAW,CAAC,KAAK,CAAC;;;;SAInB,CAAC,CAAC;IACT,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAC5F,MAAM,WAAW,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAC3F,MAAM,WAAW,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- //# sourceMappingURL=auth.service.unit.spec.d.ts.map