@volontariapp/domain-social 0.1.2 → 0.2.0-snap-0c61a0c

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - refacto: clean archi + DDD
8
+
3
9
  ## 0.1.2
4
10
 
5
11
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeEach } from '@jest/globals';
1
+ import { jest, describe, it, expect, beforeEach, afterEach } from '@jest/globals';
2
2
  import { EventPostLinkService } from '../../services/event-post-link.service.js';
3
3
  import { createEventPostLinkRepositoryMock } from '../__test-utils__/mocks/event-post-link.repository.mock.js';
4
4
  import { PaginatedIdsFactory } from '../__test-utils__/factories/paginated-ids.factory.js';
@@ -10,20 +10,25 @@ describe('EventPostLinkService (Unit)', () => {
10
10
  mockRepository = createEventPostLinkRepositoryMock();
11
11
  service = new EventPostLinkService(mockRepository);
12
12
  });
13
+ afterEach(() => {
14
+ jest.restoreAllMocks();
15
+ });
13
16
  describe('linkPostToEvent()', () => {
14
17
  it('should call repository.linkPostToEvent with correct args', async () => {
15
- mockRepository.linkPostToEvent.mockResolvedValue(undefined);
18
+ const linkPostToEventSpy = jest
19
+ .spyOn(mockRepository, 'linkPostToEvent')
20
+ .mockResolvedValue(undefined);
16
21
  await service.linkPostToEvent('post-1', 'event-1');
17
- expect(mockRepository.linkPostToEvent).toHaveBeenCalledWith('post-1', 'event-1');
22
+ expect(linkPostToEventSpy).toHaveBeenCalledWith('post-1', 'event-1');
18
23
  });
19
24
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
20
- mockRepository.linkPostToEvent.mockRejectedValue(new Error('Merge failed'));
25
+ jest.spyOn(mockRepository, 'linkPostToEvent').mockRejectedValue(new Error('Merge failed'));
21
26
  await expect(service.linkPostToEvent('post-1', 'event-1')).rejects.toMatchObject({
22
27
  code: 'DATABASE_ERROR',
23
28
  });
24
29
  });
25
30
  it('should rethrow a BaseError without wrapping', async () => {
26
- mockRepository.linkPostToEvent.mockRejectedValue({
31
+ jest.spyOn(mockRepository, 'linkPostToEvent').mockRejectedValue({
27
32
  code: 'DATABASE_QUERY_ERROR',
28
33
  isBaseError: true,
29
34
  });
@@ -34,12 +39,16 @@ describe('EventPostLinkService (Unit)', () => {
34
39
  });
35
40
  describe('unlinkPostFromEvent()', () => {
36
41
  it('should call repository.unlinkPostFromEvent with correct args', async () => {
37
- mockRepository.unlinkPostFromEvent.mockResolvedValue(undefined);
42
+ const unlinkPostFromEventSpy = jest
43
+ .spyOn(mockRepository, 'unlinkPostFromEvent')
44
+ .mockResolvedValue(undefined);
38
45
  await service.unlinkPostFromEvent('post-1', 'event-1');
39
- expect(mockRepository.unlinkPostFromEvent).toHaveBeenCalledWith('post-1', 'event-1');
46
+ expect(unlinkPostFromEventSpy).toHaveBeenCalledWith('post-1', 'event-1');
40
47
  });
41
48
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
42
- mockRepository.unlinkPostFromEvent.mockRejectedValue(new Error('Delete failed'));
49
+ jest
50
+ .spyOn(mockRepository, 'unlinkPostFromEvent')
51
+ .mockRejectedValue(new Error('Delete failed'));
43
52
  await expect(service.unlinkPostFromEvent('post-1', 'event-1')).rejects.toMatchObject({
44
53
  code: 'DATABASE_ERROR',
45
54
  });
@@ -47,18 +56,22 @@ describe('EventPostLinkService (Unit)', () => {
47
56
  });
48
57
  describe('getEventRelatedToPost()', () => {
49
58
  it('should return the event id when a link exists', async () => {
50
- mockRepository.getEventRelatedToPost.mockResolvedValue('event-1');
59
+ const getEventRelatedToPostSpy = jest
60
+ .spyOn(mockRepository, 'getEventRelatedToPost')
61
+ .mockResolvedValue('event-1');
51
62
  const result = await service.getEventRelatedToPost('post-1');
52
63
  expect(result).toBe('event-1');
53
- expect(mockRepository.getEventRelatedToPost).toHaveBeenCalledWith('post-1');
64
+ expect(getEventRelatedToPostSpy).toHaveBeenCalledWith('post-1');
54
65
  });
55
66
  it('should return null when no event is linked to the post', async () => {
56
- mockRepository.getEventRelatedToPost.mockResolvedValue(null);
67
+ jest.spyOn(mockRepository, 'getEventRelatedToPost').mockResolvedValue(null);
57
68
  const result = await service.getEventRelatedToPost('post-unlinked');
58
69
  expect(result).toBeNull();
59
70
  });
60
71
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
61
- mockRepository.getEventRelatedToPost.mockRejectedValue(new Error('Query failed'));
72
+ jest
73
+ .spyOn(mockRepository, 'getEventRelatedToPost')
74
+ .mockRejectedValue(new Error('Query failed'));
62
75
  await expect(service.getEventRelatedToPost('post-1')).rejects.toMatchObject({
63
76
  code: 'DATABASE_ERROR',
64
77
  });
@@ -67,18 +80,22 @@ describe('EventPostLinkService (Unit)', () => {
67
80
  describe('getEventPosts()', () => {
68
81
  it('should return paginated post ids for the event', async () => {
69
82
  const expected = PaginatedIdsFactory.buildWithRandomIds(3);
70
- mockRepository.getEventPosts.mockResolvedValue(expected);
83
+ const getEventPostsSpy = jest
84
+ .spyOn(mockRepository, 'getEventPosts')
85
+ .mockResolvedValue(expected);
71
86
  const result = await service.getEventPosts('event-1', PAGINATION);
72
87
  expect(result).toEqual(expected);
73
- expect(mockRepository.getEventPosts).toHaveBeenCalledWith('event-1', PAGINATION);
88
+ expect(getEventPostsSpy).toHaveBeenCalledWith('event-1', PAGINATION);
74
89
  });
75
90
  it('should return empty result when event has no linked posts', async () => {
76
- mockRepository.getEventPosts.mockResolvedValue(PaginatedIdsFactory.buildEmpty());
91
+ jest
92
+ .spyOn(mockRepository, 'getEventPosts')
93
+ .mockResolvedValue(PaginatedIdsFactory.buildEmpty());
77
94
  const result = await service.getEventPosts('event-1', PAGINATION);
78
95
  expect(result.ids).toHaveLength(0);
79
96
  });
80
97
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
81
- mockRepository.getEventPosts.mockRejectedValue(new Error('Query failed'));
98
+ jest.spyOn(mockRepository, 'getEventPosts').mockRejectedValue(new Error('Query failed'));
82
99
  await expect(service.getEventPosts('event-1', PAGINATION)).rejects.toMatchObject({
83
100
  code: 'DATABASE_ERROR',
84
101
  });
@@ -1 +1 @@
1
- {"version":3,"file":"event-post-link.service.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/event-post-link.service.unit.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-post-link.service.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/event-post-link.service.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeEach } from '@jest/globals';
1
+ import { jest, describe, it, expect, beforeEach, afterEach } from '@jest/globals';
2
2
  import { InteractionService } from '../../services/interaction.service.js';
3
3
  import { createInteractionRepositoryMock } from '../__test-utils__/mocks/interaction.repository.mock.js';
4
4
  import { PaginatedIdsFactory } from '../__test-utils__/factories/paginated-ids.factory.js';
@@ -10,29 +10,32 @@ describe('InteractionService (Unit)', () => {
10
10
  mockRepository = createInteractionRepositoryMock();
11
11
  service = new InteractionService(mockRepository);
12
12
  });
13
+ afterEach(() => {
14
+ jest.restoreAllMocks();
15
+ });
13
16
  describe('likePost()', () => {
14
17
  it('should call repository.createLike with correct args if not exists', async () => {
15
- mockRepository.likeExists.mockResolvedValue(false);
16
- mockRepository.createLike.mockResolvedValue(undefined);
18
+ const likeExistsSpy = jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(false);
19
+ const createLikeSpy = jest.spyOn(mockRepository, 'createLike').mockResolvedValue(undefined);
17
20
  await service.likePost('user-1', 'post-1');
18
- expect(mockRepository.likeExists).toHaveBeenCalledWith('user-1', 'post-1');
19
- expect(mockRepository.createLike).toHaveBeenCalledWith('user-1', 'post-1');
21
+ expect(likeExistsSpy).toHaveBeenCalledWith('user-1', 'post-1');
22
+ expect(createLikeSpy).toHaveBeenCalledWith('user-1', 'post-1');
20
23
  });
21
24
  it('should throw SOCIAL_RELATIONSHIP_ALREADY_EXISTS if already liked', async () => {
22
- mockRepository.likeExists.mockResolvedValue(true);
25
+ jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(true);
23
26
  await expect(service.likePost('user-1', 'post-1')).rejects.toMatchObject({
24
27
  code: 'CONFLICT',
25
28
  });
26
29
  });
27
30
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
28
- mockRepository.likeExists.mockResolvedValue(false);
29
- mockRepository.createLike.mockRejectedValue(new Error('Merge failed'));
31
+ jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(false);
32
+ jest.spyOn(mockRepository, 'createLike').mockRejectedValue(new Error('Merge failed'));
30
33
  await expect(service.likePost('user-1', 'post-1')).rejects.toMatchObject({
31
34
  code: 'DATABASE_ERROR',
32
35
  });
33
36
  });
34
37
  it('should rethrow a BaseError without wrapping', async () => {
35
- mockRepository.createLike.mockRejectedValue({
38
+ jest.spyOn(mockRepository, 'createLike').mockRejectedValue({
36
39
  code: 'DATABASE_QUERY_ERROR',
37
40
  isBaseError: true,
38
41
  });
@@ -43,21 +46,21 @@ describe('InteractionService (Unit)', () => {
43
46
  });
44
47
  describe('unlikePost()', () => {
45
48
  it('should call repository.deleteLike with correct args if exists', async () => {
46
- mockRepository.likeExists.mockResolvedValue(true);
47
- mockRepository.deleteLike.mockResolvedValue(undefined);
49
+ const likeExistsSpy = jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(true);
50
+ const deleteLikeSpy = jest.spyOn(mockRepository, 'deleteLike').mockResolvedValue(undefined);
48
51
  await service.unlikePost('user-1', 'post-1');
49
- expect(mockRepository.likeExists).toHaveBeenCalledWith('user-1', 'post-1');
50
- expect(mockRepository.deleteLike).toHaveBeenCalledWith('user-1', 'post-1');
52
+ expect(likeExistsSpy).toHaveBeenCalledWith('user-1', 'post-1');
53
+ expect(deleteLikeSpy).toHaveBeenCalledWith('user-1', 'post-1');
51
54
  });
52
55
  it('should throw SOCIAL_RELATIONSHIP_NOT_FOUND if not liked', async () => {
53
- mockRepository.likeExists.mockResolvedValue(false);
56
+ jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(false);
54
57
  await expect(service.unlikePost('user-1', 'post-1')).rejects.toMatchObject({
55
58
  code: 'NOT_FOUND',
56
59
  });
57
60
  });
58
61
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
59
- mockRepository.likeExists.mockResolvedValue(true);
60
- mockRepository.deleteLike.mockRejectedValue(new Error('Delete failed'));
62
+ jest.spyOn(mockRepository, 'likeExists').mockResolvedValue(true);
63
+ jest.spyOn(mockRepository, 'deleteLike').mockRejectedValue(new Error('Delete failed'));
61
64
  await expect(service.unlikePost('user-1', 'post-1')).rejects.toMatchObject({
62
65
  code: 'DATABASE_ERROR',
63
66
  });
@@ -66,18 +69,18 @@ describe('InteractionService (Unit)', () => {
66
69
  describe('getUserLikes()', () => {
67
70
  it('should return paginated liked post ids', async () => {
68
71
  const expected = PaginatedIdsFactory.buildWithRandomIds(4);
69
- mockRepository.getUserLikes.mockResolvedValue(expected);
72
+ const getUserLikesSpy = jest.spyOn(mockRepository, 'getUserLikes').mockResolvedValue(expected);
70
73
  const result = await service.getUserLikes('user-1', PAGINATION);
71
74
  expect(result).toEqual(expected);
72
- expect(mockRepository.getUserLikes).toHaveBeenCalledWith('user-1', PAGINATION);
75
+ expect(getUserLikesSpy).toHaveBeenCalledWith('user-1', PAGINATION);
73
76
  });
74
77
  it('should return empty result when user has no likes', async () => {
75
- mockRepository.getUserLikes.mockResolvedValue(PaginatedIdsFactory.buildEmpty());
78
+ jest.spyOn(mockRepository, 'getUserLikes').mockResolvedValue(PaginatedIdsFactory.buildEmpty());
76
79
  const result = await service.getUserLikes('user-1', PAGINATION);
77
80
  expect(result.ids).toHaveLength(0);
78
81
  });
79
82
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
80
- mockRepository.getUserLikes.mockRejectedValue(new Error('Query failed'));
83
+ jest.spyOn(mockRepository, 'getUserLikes').mockRejectedValue(new Error('Query failed'));
81
84
  await expect(service.getUserLikes('user-1', PAGINATION)).rejects.toMatchObject({
82
85
  code: 'DATABASE_ERROR',
83
86
  });
@@ -86,18 +89,18 @@ describe('InteractionService (Unit)', () => {
86
89
  describe('getPostLikers()', () => {
87
90
  it('should return paginated user ids who liked the post', async () => {
88
91
  const expected = PaginatedIdsFactory.buildWithRandomIds(2);
89
- mockRepository.getPostLikers.mockResolvedValue(expected);
92
+ const getPostLikersSpy = jest.spyOn(mockRepository, 'getPostLikers').mockResolvedValue(expected);
90
93
  const result = await service.getPostLikers('post-1', PAGINATION);
91
94
  expect(result).toEqual(expected);
92
- expect(mockRepository.getPostLikers).toHaveBeenCalledWith('post-1', PAGINATION);
95
+ expect(getPostLikersSpy).toHaveBeenCalledWith('post-1', PAGINATION);
93
96
  });
94
97
  it('should return empty result when post has no likers', async () => {
95
- mockRepository.getPostLikers.mockResolvedValue(PaginatedIdsFactory.buildEmpty());
98
+ jest.spyOn(mockRepository, 'getPostLikers').mockResolvedValue(PaginatedIdsFactory.buildEmpty());
96
99
  const result = await service.getPostLikers('post-1', PAGINATION);
97
100
  expect(result.ids).toHaveLength(0);
98
101
  });
99
102
  it('should throw DATABASE_ERROR on a generic repository failure', async () => {
100
- mockRepository.getPostLikers.mockRejectedValue(new Error('Query failed'));
103
+ jest.spyOn(mockRepository, 'getPostLikers').mockRejectedValue(new Error('Query failed'));
101
104
  await expect(service.getPostLikers('post-1', PAGINATION)).rejects.toMatchObject({
102
105
  code: 'DATABASE_ERROR',
103
106
  });
@@ -1 +1 @@
1
- {"version":3,"file":"interaction.service.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/interaction.service.unit.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interaction.service.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/interaction.service.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -35,34 +35,37 @@ describe('Neo4jBaseRepository (Unit)', () => {
35
35
  describe('read()', () => {
36
36
  it('should throw DATABASE_QUERY_ERROR when the driver fails', async () => {
37
37
  const errorMsg = 'Cypher syntax error';
38
- mockSession.run.mockRejectedValue(new Error(errorMsg));
38
+ jest.spyOn(mockSession, 'run').mockRejectedValue(new Error(errorMsg));
39
+ const closeSpy = jest.spyOn(mockSession, 'close');
39
40
  await expect(repository.testRead('MATCH (n) RETURN n')).rejects.toMatchObject({
40
41
  code: 'DATABASE_QUERY_ERROR',
41
42
  message: expect.stringContaining(errorMsg),
42
43
  });
43
- expect(mockSession.close).toHaveBeenCalled();
44
+ expect(closeSpy).toHaveBeenCalled();
44
45
  });
45
46
  });
46
47
  describe('write()', () => {
47
48
  it('should throw DATABASE_QUERY_ERROR when the driver fails', async () => {
48
49
  const errorMsg = 'Constraint violation';
49
- mockSession.run.mockRejectedValue(new Error(errorMsg));
50
+ jest.spyOn(mockSession, 'run').mockRejectedValue(new Error(errorMsg));
51
+ const closeSpy = jest.spyOn(mockSession, 'close');
50
52
  await expect(repository.testWrite('CREATE (n:User { id: "1" })')).rejects.toMatchObject({
51
53
  code: 'DATABASE_QUERY_ERROR',
52
54
  message: expect.stringContaining(errorMsg),
53
55
  });
54
- expect(mockSession.close).toHaveBeenCalled();
56
+ expect(closeSpy).toHaveBeenCalled();
55
57
  });
56
58
  });
57
59
  describe('readPaginated()', () => {
58
60
  it('should throw DATABASE_QUERY_ERROR when the driver fails on data query', async () => {
59
61
  const errorMsg = 'Pagination query failed';
60
- mockSession.run.mockRejectedValue(new Error(errorMsg));
62
+ jest.spyOn(mockSession, 'run').mockRejectedValue(new Error(errorMsg));
63
+ const closeSpy = jest.spyOn(mockSession, 'close');
61
64
  await expect(repository.testReadPaginated('MATCH (n) RETURN n', 'MATCH (n) RETURN count(n)')).rejects.toMatchObject({
62
65
  code: 'DATABASE_QUERY_ERROR',
63
66
  message: expect.stringContaining(errorMsg),
64
67
  });
65
- expect(mockSession.close).toHaveBeenCalled();
68
+ expect(closeSpy).toHaveBeenCalled();
66
69
  });
67
70
  });
68
71
  });
@@ -1 +1 @@
1
- {"version":3,"file":"neo4j-base.repository.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/neo4j-base.repository.unit.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"neo4j-base.repository.unit.spec.js","sourceRoot":"","sources":["../../../src/test/unit/neo4j-base.repository.unit.spec.ts"],"names":[],"mappings":"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"}