Skip to content

Commit bd09da5

Browse files
committed
Fixed gRPC state.set with object
1 parent d753aae commit bd09da5

File tree

4 files changed

+116
-25
lines changed

4 files changed

+116
-25
lines changed

src/implementation/Client/GRPCClient/state.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default class GRPCClientState implements IClientState {
2121
for (const stateObject of stateObjects) {
2222
const si = new StateItem();
2323
si.setKey(stateObject.key);
24-
si.setValue(Buffer.from(stateObject.value, "utf-8"));
24+
si.setValue(Buffer.from(typeof stateObject.value === "object" ? JSON.stringify(stateObject.value) : stateObject.value.toString(), "utf-8"));
2525
stateList.push(si);
2626
}
2727

@@ -89,11 +89,20 @@ export default class GRPCClientState implements IClientState {
8989
// https://docs.dapr.io/reference/api/state_api/#http-response-2
9090
const items = res.getItemsList();
9191

92-
return resolve(items.map(i => ({
93-
key: i.getKey(),
94-
data: Buffer.from(i.getData()).toString(),
95-
etag: i.getEtag()
96-
})));
92+
return resolve(items.map(i => {
93+
const resDataStr = Buffer.from(i.getData()).toString()
94+
try {
95+
var data = JSON.parse(resDataStr);
96+
} catch(e) {
97+
data = resDataStr;
98+
}
99+
100+
return {
101+
key: i.getKey(),
102+
data,
103+
etag: i.getEtag()
104+
}
105+
}));
97106
});
98107
})
99108
}

src/types/KeyValuePair.type.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export type KeyValuePairType= {
22
key: string;
3-
value: string;
3+
value: any;
44
}

test/e2e/main.grpc.test.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,41 @@ describe('grpc/main', () => {
108108
},
109109
{
110110
key: "key-2",
111-
value: "value-2"
111+
value: 2
112112
},
113113
{
114114
key: "key-3",
115-
value: "value-3"
115+
value: true
116+
},
117+
{
118+
key: "key-4",
119+
value: {
120+
nested: {
121+
str: "string",
122+
num: 123
123+
}
124+
}
116125
}
117126
]);
118127

119-
const res = await client.state.get("state-redis", "key-1");
120-
expect(res).toEqual("value-1");
128+
const res = await Promise.all([
129+
client.state.get("state-redis", "key-1"),
130+
client.state.get("state-redis", "key-2"),
131+
client.state.get("state-redis", "key-3"),
132+
client.state.get("state-redis", "key-4")
133+
])
134+
135+
expect(res).toEqual([
136+
"value-1",
137+
2,
138+
true,
139+
{
140+
nested: {
141+
str: "string",
142+
num: 123
143+
}
144+
}
145+
]);
121146
});
122147

123148
it('should be able to get the state in bulk', async () => {
@@ -128,19 +153,35 @@ describe('grpc/main', () => {
128153
},
129154
{
130155
key: "key-2",
131-
value: "value-2"
156+
value: 2
132157
},
133158
{
134159
key: "key-3",
135-
value: "value-3"
160+
value: true
161+
},
162+
{
163+
key: "key-4",
164+
value: {
165+
nested: {
166+
str: "string",
167+
num: 123
168+
}
169+
}
136170
}
137171
]);
138172

139-
const res = await client.state.getBulk("state-redis", ["key-3", "key-2"]);
173+
const res = await client.state.getBulk("state-redis", ["key-3", "key-2", "key-1", "key-4"]);
140174

141175
expect(res).toEqual(expect.arrayContaining([
142-
expect.objectContaining({ key: "key-2", data: "value-2" }),
143-
expect.objectContaining({ key: "key-3", data: "value-3" })
176+
expect.objectContaining({ key: "key-1", data: "value-1" }),
177+
expect.objectContaining({ key: "key-2", data: 2 }),
178+
expect.objectContaining({ key: "key-3", data: true }),
179+
expect.objectContaining({ key: "key-4", data: {
180+
nested: {
181+
str: "string",
182+
num: 123
183+
}
184+
}})
144185
]))
145186
});
146187

test/e2e/main.http.test.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,41 @@ describe('http/main', () => {
108108
},
109109
{
110110
key: "key-2",
111-
value: "value-2"
111+
value: 2
112112
},
113113
{
114114
key: "key-3",
115-
value: "value-3"
115+
value: true
116+
},
117+
{
118+
key: "key-4",
119+
value: {
120+
nested: {
121+
str: "string",
122+
num: 123
123+
}
124+
}
116125
}
117126
]);
118127

119-
const res = await client.state.get("state-redis", "key-1");
120-
expect(res).toEqual("value-1");
128+
const res = await Promise.all([
129+
client.state.get("state-redis", "key-1"),
130+
client.state.get("state-redis", "key-2"),
131+
client.state.get("state-redis", "key-3"),
132+
client.state.get("state-redis", "key-4")
133+
])
134+
135+
expect(res).toEqual([
136+
"value-1",
137+
2,
138+
true,
139+
{
140+
nested: {
141+
str: "string",
142+
num: 123
143+
}
144+
}
145+
]);
121146
});
122147

123148
it('should be able to get the state in bulk', async () => {
@@ -128,19 +153,35 @@ describe('http/main', () => {
128153
},
129154
{
130155
key: "key-2",
131-
value: "value-2"
156+
value: 2
132157
},
133158
{
134159
key: "key-3",
135-
value: "value-3"
160+
value: true
161+
},
162+
{
163+
key: "key-4",
164+
value: {
165+
nested: {
166+
str: "string",
167+
num: 123
168+
}
169+
}
136170
}
137171
]);
138172

139-
const res = await client.state.getBulk("state-redis", ["key-3", "key-2"]);
173+
const res = await client.state.getBulk("state-redis", ["key-3", "key-2", "key-1", "key-4"]);
140174

141175
expect(res).toEqual(expect.arrayContaining([
142-
expect.objectContaining({ key: "key-2", data: "value-2" }),
143-
expect.objectContaining({ key: "key-3", data: "value-3" })
176+
expect.objectContaining({ key: "key-1", data: "value-1" }),
177+
expect.objectContaining({ key: "key-2", data: 2 }),
178+
expect.objectContaining({ key: "key-3", data: true }),
179+
expect.objectContaining({ key: "key-4", data: {
180+
nested: {
181+
str: "string",
182+
num: 123
183+
}
184+
}})
144185
]))
145186
});
146187

0 commit comments

Comments
 (0)