Skip to content

Commit bc827d7

Browse files
committed
messaging: follow: support providing additional fields
1 parent 8d7d723 commit bc827d7

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

messaging/follow.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const cloneDeep = require('lodash.clonedeep')
22
const { Metadata } = require('./metadata')
33

4-
exports.follow = (previous, ClassOfNext) => {
5-
const data = cloneDeep(previous)
4+
exports.follow = (previous, ClassOfNext, additionalFields) => {
5+
const data = Object.assign(cloneDeep(previous), additionalFields)
66

77
let next
88
if (ClassOfNext.create) {

messaging/test/follow.test.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ const {
66
} = require('../examples')
77

88
class SomeMessage {}
9+
class SomeClassWithCreate {}
10+
SomeClassWithCreate.create = (fields) => {
11+
const instance = new SomeClassWithCreate()
12+
instance.fields = fields
13+
return instance
14+
}
915

1016
describe('follow', () => {
1117
describe('metadata', () => {
@@ -74,23 +80,44 @@ describe('follow', () => {
7480
})
7581

7682
describe('message class with create method', () => {
77-
const SomeClassWithCreate = class {}
78-
SomeClassWithCreate.create = () => {
79-
return new SomeClassWithCreate()
80-
}
81-
8283
const previous = exampleMessage()
8384
const next = follow(previous, SomeClassWithCreate)
8485

8586
it('no fields are copied', () => {
8687
expect(next.someAttribute).toBeUndefined()
8788
})
8889

90+
it('fields are supplied to create method', () => {
91+
expect(next.fields).toEqual(previous)
92+
})
93+
8994
it('returns the created message instance', () => {
9095
expect(next).toBeInstanceOf(SomeClassWithCreate)
9196
})
9297
})
9398

99+
describe('additional fields', () => {
100+
describe('message class has no create method', () => {
101+
it('includes additional field', () => {
102+
const previous = exampleMessage()
103+
const additional = exampleRandomValue()
104+
const next = follow(previous, SomeMessage, { additional })
105+
106+
expect(next.additional).toEqual(additional)
107+
})
108+
})
109+
110+
describe('message class has create method', () => {
111+
it('includes additional field', () => {
112+
const previous = exampleMessage()
113+
const additional = exampleRandomValue()
114+
const next = follow(previous, SomeClassWithCreate, { additional })
115+
116+
expect(next.fields.additional).toEqual(additional)
117+
})
118+
})
119+
})
120+
94121
describe('message with no metadata', () => {
95122
it('followed messages has new metadata ', () => {
96123
const previous = exampleMessage()

0 commit comments

Comments
 (0)