@volontariapp/domain-post 2.2.2-snap-cb5b3b4 → 2.2.3-snap-b681e14

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 (94) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/index.d.ts +1 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -5
  5. package/dist/index.js.map +1 -1
  6. package/dist/services/index.d.ts +1 -1
  7. package/dist/services/index.d.ts.map +1 -1
  8. package/dist/services/index.js +1 -1
  9. package/dist/services/index.js.map +1 -1
  10. package/package.json +5 -21
  11. package/dist/entities/index.d.ts +0 -2
  12. package/dist/entities/index.d.ts.map +0 -1
  13. package/dist/entities/index.js +0 -2
  14. package/dist/entities/index.js.map +0 -1
  15. package/dist/entities/post.entity.d.ts +0 -9
  16. package/dist/entities/post.entity.d.ts.map +0 -1
  17. package/dist/entities/post.entity.js +0 -9
  18. package/dist/entities/post.entity.js.map +0 -1
  19. package/dist/models/index.d.ts +0 -3
  20. package/dist/models/index.d.ts.map +0 -1
  21. package/dist/models/index.js +0 -3
  22. package/dist/models/index.js.map +0 -1
  23. package/dist/models/mapper.d.ts +0 -2
  24. package/dist/models/mapper.d.ts.map +0 -1
  25. package/dist/models/mapper.js +0 -7
  26. package/dist/models/mapper.js.map +0 -1
  27. package/dist/models/post.model.d.ts +0 -9
  28. package/dist/models/post.model.d.ts.map +0 -1
  29. package/dist/models/post.model.js +0 -47
  30. package/dist/models/post.model.js.map +0 -1
  31. package/dist/repositories/index.d.ts +0 -3
  32. package/dist/repositories/index.d.ts.map +0 -1
  33. package/dist/repositories/index.js +0 -3
  34. package/dist/repositories/index.js.map +0 -1
  35. package/dist/repositories/interfaces/index.d.ts +0 -2
  36. package/dist/repositories/interfaces/index.d.ts.map +0 -1
  37. package/dist/repositories/interfaces/index.js +0 -2
  38. package/dist/repositories/interfaces/index.js.map +0 -1
  39. package/dist/repositories/interfaces/post.repository.d.ts +0 -12
  40. package/dist/repositories/interfaces/post.repository.d.ts.map +0 -1
  41. package/dist/repositories/interfaces/post.repository.js +0 -2
  42. package/dist/repositories/interfaces/post.repository.js.map +0 -1
  43. package/dist/repositories/postgres-post.repository.d.ts +0 -14
  44. package/dist/repositories/postgres-post.repository.d.ts.map +0 -1
  45. package/dist/repositories/postgres-post.repository.js +0 -54
  46. package/dist/repositories/postgres-post.repository.js.map +0 -1
  47. package/dist/services/post.service.d.ts +0 -15
  48. package/dist/services/post.service.d.ts.map +0 -1
  49. package/dist/services/post.service.js +0 -134
  50. package/dist/services/post.service.js.map +0 -1
  51. package/dist/test/__test-utils__/factories/post.factory.d.ts +0 -6
  52. package/dist/test/__test-utils__/factories/post.factory.d.ts.map +0 -1
  53. package/dist/test/__test-utils__/factories/post.factory.js +0 -18
  54. package/dist/test/__test-utils__/factories/post.factory.js.map +0 -1
  55. package/dist/test/__test-utils__/mocks/post.repository.mock.d.ts +0 -4
  56. package/dist/test/__test-utils__/mocks/post.repository.mock.d.ts.map +0 -1
  57. package/dist/test/__test-utils__/mocks/post.repository.mock.js +0 -12
  58. package/dist/test/__test-utils__/mocks/post.repository.mock.js.map +0 -1
  59. package/dist/test/data-source.d.ts +0 -8
  60. package/dist/test/data-source.d.ts.map +0 -1
  61. package/dist/test/data-source.js +0 -40
  62. package/dist/test/data-source.js.map +0 -1
  63. package/dist/test/integration/post.repository.int.spec.d.ts +0 -2
  64. package/dist/test/integration/post.repository.int.spec.d.ts.map +0 -1
  65. package/dist/test/integration/post.repository.int.spec.js +0 -136
  66. package/dist/test/integration/post.repository.int.spec.js.map +0 -1
  67. package/dist/test/migrations/1776000000000-InitialPostSchema.d.ts +0 -7
  68. package/dist/test/migrations/1776000000000-InitialPostSchema.d.ts.map +0 -1
  69. package/dist/test/migrations/1776000000000-InitialPostSchema.js +0 -11
  70. package/dist/test/migrations/1776000000000-InitialPostSchema.js.map +0 -1
  71. package/dist/test/migrations/1776785940565-JobsOutboxAndEventQueue.d.ts +0 -7
  72. package/dist/test/migrations/1776785940565-JobsOutboxAndEventQueue.d.ts.map +0 -1
  73. package/dist/test/migrations/1776785940565-JobsOutboxAndEventQueue.js +0 -12
  74. package/dist/test/migrations/1776785940565-JobsOutboxAndEventQueue.js.map +0 -1
  75. package/dist/test/migrations/1776975278062-JobsOutboxAndEventQueueWithTraceId.d.ts +0 -7
  76. package/dist/test/migrations/1776975278062-JobsOutboxAndEventQueueWithTraceId.d.ts.map +0 -1
  77. package/dist/test/migrations/1776975278062-JobsOutboxAndEventQueueWithTraceId.js +0 -12
  78. package/dist/test/migrations/1776975278062-JobsOutboxAndEventQueueWithTraceId.js.map +0 -1
  79. package/dist/test/migrations/1777630651338-UpdateOutboxModels.d.ts +0 -7
  80. package/dist/test/migrations/1777630651338-UpdateOutboxModels.d.ts.map +0 -1
  81. package/dist/test/migrations/1777630651338-UpdateOutboxModels.js +0 -12
  82. package/dist/test/migrations/1777630651338-UpdateOutboxModels.js.map +0 -1
  83. package/dist/test/setup.d.ts +0 -2
  84. package/dist/test/setup.d.ts.map +0 -1
  85. package/dist/test/setup.js +0 -2
  86. package/dist/test/setup.js.map +0 -1
  87. package/dist/test/unit/post.repository.unit.spec.d.ts +0 -2
  88. package/dist/test/unit/post.repository.unit.spec.d.ts.map +0 -1
  89. package/dist/test/unit/post.repository.unit.spec.js +0 -82
  90. package/dist/test/unit/post.repository.unit.spec.js.map +0 -1
  91. package/dist/test/unit/post.service.unit.spec.d.ts +0 -2
  92. package/dist/test/unit/post.service.unit.spec.d.ts.map +0 -1
  93. package/dist/test/unit/post.service.unit.spec.js +0 -161
  94. package/dist/test/unit/post.service.unit.spec.js.map +0 -1
@@ -1,161 +0,0 @@
1
- import { jest, describe, it, expect, beforeEach, afterEach } from '@jest/globals';
2
- import { PostService } from '../../services/post.service.js';
3
- import { createPostRepositoryMock } from '../__test-utils__/mocks/post.repository.mock.js';
4
- import { PostFactory } from '../__test-utils__/factories/post.factory.js';
5
- describe('PostService (Unit)', () => {
6
- let service;
7
- let mockRepository;
8
- beforeEach(() => {
9
- mockRepository = createPostRepositoryMock();
10
- service = new PostService(mockRepository);
11
- });
12
- afterEach(() => {
13
- jest.restoreAllMocks();
14
- });
15
- describe('findById()', () => {
16
- it('should return a post when it exists', async () => {
17
- const post = PostFactory.build({ id: 'post-1' });
18
- const findByIdSpy = jest.spyOn(mockRepository, 'findById').mockResolvedValue(post);
19
- const result = await service.findById('post-1');
20
- expect(result).toEqual(post);
21
- expect(findByIdSpy).toHaveBeenCalledWith('post-1');
22
- });
23
- it('should throw POST_NOT_FOUND when post does not exist', async () => {
24
- jest.spyOn(mockRepository, 'findById').mockResolvedValue(null);
25
- await expect(service.findById('unknown')).rejects.toMatchObject({
26
- code: 'NOT_FOUND',
27
- });
28
- });
29
- it('should rethrow BaseError from repository without wrapping', async () => {
30
- const baseError = { isBaseError: true, code: 'SOME_ERROR' };
31
- jest.spyOn(mockRepository, 'findById').mockRejectedValue(baseError);
32
- await expect(service.findById('post-1')).rejects.toEqual(baseError);
33
- });
34
- it('should throw DATABASE_ERROR on unexpected repository failure', async () => {
35
- jest.spyOn(mockRepository, 'findById').mockRejectedValue(new Error('Unexpected'));
36
- await expect(service.findById('post-1')).rejects.toMatchObject({
37
- code: 'DATABASE_ERROR',
38
- });
39
- });
40
- });
41
- describe('findByAuthorId()', () => {
42
- it('should return all posts for an author', async () => {
43
- const posts = PostFactory.buildMany(2, { authorId: 'author-1' });
44
- const findByAuthorIdSpy = jest.spyOn(mockRepository, 'findByAuthorId').mockResolvedValue(posts);
45
- const result = await service.findByAuthorId('author-1');
46
- expect(result).toEqual(posts);
47
- expect(findByAuthorIdSpy).toHaveBeenCalledWith('author-1');
48
- });
49
- it('should return an empty array if author has no posts', async () => {
50
- jest.spyOn(mockRepository, 'findByAuthorId').mockResolvedValue([]);
51
- const result = await service.findByAuthorId('author-none');
52
- expect(result).toEqual([]);
53
- });
54
- it('should throw DATABASE_ERROR on repository failure', async () => {
55
- jest.spyOn(mockRepository, 'findByAuthorId').mockRejectedValue(new Error('DB Fail'));
56
- await expect(service.findByAuthorId('author-1')).rejects.toMatchObject({
57
- code: 'DATABASE_ERROR',
58
- });
59
- });
60
- });
61
- describe('findAll()', () => {
62
- it('should return all posts', async () => {
63
- const posts = PostFactory.buildMany(3);
64
- const findAllSpy = jest.spyOn(mockRepository, 'findAll').mockResolvedValue(posts);
65
- const result = await service.findAll();
66
- expect(result).toEqual(posts);
67
- expect(findAllSpy).toHaveBeenCalled();
68
- });
69
- it('should throw DATABASE_ERROR on repository failure', async () => {
70
- jest.spyOn(mockRepository, 'findAll').mockRejectedValue(new Error('DB Fail'));
71
- await expect(service.findAll()).rejects.toMatchObject({
72
- code: 'DATABASE_ERROR',
73
- });
74
- });
75
- });
76
- describe('create()', () => {
77
- it('should create and return a new post', async () => {
78
- const postData = { title: 'New Post', authorId: 'author-1' };
79
- const createdPost = PostFactory.build(postData);
80
- const createSpy = jest.spyOn(mockRepository, 'create').mockResolvedValue(createdPost);
81
- const result = await service.create(postData);
82
- expect(result).toEqual(createdPost);
83
- expect(createSpy).toHaveBeenCalledWith(postData);
84
- });
85
- it('should throw POST_ALREADY_EXISTS on unique constraint violation (code 23505)', async () => {
86
- const postData = { title: 'Duplicate' };
87
- const dbError = Object.assign(new Error('Duplicate'), { code: '23505' });
88
- jest.spyOn(mockRepository, 'create').mockRejectedValue(dbError);
89
- await expect(service.create(postData)).rejects.toMatchObject({
90
- code: 'CONFLICT',
91
- });
92
- });
93
- it('should throw DATABASE_ERROR on other repository failures', async () => {
94
- jest.spyOn(mockRepository, 'create').mockRejectedValue(new Error('Connection error'));
95
- await expect(service.create({})).rejects.toMatchObject({
96
- code: 'DATABASE_ERROR',
97
- });
98
- });
99
- });
100
- describe('update()', () => {
101
- it('should update and return the post', async () => {
102
- const updateData = { title: 'Updated' };
103
- const updatedPost = PostFactory.build(updateData);
104
- const updateSpy = jest.spyOn(mockRepository, 'update').mockResolvedValue(updatedPost);
105
- const result = await service.update('post-1', updateData);
106
- expect(result).toEqual(updatedPost);
107
- expect(updateSpy).toHaveBeenCalledWith('post-1', updateData);
108
- });
109
- it('should throw POST_NOT_FOUND when post to update does not exist', async () => {
110
- jest.spyOn(mockRepository, 'update').mockResolvedValue(null);
111
- await expect(service.update('unknown', {})).rejects.toMatchObject({
112
- code: 'NOT_FOUND',
113
- });
114
- });
115
- it('should throw POST_ALREADY_EXISTS on unique constraint violation during update', async () => {
116
- const dbError = Object.assign(new Error('Duplicate'), { code: '23505' });
117
- jest.spyOn(mockRepository, 'update').mockRejectedValue(dbError);
118
- await expect(service.update('post-1', { title: 'Exists' })).rejects.toMatchObject({
119
- code: 'CONFLICT',
120
- });
121
- });
122
- });
123
- describe('delete()', () => {
124
- it('should delete the post if it exists', async () => {
125
- const post = PostFactory.build({ id: 'post-1' });
126
- const findByIdSpy = jest.spyOn(mockRepository, 'findById').mockResolvedValue(post);
127
- const deleteSpy = jest.spyOn(mockRepository, 'delete').mockResolvedValue(true);
128
- await service.delete('post-1');
129
- expect(findByIdSpy).toHaveBeenCalledWith('post-1');
130
- expect(deleteSpy).toHaveBeenCalledWith('post-1');
131
- });
132
- it('should throw POST_NOT_FOUND if post to delete does not exist', async () => {
133
- jest.spyOn(mockRepository, 'findById').mockResolvedValue(null);
134
- await expect(service.delete('unknown')).rejects.toMatchObject({
135
- code: 'NOT_FOUND',
136
- });
137
- });
138
- it('should throw DATABASE_ERROR if repository.delete fails', async () => {
139
- jest.spyOn(mockRepository, 'findById').mockResolvedValue(PostFactory.build());
140
- jest.spyOn(mockRepository, 'delete').mockRejectedValue(new Error('Fail'));
141
- await expect(service.delete('post-1')).rejects.toMatchObject({
142
- code: 'DATABASE_ERROR',
143
- });
144
- });
145
- });
146
- describe('deleteByAuthorId()', () => {
147
- it('should return count of deleted posts', async () => {
148
- const deleteByAuthorIdSpy = jest.spyOn(mockRepository, 'deleteByAuthorId').mockResolvedValue(5);
149
- const result = await service.deleteByAuthorId('author-1');
150
- expect(result).toBe(5);
151
- expect(deleteByAuthorIdSpy).toHaveBeenCalledWith('author-1');
152
- });
153
- it('should throw DATABASE_ERROR on repository failure', async () => {
154
- jest.spyOn(mockRepository, 'deleteByAuthorId').mockRejectedValue(new Error('Fail'));
155
- await expect(service.deleteByAuthorId('author-1')).rejects.toMatchObject({
156
- code: 'DATABASE_ERROR',
157
- });
158
- });
159
- });
160
- });
161
- //# sourceMappingURL=post.service.unit.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"post.service.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/post.service.unit.spec.ts"],"names":[],"mappings":"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"}