Skip to content

Commit 629e6f4

Browse files
authored
fix(lib): include userid to data response from field plugin (#438)
* fix(SHAPE-7741): include userid in field plugin response data * chore(SHAPE-7741): update validation and unit test * chore(SHAPE-7741): update test user id * chore(SHAPE-7741): remove console statement
1 parent e119464 commit 629e6f4

File tree

10 files changed

+215
-1
lines changed

10 files changed

+215
-1
lines changed

packages/field-plugin/src/createFieldPlugin/FieldPluginData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export type FieldPluginData<Content> = {
88
content: Content
99
options: Record<string, string>
1010
spaceId: number | undefined
11+
userId: number | undefined
1112
interfaceLang: string
1213
storyLang: string
1314
story: StoryData

packages/field-plugin/src/createFieldPlugin/createPluginActions/createPluginActions.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ describe('createPluginActions', () => {
7070
interfaceLanguage: 'en',
7171
model: randomString,
7272
spaceId: null,
73+
userId: undefined,
7374
blockId: undefined,
7475
releases: [],
7576
releaseId: undefined,

packages/field-plugin/src/createFieldPlugin/createPluginActions/createPluginMessageListener/handlePluginMessage.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ describe('handlePluginMessage', () => {
6060
interfaceLanguage: 'en',
6161
model: 123,
6262
spaceId: 1234,
63+
userId: 2345,
6364
story: { content: {} },
6465
schema: { options: [], field_type: 'avh', translatable: false },
6566
storyId: 1344,

packages/field-plugin/src/createFieldPlugin/createPluginActions/partialPluginStateFromStateChangeMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const pluginStateFromStateChangeMessage = <Content>(
2323
return {
2424
interfaceLang: message.interfaceLanguage,
2525
spaceId: message.spaceId ?? undefined,
26+
userId: message.userId ?? undefined,
2627
story: message.story ?? undefined,
2728
storyId: message.storyId ?? undefined,
2829
storyLang: message.language === '' ? 'default' : message.language,

packages/field-plugin/src/messaging/pluginMessage/containerToPluginMessage/LoadedMessage.test.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const stub: LoadedMessage = {
55
action: 'loaded',
66
uid: '-preview',
77
spaceId: null,
8+
userId: undefined,
89
model: undefined,
910
isModalOpen: false,
1011
token: null,
@@ -18,7 +19,7 @@ const stub: LoadedMessage = {
1819
releaseId: undefined,
1920
}
2021

21-
describe('StateChangedMessage', () => {
22+
describe('LoadedMessage', () => {
2223
it('should validate', () => {
2324
expect(isLoadedMessage(stub)).toEqual(true)
2425
})
@@ -128,4 +129,38 @@ describe('StateChangedMessage', () => {
128129
).toEqual(true)
129130
})
130131
})
132+
describe('The "userId" property', () => {
133+
it('is a number', () => {
134+
expect(
135+
isLoadedMessage({
136+
...stub,
137+
userId: 123,
138+
}),
139+
).toEqual(true)
140+
})
141+
it('is undefined', () => {
142+
expect(
143+
isLoadedMessage({
144+
...stub,
145+
userId: undefined,
146+
}),
147+
).toEqual(true)
148+
})
149+
it('is not null', () => {
150+
expect(
151+
isLoadedMessage({
152+
...stub,
153+
userId: null,
154+
}),
155+
).toEqual(false)
156+
})
157+
it('is not a string', () => {
158+
expect(
159+
isLoadedMessage({
160+
...stub,
161+
userId: '123',
162+
}),
163+
).toEqual(false)
164+
})
165+
})
131166
})

packages/field-plugin/src/messaging/pluginMessage/containerToPluginMessage/LoadedMessage.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export type LoadedMessage = MessageToPlugin<'loaded'> & {
1313
language: string
1414
interfaceLanguage: string
1515
spaceId: number | null
16+
userId: number | undefined
1617
story: StoryData
1718
storyId: number | undefined
1819
blockId: string | undefined
@@ -33,6 +34,8 @@ export const isLoadedMessage = (data: unknown): data is LoadedMessage =>
3334
typeof data.language === 'string' &&
3435
hasKey(data, 'schema') &&
3536
isFieldPluginSchema(data.schema) &&
37+
hasKey(data, 'userId') &&
38+
(typeof data.userId === 'number' || typeof data.userId === 'undefined') &&
3639
hasKey(data, 'story') &&
3740
isStoryData(data.story) &&
3841
hasKey(data, 'isModalOpen') &&
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
import { isStateMessage, StateChangedMessage } from './StateChangedMessage'
2+
import { FieldPluginSchema } from './FieldPluginSchema'
3+
4+
const stub: StateChangedMessage = {
5+
action: 'state-changed',
6+
uid: '-preview',
7+
spaceId: null,
8+
userId: undefined,
9+
model: undefined,
10+
isModalOpen: false,
11+
token: null,
12+
storyId: undefined,
13+
blockId: undefined,
14+
story: { content: {} },
15+
language: '',
16+
interfaceLanguage: 'en',
17+
schema: { options: [], field_type: 'blah', translatable: false },
18+
releases: [],
19+
releaseId: undefined,
20+
}
21+
22+
describe('StateChangedMessage', () => {
23+
it('should validate', () => {
24+
expect(isStateMessage(stub)).toEqual(true)
25+
})
26+
describe('The "action" property', () => {
27+
it('equals "loaded"', () => {
28+
expect(
29+
isStateMessage({
30+
...stub,
31+
action: 'anotherString',
32+
}),
33+
).toEqual(false)
34+
})
35+
})
36+
describe('the "uid" property', () => {
37+
it('is a string', () => {
38+
expect(
39+
isStateMessage({
40+
...stub,
41+
uid: 'anything',
42+
}),
43+
).toEqual(true)
44+
})
45+
it('is not undefined', () => {
46+
expect(
47+
isStateMessage({
48+
...stub,
49+
uid: undefined,
50+
}),
51+
).toEqual(false)
52+
})
53+
it('is not null', () => {
54+
expect(
55+
isStateMessage({
56+
...stub,
57+
uid: null,
58+
}),
59+
).toEqual(false)
60+
})
61+
it('is not a number', () => {
62+
expect(
63+
isStateMessage({
64+
...stub,
65+
uid: 123,
66+
}),
67+
).toEqual(false)
68+
})
69+
})
70+
71+
describe('the "language" property', () => {
72+
it('is a string', () => {
73+
expect(
74+
isStateMessage({
75+
...stub,
76+
language: 'anything',
77+
}),
78+
).toEqual(true)
79+
})
80+
it('is not undefined', () => {
81+
expect(
82+
isStateMessage({
83+
...stub,
84+
language: undefined,
85+
}),
86+
).toEqual(false)
87+
})
88+
it('is not null', () => {
89+
expect(
90+
isStateMessage({
91+
...stub,
92+
language: null,
93+
}),
94+
).toEqual(false)
95+
})
96+
it('is not a number', () => {
97+
expect(
98+
isStateMessage({
99+
...stub,
100+
language: 123,
101+
}),
102+
).toEqual(false)
103+
})
104+
})
105+
describe('The "schema" property', () => {
106+
it('is required', () => {
107+
expect(
108+
isStateMessage({
109+
...stub,
110+
schema: undefined,
111+
}),
112+
).toEqual(false)
113+
})
114+
it('must be a schema', () => {
115+
expect(
116+
isStateMessage({
117+
...stub,
118+
schema: {
119+
field_type: 'my-field',
120+
options: [
121+
{
122+
name: 'a',
123+
value: 'ab',
124+
},
125+
],
126+
translatable: false,
127+
} as FieldPluginSchema,
128+
}),
129+
).toEqual(true)
130+
})
131+
})
132+
describe('The "userId" property', () => {
133+
it('is a number', () => {
134+
expect(
135+
isStateMessage({
136+
...stub,
137+
userId: 123,
138+
}),
139+
).toEqual(true)
140+
})
141+
it('is undefined', () => {
142+
expect(
143+
isStateMessage({
144+
...stub,
145+
userId: undefined,
146+
}),
147+
).toEqual(true)
148+
})
149+
it('is not null', () => {
150+
expect(
151+
isStateMessage({
152+
...stub,
153+
userId: null,
154+
}),
155+
).toEqual(false)
156+
})
157+
it('is not a string', () => {
158+
expect(
159+
isStateMessage({
160+
...stub,
161+
userId: '123',
162+
}),
163+
).toEqual(false)
164+
})
165+
})
166+
})

packages/field-plugin/src/messaging/pluginMessage/containerToPluginMessage/StateChangedMessage.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export type StateChangedMessage = MessageToPlugin<'state-changed'> & {
1313
language: string
1414
interfaceLanguage: string
1515
spaceId: number | null
16+
userId: number | undefined
1617
story: StoryData
1718
storyId: number | undefined
1819
blockId: string | undefined
@@ -33,6 +34,8 @@ export const isStateMessage = (data: unknown): data is StateChangedMessage =>
3334
typeof data.language === 'string' &&
3435
hasKey(data, 'schema') &&
3536
isFieldPluginSchema(data.schema) &&
37+
hasKey(data, 'userId') &&
38+
(typeof data.userId === 'number' || typeof data.userId === 'undefined') &&
3639
hasKey(data, 'story') &&
3740
isStoryData(data.story) &&
3841
hasKey(data, 'isModalOpen') &&

packages/lib-helpers/test/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const getContainer = (sendToFieldPlugin: (data: unknown) => void) => {
2727
const language = 'default'
2828
const storyId = 'test-story-id'
2929
const spaceId = 'test-space-id'
30+
const userId = 1234
3031
const token = 'test-token'
3132
const story = {
3233
content: {},
@@ -49,6 +50,7 @@ const getContainer = (sendToFieldPlugin: (data: unknown) => void) => {
4950
language,
5051
storyId,
5152
spaceId,
53+
userId,
5254
token,
5355
action,
5456
})

packages/sandbox/src/components/FieldPluginSandbox.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ const useSandbox = (
133133
blockId: undefined,
134134
language,
135135
spaceId: null,
136+
userId: undefined,
136137
story,
137138
storyId: undefined,
138139
token: null,

0 commit comments

Comments
 (0)