@volontariapp/database 1.8.0-snap-effd3b6 → 1.8.0-snap-bbc2e76

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
@@ -27,6 +27,18 @@
27
27
  - Updated dependencies []:
28
28
  - @volontariapp/logger@0.2.3
29
29
 
30
+ ## 1.5.0
31
+
32
+ ### Minor Changes
33
+
34
+ - patch database update
35
+
36
+ ## 1.4.0
37
+
38
+ ### Minor Changes
39
+
40
+ - fix: update
41
+
30
42
  ## 1.3.0
31
43
 
32
44
  ### Minor Changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=outbox-extended.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox-extended.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/core/outbox-extended.int.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach, jest } from '@jest/globals';
2
+ import { testDataSource, initializeTestDb, closeTestDb } from '../data-source.js';
3
+ import { databaseMapper } from '../../core/mapper.service.js';
4
+ import { OutboxStatus } from '../../outbox/types/outbox.status.js';
5
+ import { makeExtendedOutboxEvent } from '../utils/helpers/extended-outbox-event.helper.js';
6
+ import { TestExtendedOutboxWriter } from '../utils/repositories/outbox-extended-test.repository.js';
7
+ import { ExtendedOutboxEntity } from '../example/entities/extended-outbox.entity.js';
8
+ import { ExtendedOutboxModel } from '../example/models/extended-outbox.model.js';
9
+ import { Logger } from '@volontariapp/logger';
10
+ describe('Outbox Writer with extended model/entity (Full Integration)', () => {
11
+ let outboxWriter;
12
+ const logger = new Logger({ minLevel: 'fatal' });
13
+ beforeAll(async () => {
14
+ await initializeTestDb();
15
+ databaseMapper.registerBidirectional(ExtendedOutboxModel, ExtendedOutboxEntity);
16
+ outboxWriter = new TestExtendedOutboxWriter(logger, testDataSource.getRepository(ExtendedOutboxModel));
17
+ });
18
+ afterAll(async () => {
19
+ await closeTestDb();
20
+ });
21
+ beforeEach(async () => {
22
+ await testDataSource.getRepository(ExtendedOutboxModel).createQueryBuilder().delete().execute();
23
+ jest.spyOn(logger, 'info').mockImplementation(() => { });
24
+ jest.spyOn(logger, 'warn').mockImplementation(() => { });
25
+ jest.spyOn(logger, 'error').mockImplementation(() => { });
26
+ });
27
+ it('create() should persist an extended outbox entity', async () => {
28
+ const event = makeExtendedOutboxEvent({
29
+ type: 'extended.created',
30
+ channel: 'sms',
31
+ });
32
+ await outboxWriter.create(event);
33
+ const row = await testDataSource
34
+ .getRepository(ExtendedOutboxModel)
35
+ .findOneByOrFail({ type: 'extended.created' });
36
+ expect(row.channel).toBe('sms');
37
+ });
38
+ it('createMany() should persist extended outbox entities', async () => {
39
+ const events = [
40
+ makeExtendedOutboxEvent({
41
+ type: 'extended.created',
42
+ createdAt: new Date(Date.now() - 60_000),
43
+ channel: 'sms',
44
+ }),
45
+ makeExtendedOutboxEvent({
46
+ type: 'extended.updated',
47
+ createdAt: new Date(Date.now() - 30_000),
48
+ channel: 'email',
49
+ }),
50
+ ];
51
+ await outboxWriter.createMany(events);
52
+ const rows = await testDataSource
53
+ .getRepository(ExtendedOutboxModel)
54
+ .find({ order: { type: 'ASC' } });
55
+ expect(rows).toHaveLength(2);
56
+ expect(rows[0].channel).toBe('sms');
57
+ expect(rows[1].channel).toBe('email');
58
+ });
59
+ it('update() should persist channel and status updates on extended entities', async () => {
60
+ const event = makeExtendedOutboxEvent({
61
+ type: 'extended.to-update',
62
+ channel: 'push',
63
+ });
64
+ await outboxWriter.create(event);
65
+ const created = await testDataSource
66
+ .getRepository(ExtendedOutboxModel)
67
+ .findOneByOrFail({ type: 'extended.to-update' });
68
+ created.status = OutboxStatus.PROCESSING;
69
+ created.attempts = 2;
70
+ created.channel = 'sms';
71
+ const toUpdate = makeExtendedOutboxEvent(created);
72
+ await outboxWriter.update(toUpdate);
73
+ const updated = await testDataSource
74
+ .getRepository(ExtendedOutboxModel)
75
+ .findOneByOrFail({ id: created.id });
76
+ expect(updated.status).toBe(OutboxStatus.PROCESSING);
77
+ expect(updated.attempts).toBe(2);
78
+ expect(updated.channel).toBe('sms');
79
+ });
80
+ it('delete() should remove an extended outbox entity', async () => {
81
+ const event = makeExtendedOutboxEvent({
82
+ type: 'extended.to-delete',
83
+ channel: 'sms',
84
+ });
85
+ await outboxWriter.create(event);
86
+ const created = await testDataSource
87
+ .getRepository(ExtendedOutboxModel)
88
+ .findOneByOrFail({ type: 'extended.to-delete' });
89
+ await outboxWriter.delete(created.id);
90
+ const deleted = await testDataSource
91
+ .getRepository(ExtendedOutboxModel)
92
+ .findOneBy({ id: created.id });
93
+ expect(deleted).toBeNull();
94
+ });
95
+ });
96
+ //# sourceMappingURL=outbox-extended.int.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox-extended.int.spec.js","sourceRoot":"","sources":["../../../src/test/core/outbox-extended.int.spec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { Repository } from 'typeorm';
2
+ import type { Logger } from '@volontariapp/logger';
2
3
  import { OutboxWriter } from '../../../outbox/writers/outbox.writer.js';
3
4
  import { ExtendedOutboxEntity } from '../../example/entities/extended-outbox.entity.js';
4
5
  import { ExtendedOutboxModel } from '../../example/models/extended-outbox.model.js';
5
6
  export declare class TestExtendedOutboxWriter extends OutboxWriter<ExtendedOutboxModel, ExtendedOutboxEntity> {
6
- constructor(logger: unknown, repository: Repository<ExtendedOutboxModel>);
7
+ constructor(logger: Logger, repository: Repository<ExtendedOutboxModel>);
7
8
  }
8
9
  //# sourceMappingURL=outbox-extended-test.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"outbox-extended-test.repository.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/repositories/outbox-extended-test.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAYpF,qBAAa,wBAAyB,SAAQ,YAAY,CACxD,mBAAmB,EACnB,oBAAoB,CACrB;gBACa,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,mBAAmB,CAAC;CAGzE"}
1
+ {"version":3,"file":"outbox-extended-test.repository.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/repositories/outbox-extended-test.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAYpF,qBAAa,wBAAyB,SAAQ,YAAY,CACxD,mBAAmB,EACnB,oBAAoB,CACrB;gBACa,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,mBAAmB,CAAC;CAGxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"outbox-extended-test.repository.js","sourceRoot":"","sources":["../../../../src/test/utils/repositories/outbox-extended-test.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAEpF,MAAM,4BAA6B,SAAQ,cAI1C;IACC,YAAY,UAA2C;QACrD,KAAK,CAAC,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,YAG7C;IACC,YAAY,MAAe,EAAE,UAA2C;QACtE,KAAK,CAAC,MAAe,EAAE,IAAI,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;CACF"}
1
+ {"version":3,"file":"outbox-extended-test.repository.js","sourceRoot":"","sources":["../../../../src/test/utils/repositories/outbox-extended-test.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAEpF,MAAM,4BAA6B,SAAQ,cAI1C;IACC,YAAY,UAA2C;QACrD,KAAK,CAAC,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,YAG7C;IACC,YAAY,MAAc,EAAE,UAA2C;QACrE,KAAK,CAAC,MAAM,EAAE,IAAI,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volontariapp/database",
3
- "version": "1.8.0-snap-effd3b6",
3
+ "version": "1.8.0-snap-bbc2e76",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -36,8 +36,8 @@
36
36
  "db:down": "docker-compose -f ../../docker-compose.test.yml down"
37
37
  },
38
38
  "dependencies": {
39
- "@volontariapp/bridge": "0.2.9-snap-effd3b6",
40
- "@volontariapp/errors": "0.5.0-snap-effd3b6",
39
+ "@volontariapp/bridge": "0.2.9",
40
+ "@volontariapp/errors": "0.5.0",
41
41
  "@volontariapp/logger": "0.2.3",
42
42
  "class-transformer": "^0.5.1",
43
43
  "class-validator": "^0.14.1",