@tomei/media 0.8.11-dev.1 → 0.10.1-test.1

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 (41) hide show
  1. package/.gitlab-ci.yml +231 -13
  2. package/.husky/commit-msg +1 -1
  3. package/.husky/pre-commit +0 -0
  4. package/.vscode/settings.json +3 -0
  5. package/dist/__tests__/common.service.spec.d.ts +1 -0
  6. package/dist/__tests__/common.service.spec.js +160 -0
  7. package/dist/__tests__/common.service.spec.js.map +1 -0
  8. package/dist/__tests__/medias.repository.spec.d.ts +1 -0
  9. package/dist/__tests__/medias.repository.spec.js +140 -0
  10. package/dist/__tests__/medias.repository.spec.js.map +1 -0
  11. package/dist/__tests__/medias.spec.d.ts +1 -0
  12. package/dist/__tests__/medias.spec.js +347 -0
  13. package/dist/__tests__/medias.spec.js.map +1 -0
  14. package/dist/__tests__/pipes.spec.d.ts +1 -0
  15. package/dist/__tests__/pipes.spec.js +130 -0
  16. package/dist/__tests__/pipes.spec.js.map +1 -0
  17. package/dist/base/base.medias.js +2 -2
  18. package/dist/base/base.medias.js.map +1 -1
  19. package/dist/common/common.service.js +2 -2
  20. package/dist/common/common.service.js.map +1 -1
  21. package/dist/medias.d.ts +2 -2
  22. package/dist/medias.js +16 -10
  23. package/dist/medias.js.map +1 -1
  24. package/dist/medias.repository.js.map +1 -1
  25. package/dist/pipe/append-id.pipe.js +2 -2
  26. package/dist/pipe/append-id.pipe.js.map +1 -1
  27. package/dist/pipe/validate-id.pipe.js +2 -2
  28. package/dist/pipe/validate-id.pipe.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/jest.config.js +26 -0
  31. package/package.json +38 -34
  32. package/src/__tests__/common.service.spec.ts +203 -0
  33. package/src/__tests__/medias.repository.spec.ts +158 -0
  34. package/src/__tests__/medias.spec.ts +468 -0
  35. package/src/__tests__/pipes.spec.ts +154 -0
  36. package/src/base/base.medias.ts +2 -2
  37. package/src/common/common.service.ts +2 -2
  38. package/src/medias.repository.ts +9 -3
  39. package/src/medias.ts +20 -15
  40. package/src/pipe/append-id.pipe.ts +2 -2
  41. package/src/pipe/validate-id.pipe.ts +2 -2
package/.gitlab-ci.yml CHANGED
@@ -1,16 +1,234 @@
1
- variables:
2
- SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
3
- GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
4
- sonarcloud-check:
5
- image:
6
- name: sonarsource/sonar-scanner-cli:latest
7
- entrypoint: [""]
1
+ # ============================================================
2
+ # .gitlab-ci.yml npm package with trusted publishing (OIDC)
3
+ #
4
+ # Project path: all-tomei-projects/tomei-package/General/<package-name>
5
+ #
6
+ # Tag patterns:
7
+ # test-vX.Y.Z-rc.N → npm publish --tag test (RC for test env)
8
+ # staging-vX.Y.Z-rc.N → npm publish --tag staging (RC for staging env)
9
+ # prod-vX.Y.Z → npm publish --tag latest (production, manual gate)
10
+ # prod-vX.Y.Z-hotfix.N → npm publish --tag latest (hotfix, manual gate)
11
+ #
12
+ # No NPM_TOKEN secret needed — OIDC trusted publishing only.
13
+ #
14
+ # Required CI/CD variables (Settings → CI/CD → Variables):
15
+ # DISCORD_WEBHOOK — Discord incoming webhook URL (masked)
16
+ #
17
+ # npm side setup required (npmjs.com):
18
+ # 1. package.json → publishConfig.provenance: true
19
+ # 2. npmjs.com → package Settings → Publishing Access
20
+ # → Enable OIDC publishing for GitLab project:
21
+ # all-tomei-projects/tomei-package/General/<package-name>
22
+ # ============================================================
23
+ default:
24
+ image: node:20-alpine
25
+
26
+ stages:
27
+ - validate
28
+ - build
29
+ - publish
30
+ - notify
31
+
32
+ # ────────────────────────────────────────────────────────────
33
+ # STAGE: validate
34
+ # Runs lint and unit tests before publish
35
+ # Skipped on prod tags — code already validated on test + staging
36
+ # ────────────────────────────────────────────────────────────
37
+ lint:
38
+ stage: validate
8
39
  cache:
9
- key: "${CI_JOB_NAME}"
40
+ key: node-$CI_COMMIT_REF_SLUG
41
+ paths: [node_modules/]
42
+ script:
43
+ - npm ci
44
+ - npm run lint
45
+ rules:
46
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
47
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
48
+
49
+ unit-test:
50
+ stage: validate
51
+ cache:
52
+ key: node-$CI_COMMIT_REF_SLUG
53
+ paths: [node_modules/]
54
+ script:
55
+ - npm ci
56
+ - npm test
57
+ coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'
58
+ artifacts:
59
+ reports:
60
+ coverage_report:
61
+ coverage_format: cobertura
62
+ path: coverage/cobertura-coverage.xml
63
+ expire_in: 7 days
64
+ rules:
65
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
66
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
67
+
68
+ # ────────────────────────────────────────────────────────────
69
+ # STAGE: build
70
+ # Compiles the package (tsc / rollup / whatever your build uses)
71
+ # Artifacts passed to publish jobs
72
+ # Runs on all tag patterns
73
+ # ────────────────────────────────────────────────────────────
74
+ build:
75
+ stage: build
76
+ cache:
77
+ key: node-$CI_COMMIT_REF_SLUG
78
+ paths: [node_modules/]
79
+ script:
80
+ - npm ci
81
+ - npm run build
82
+ artifacts:
10
83
  paths:
11
- - .sonar/cache
84
+ - dist/
85
+ expire_in: 1 hour
86
+ rules:
87
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
88
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
89
+ - if: '$CI_COMMIT_TAG =~ /^prod-v/'
90
+
91
+ # ────────────────────────────────────────────────────────────
92
+ # STAGE: publish — test RC
93
+ # Triggered by: test-vX.Y.Z-rc.N tag
94
+ # Publishes with dist-tag "test"
95
+ # Consumers must opt in: npm install @tomei/pkg@test
96
+ # Version stamped: test-v1.24.0-rc.1 → 1.24.0-rc.1
97
+ # ────────────────────────────────────────────────────────────
98
+ publish-test:
99
+ stage: publish
100
+ needs: [build]
101
+ rules:
102
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
103
+ script:
104
+ - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
105
+ - |
106
+ RC_VERSION=$(echo "$CI_COMMIT_TAG" | sed 's/^test-v\([0-9.]*\)-rc\.\([0-9]*\)$/\1-test.\2/')
107
+ echo "Publishing version $RC_VERSION with dist-tag: test"
108
+ npm version "$RC_VERSION" --no-git-tag-version --ignore-scripts --force
109
+ npm publish --tag test --access public
110
+ echo "Published: @$(node -p "require('./package.json').name")@$RC_VERSION [test]"
111
+
112
+ # ────────────────────────────────────────────────────────────
113
+ # STAGE: publish — staging RC
114
+ # Triggered by: staging-vX.Y.Z-rc.N tag
115
+ # Publishes with dist-tag "staging"
116
+ # Consumers must opt in: npm install @tomei/pkg@staging
117
+ # Version stamped: staging-v1.24.0-rc.1 → 1.24.0-rc.1
118
+ # ────────────────────────────────────────────────────────────
119
+ publish-staging:
120
+ stage: publish
121
+ needs: [build]
122
+ rules:
123
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
124
+ script:
125
+ - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
126
+ - |
127
+ RC_VERSION=$(echo "$CI_COMMIT_TAG" | sed 's/^staging-v\([0-9.]*\)-rc\.\([0-9]*\)$/\1-staging.\2/')
128
+ echo "Publishing version $RC_VERSION with dist-tag: staging"
129
+ npm version "$RC_VERSION" --no-git-tag-version --ignore-scripts --force
130
+ npm publish --tag staging --access public
131
+ echo "Published: @$(node -p "require('./package.json').name")@$RC_VERSION [staging]"
132
+
133
+ # ────────────────────────────────────────────────────────────
134
+ # STAGE: publish — production
135
+ # Triggered by: prod-vX.Y.Z or prod-vX.Y.Z-hotfix.N tag (from main only)
136
+ # Publishes with dist-tag "latest" — becomes the default install version
137
+ # Manual gate — human must click Play in GitLab pipeline UI
138
+ # Version stamped: prod-v2.2.0 → 2.2.0 | prod-v2.2.0-hotfix.1 → 2.2.0-hotfix.1
139
+ # ────────────────────────────────────────────────────────────
140
+ publish-prod:
141
+ stage: publish
142
+ needs: [build]
143
+ rules:
144
+ - if: '$CI_COMMIT_TAG =~ /^prod-v/'
145
+ when: manual
146
+ allow_failure: false
147
+ script:
148
+ - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
149
+ - |
150
+ PROD_VERSION=$(echo "$CI_COMMIT_TAG" | sed 's/^prod-v//')
151
+ echo "Publishing version $PROD_VERSION with dist-tag: latest"
152
+ npm version "$PROD_VERSION" --no-git-tag-version --ignore-scripts --force
153
+ npm publish --tag latest --access public
154
+ echo "Published: @$(node -p "require('./package.json').name")@$PROD_VERSION [latest]"
155
+ echo "Pipeline: $CI_PIPELINE_URL"
156
+
157
+ # ────────────────────────────────────────────────────────────
158
+ # STAGE: notify — success
159
+ # ────────────────────────────────────────────────────────────
160
+ notify-success:
161
+ stage: notify
162
+ image: curlimages/curl:latest
163
+ needs:
164
+ - job: publish-test
165
+ optional: true
166
+ - job: publish-staging
167
+ optional: true
168
+ - job: publish-prod
169
+ optional: true
170
+ rules:
171
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
172
+ when: on_success
173
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
174
+ when: on_success
175
+ - if: '$CI_COMMIT_TAG =~ /^prod-v/'
176
+ when: on_success
177
+ script:
178
+ - |
179
+ if echo "$CI_COMMIT_TAG" | grep -q "^test-v"; then
180
+ DIST_TAG="test"
181
+ COLOR=3066993
182
+ elif echo "$CI_COMMIT_TAG" | grep -q "^staging-v"; then
183
+ DIST_TAG="staging"
184
+ COLOR=16776960
185
+ elif echo "$CI_COMMIT_TAG" | grep -q "^prod-v"; then
186
+ DIST_TAG="latest"
187
+ COLOR=3066993
188
+ fi
189
+
190
+ curl -s -X POST "$DISCORD_WEBHOOK" \
191
+ -H "Content-Type: application/json" \
192
+ -d '{
193
+ "embeds": [{
194
+ "title": "Package published successfully",
195
+ "color": '"$COLOR"',
196
+ "fields": [
197
+ {"name": "Package", "value": "'"$CI_PROJECT_NAME"'", "inline": true},
198
+ {"name": "Tag", "value": "'"$CI_COMMIT_TAG"'", "inline": true},
199
+ {"name": "Dist-tag", "value": "'"$DIST_TAG"'", "inline": true},
200
+ {"name": "Published by", "value": "'"$GITLAB_USER_NAME"'", "inline": true},
201
+ {"name": "Pipeline", "value": "'"$CI_PIPELINE_URL"'", "inline": false}
202
+ ]
203
+ }]
204
+ }'
205
+
206
+ # ────────────────────────────────────────────────────────────
207
+ # STAGE: notify — failure
208
+ # ────────────────────────────────────────────────────────────
209
+ notify-failure:
210
+ stage: notify
211
+ image: curlimages/curl:latest
212
+ rules:
213
+ - if: '$CI_COMMIT_TAG =~ /^test-v/'
214
+ when: on_failure
215
+ - if: '$CI_COMMIT_TAG =~ /^staging-v/'
216
+ when: on_failure
217
+ - if: '$CI_COMMIT_TAG =~ /^prod-v/'
218
+ when: on_failure
12
219
  script:
13
- - sonar-scanner
14
- only:
15
- - merge_requests
16
- - main
220
+ - |
221
+ curl -s -X POST "$DISCORD_WEBHOOK" \
222
+ -H "Content-Type: application/json" \
223
+ -d '{
224
+ "embeds": [{
225
+ "title": "Package publish FAILED",
226
+ "color": 15158332,
227
+ "fields": [
228
+ {"name": "Package", "value": "'"$CI_PROJECT_NAME"'", "inline": true},
229
+ {"name": "Tag", "value": "'"$CI_COMMIT_TAG"'", "inline": true},
230
+ {"name": "Failed by", "value": "'"$GITLAB_USER_NAME"'", "inline": true},
231
+ {"name": "Pipeline", "value": "'"$CI_PIPELINE_URL"'", "inline": false}
232
+ ]
233
+ }]
234
+ }'
package/.husky/commit-msg CHANGED
@@ -5,7 +5,7 @@ npx commitlint --edit $1
5
5
  message="$(cat $1)"
6
6
  echo "$message"
7
7
  a=($(echo "$message" | tr ':' '\n'))
8
- echo "${a[0]}"
8
+ # echo "${a[0]}"
9
9
  # if [ "${a[0]}" = "feat" ];
10
10
  # then
11
11
  # npm version --commit-hooks false --no-git-tag-version minor
package/.husky/pre-commit CHANGED
File without changes
@@ -0,0 +1,3 @@
1
+ {
2
+ "snyk.advanced.autoSelectOrganization": true
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('@nestjs/config', () => ({
4
+ ConfigService: jest.fn().mockImplementation(() => ({
5
+ get: jest.fn().mockReturnValue('http://localhost:3000'),
6
+ })),
7
+ }));
8
+ jest.mock('@nestjs/common', () => ({
9
+ Injectable: () => (target) => target,
10
+ HttpException: class HttpException extends Error {
11
+ constructor(response, status) {
12
+ super(typeof response === 'string' ? response : JSON.stringify(response));
13
+ this.response = response;
14
+ this.status = status;
15
+ }
16
+ },
17
+ InternalServerErrorException: class InternalServerErrorException extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ }
21
+ },
22
+ }));
23
+ jest.mock('axios');
24
+ jest.mock('lodash', () => ({
25
+ omit: jest.fn((obj, keys) => {
26
+ const result = Object.assign({}, obj);
27
+ keys.forEach((k) => delete result[k]);
28
+ return result;
29
+ }),
30
+ omitBy: jest.fn((obj, fn) => obj),
31
+ keys: jest.fn((obj) => Object.keys(obj)),
32
+ pick: jest.fn((obj, keys) => {
33
+ const result = {};
34
+ keys.forEach((k) => {
35
+ if (k in obj)
36
+ result[k] = obj[k];
37
+ });
38
+ return result;
39
+ }),
40
+ }));
41
+ jest.mock('@paralleldrive/cuid2', () => ({
42
+ createId: jest.fn().mockReturnValue('new-cuid'),
43
+ }));
44
+ const axios_1 = require("axios");
45
+ const common_service_1 = require("../common/common.service");
46
+ const mockAxios = axios_1.default;
47
+ const mockConfigService = {
48
+ get: jest.fn().mockReturnValue('http://localhost:3000'),
49
+ };
50
+ describe('CommonService', () => {
51
+ let service;
52
+ beforeEach(() => {
53
+ jest.clearAllMocks();
54
+ service = new common_service_1.CommonService(mockConfigService);
55
+ });
56
+ describe('handleAxiosError', () => {
57
+ it('throws HttpException when error has a response', () => {
58
+ const err = { response: { data: 'Bad Request', status: 400 } };
59
+ expect(() => service.handleAxiosError(err)).toThrow();
60
+ });
61
+ it('throws HttpException when error has a request but no response', () => {
62
+ const err = { request: 'timeout' };
63
+ expect(() => service.handleAxiosError(err)).toThrow();
64
+ });
65
+ it('throws InternalServerErrorException for generic errors', () => {
66
+ const err = { message: 'Something went wrong' };
67
+ expect(() => service.handleAxiosError(err)).toThrow();
68
+ });
69
+ });
70
+ describe('addActivityHistory', () => {
71
+ it('posts activity and returns EntityId', async () => {
72
+ mockAxios.post = jest
73
+ .fn()
74
+ .mockResolvedValue({ data: { EntityId: 'entity-123' } });
75
+ const record = {
76
+ Action: 'Insert',
77
+ EntityValueBefore: {},
78
+ EntityValueAfter: {
79
+ Title: 'Test',
80
+ CreatedById: 'u1',
81
+ CreatedAt: new Date(),
82
+ },
83
+ PerformedById: 'user-001',
84
+ EntityId: 'entity-001',
85
+ };
86
+ const result = await service.addActivityHistory(record, 'Media', 'create');
87
+ expect(result).toBe('entity-123');
88
+ expect(mockAxios.post).toHaveBeenCalledWith('http://localhost:3000/activity-histories', expect.objectContaining({ EntityId: 'entity-001' }));
89
+ });
90
+ it('uses update activity label for update method', async () => {
91
+ mockAxios.post = jest
92
+ .fn()
93
+ .mockResolvedValue({ data: { EntityId: 'e2' } });
94
+ const record = {
95
+ EntityValueBefore: { Title: 'Old' },
96
+ EntityValueAfter: { Title: 'New' },
97
+ PerformedById: 'user-001',
98
+ EntityId: 'entity-002',
99
+ };
100
+ await service.addActivityHistory(record, 'Media', 'update');
101
+ expect(mockAxios.post).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({ Action: 'Update' }));
102
+ });
103
+ it('calls handleAxiosError when axios throws', async () => {
104
+ const axiosError = { response: { data: 'Error', status: 500 } };
105
+ mockAxios.post = jest.fn().mockRejectedValue(axiosError);
106
+ const record = {
107
+ EntityValueBefore: {},
108
+ EntityValueAfter: {},
109
+ PerformedById: 'u1',
110
+ EntityId: 'e1',
111
+ };
112
+ await expect(service.addActivityHistory(record, 'Media', 'create')).rejects.toThrow();
113
+ });
114
+ });
115
+ describe('getList', () => {
116
+ it('returns rows from the response', async () => {
117
+ mockAxios.get = jest
118
+ .fn()
119
+ .mockResolvedValue({ data: { rows: ['item1', 'item2'] } });
120
+ const result = await service.getList('MediaTypes');
121
+ expect(result).toEqual(['item1', 'item2']);
122
+ expect(mockAxios.get).toHaveBeenCalledWith('http://localhost:3000/lists/items', expect.objectContaining({ params: { ListName: 'MediaTypes' } }));
123
+ });
124
+ it('calls handleAxiosError when axios throws', async () => {
125
+ mockAxios.get = jest
126
+ .fn()
127
+ .mockRejectedValue({ response: { data: 'err', status: 500 } });
128
+ await expect(service.getList('Any')).rejects.toThrow();
129
+ });
130
+ });
131
+ describe('addFieldTranslation', () => {
132
+ it('posts field translation', async () => {
133
+ mockAxios.post = jest.fn().mockResolvedValue({});
134
+ const payload = { field: 'Title', value: 'Tajuk' };
135
+ await service.addFieldTranslation(payload);
136
+ expect(mockAxios.post).toHaveBeenCalledWith('http://localhost:3000/field-translations', payload);
137
+ });
138
+ it('calls handleAxiosError when axios throws', async () => {
139
+ mockAxios.post = jest.fn().mockRejectedValue({ message: 'fail' });
140
+ await expect(service.addFieldTranslation({})).rejects.toThrow();
141
+ });
142
+ });
143
+ describe('getMedia', () => {
144
+ it('returns rows from the response', async () => {
145
+ mockAxios.get = jest
146
+ .fn()
147
+ .mockResolvedValue({ data: { rows: [{ MediaId: 'm1' }] } });
148
+ const result = await service.getMedia({
149
+ ObjectId: 'obj1',
150
+ ObjectType: 'Rental',
151
+ });
152
+ expect(result).toEqual([{ MediaId: 'm1' }]);
153
+ });
154
+ it('calls handleAxiosError when axios throws', async () => {
155
+ mockAxios.get = jest.fn().mockRejectedValue({ message: 'fail' });
156
+ await expect(service.getMedia({})).rejects.toThrow();
157
+ });
158
+ });
159
+ });
160
+ //# sourceMappingURL=common.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.service.spec.js","sourceRoot":"","sources":["../../src/__tests__/common.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('@nestjs/swagger', () => ({
4
+ ApiProperty: () => () => { },
5
+ ApiPropertyOptional: () => () => { },
6
+ }));
7
+ jest.mock('sequelize-typescript', () => {
8
+ var _a;
9
+ return ({
10
+ Table: () => () => { },
11
+ Column: () => () => { },
12
+ Model: (_a = class Model {
13
+ constructor() {
14
+ this.get = jest.fn();
15
+ this.update = jest.fn();
16
+ this.destroy = jest.fn();
17
+ }
18
+ },
19
+ _a.findByPk = jest.fn(),
20
+ _a.findOne = jest.fn(),
21
+ _a.findAll = jest.fn(),
22
+ _a.findAndCountAll = jest.fn(),
23
+ _a.create = jest.fn(),
24
+ _a),
25
+ DataType: {
26
+ STRING: 'STRING',
27
+ TEXT: 'TEXT',
28
+ DATE: 'DATE',
29
+ BOOLEAN: 'BOOLEAN',
30
+ ENUM: () => 'ENUM',
31
+ },
32
+ PrimaryKey: () => () => { },
33
+ ForeignKey: () => () => { },
34
+ BelongsTo: () => () => { },
35
+ HasMany: () => () => { },
36
+ CreatedAt: () => () => { },
37
+ UpdatedAt: () => () => { },
38
+ Default: () => () => { },
39
+ AllowNull: () => () => { },
40
+ });
41
+ });
42
+ jest.mock('sequelize', () => ({
43
+ Op: { substring: Symbol('Op.substring') },
44
+ DataTypes: {},
45
+ }));
46
+ jest.mock('@tomei/general', () => ({
47
+ RepositoryBase: class RepositoryBase {
48
+ constructor(_model) { }
49
+ },
50
+ IRepositoryBase: {},
51
+ }));
52
+ const medias_repository_1 = require("../medias.repository");
53
+ const medias_entity_1 = require("../entities/medias.entity");
54
+ const mockModel = {
55
+ MediaId: 'media-001',
56
+ get: jest.fn().mockReturnValue({}),
57
+ update: jest.fn(),
58
+ destroy: jest.fn(),
59
+ };
60
+ describe('MediasRepository', () => {
61
+ let repo;
62
+ beforeEach(() => {
63
+ jest.clearAllMocks();
64
+ repo = new medias_repository_1.MediasRepository();
65
+ });
66
+ describe('findByPk', () => {
67
+ it('returns a MediasModel when found', async () => {
68
+ medias_entity_1.MediasModel.findOne.mockResolvedValue(mockModel);
69
+ const result = await repo.findByPk('media-001', undefined);
70
+ expect(result).toBe(mockModel);
71
+ expect(medias_entity_1.MediasModel.findOne).toHaveBeenCalledWith({
72
+ where: { MediaId: 'media-001' },
73
+ transaction: undefined,
74
+ });
75
+ });
76
+ it('passes the transaction option', async () => {
77
+ const tx = { id: 'tx-1' };
78
+ medias_entity_1.MediasModel.findOne.mockResolvedValue(mockModel);
79
+ await repo.findByPk('media-001', tx);
80
+ expect(medias_entity_1.MediasModel.findOne).toHaveBeenCalledWith({
81
+ where: { MediaId: 'media-001' },
82
+ transaction: tx,
83
+ });
84
+ });
85
+ it('returns null when record is not found', async () => {
86
+ medias_entity_1.MediasModel.findOne.mockResolvedValue(null);
87
+ const result = await repo.findByPk('missing-id', undefined);
88
+ expect(result).toBeNull();
89
+ });
90
+ it('throws when the database call fails', async () => {
91
+ medias_entity_1.MediasModel.findOne.mockRejectedValue(new Error('DB error'));
92
+ await expect(repo.findByPk('media-001', undefined)).rejects.toThrow('DB error');
93
+ });
94
+ });
95
+ describe('delete', () => {
96
+ it('destroys the record by MediaId', async () => {
97
+ medias_entity_1.MediasModel.destroy = jest.fn().mockResolvedValue(1);
98
+ await repo.delete('media-001');
99
+ expect(medias_entity_1.MediasModel.destroy).toHaveBeenCalledWith(expect.objectContaining({
100
+ where: expect.objectContaining({ MediaId: 'media-001' }),
101
+ }));
102
+ });
103
+ it('passes the transaction option', async () => {
104
+ const tx = { id: 'tx-2' };
105
+ medias_entity_1.MediasModel.destroy = jest.fn().mockResolvedValue(1);
106
+ await repo.delete('media-001', tx);
107
+ expect(medias_entity_1.MediasModel.destroy).toHaveBeenCalledWith(expect.objectContaining({ transaction: tx }));
108
+ });
109
+ it('throws when the database call fails', async () => {
110
+ medias_entity_1.MediasModel.destroy = jest
111
+ .fn()
112
+ .mockRejectedValue(new Error('Delete failed'));
113
+ await expect(repo.delete('media-001')).rejects.toThrow('Delete failed');
114
+ });
115
+ });
116
+ describe('findAndCountAll', () => {
117
+ it('returns count and rows with options', async () => {
118
+ const mockResult = { count: 2, rows: [mockModel, mockModel] };
119
+ medias_entity_1.MediasModel.findAndCountAll.mockResolvedValue(mockResult);
120
+ const result = await repo.findAndCountAll({ limit: 10, offset: 0 });
121
+ expect(result).toEqual(mockResult);
122
+ expect(medias_entity_1.MediasModel.findAndCountAll).toHaveBeenCalledWith({
123
+ limit: 10,
124
+ offset: 0,
125
+ });
126
+ });
127
+ it('returns all records when no options are given', async () => {
128
+ const mockResult = { count: 1, rows: [mockModel] };
129
+ medias_entity_1.MediasModel.findAndCountAll.mockResolvedValue(mockResult);
130
+ const result = await repo.findAndCountAll(undefined);
131
+ expect(result).toEqual(mockResult);
132
+ expect(medias_entity_1.MediasModel.findAndCountAll).toHaveBeenCalledWith();
133
+ });
134
+ it('throws when the database call fails', async () => {
135
+ medias_entity_1.MediasModel.findAndCountAll.mockRejectedValue(new Error('Query failed'));
136
+ await expect(repo.findAndCountAll({ limit: 5 })).rejects.toThrow();
137
+ });
138
+ });
139
+ });
140
+ //# sourceMappingURL=medias.repository.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"medias.repository.spec.js","sourceRoot":"","sources":["../../src/__tests__/medias.repository.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};