feat: add keys path support

Signed-off-by: Dominik Schwank <dominik.schwank@sda.se>
This commit is contained in:
Dominik Schwank
2022-09-01 11:22:42 +02:00
committed by Fredrik Adelöw
parent 31a2403044
commit 8f7e5a7517
4 changed files with 78 additions and 54 deletions
@@ -65,7 +65,7 @@ describe('Persistent Storage API', () => {
server.use(
rest.get(
`${mockBaseUrl}/buckets/:bucket/:key`,
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (_req, res, ctx) => {
return res(ctx.json({ value: 'a' }));
},
@@ -85,13 +85,16 @@ describe('Persistent Storage API', () => {
const dummyValue = 'a';
server.use(
rest.put(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(dummyValue) };
expect(body).toEqual(data);
rest.put(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(dummyValue) };
expect(body).toEqual(data);
return res(ctx.json(data));
}),
return res(ctx.json(data));
},
),
);
await storage.set('my-key', dummyValue);
@@ -105,13 +108,16 @@ describe('Persistent Storage API', () => {
};
server.use(
rest.put(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(dummyValue) };
expect(body).toEqual(data);
rest.put(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(dummyValue) };
expect(body).toEqual(data);
return res(ctx.json(data));
}),
return res(ctx.json(data));
},
),
);
await storage.set('my-key', dummyValue);
@@ -125,13 +131,16 @@ describe('Persistent Storage API', () => {
const mockData = { hello: 'im a great new value' };
server.use(
rest.put(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(mockData) };
expect(body).toEqual(data);
rest.put(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const body = await req.json();
const data = { value: JSON.stringify(mockData) };
expect(body).toEqual(data);
return res(ctx.json(data));
}),
return res(ctx.json(data));
},
),
);
await new Promise<void>(resolve => {
@@ -166,7 +175,7 @@ describe('Persistent Storage API', () => {
server.use(
rest.delete(
`${mockBaseUrl}/buckets/:bucket/:key`,
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (_req, res, ctx) => {
return res(ctx.status(204));
},
@@ -202,23 +211,29 @@ describe('Persistent Storage API', () => {
const selectedKeyNextHandler = jest.fn();
server.use(
rest.put(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const { bucket, key } = req.params;
const { value } = await req.json();
rest.put(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const { bucket, key } = req.params;
const { value } = await req.json();
expect(bucket).toEqual('default.profile.something.deep');
expect(key).toEqual('test2');
expect(bucket).toEqual('default.profile.something.deep');
expect(key).toEqual('test2');
return res(ctx.json({ value }));
}),
rest.get(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const { bucket, key } = req.params;
return res(ctx.json({ value }));
},
),
rest.get(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const { bucket, key } = req.params;
expect(bucket).toEqual('default.profile/something');
expect(key).toEqual('deep/test2');
expect(bucket).toEqual('default.profile/something');
expect(key).toEqual('deep/test2');
return res(ctx.status(404));
}),
return res(ctx.status(404));
},
),
);
// when getting key test2 it will translate to default.profile.something.deep/test2
@@ -259,14 +274,17 @@ describe('Persistent Storage API', () => {
});
server.use(
rest.get(`${mockBaseUrl}/buckets/:bucket/:key`, async (req, res, ctx) => {
const { bucket, key } = req.params;
rest.get(
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (req, res, ctx) => {
const { bucket, key } = req.params;
expect(bucket).toEqual('Test.Mock.Thing');
expect(key).toEqual('key');
expect(bucket).toEqual('Test.Mock.Thing');
expect(key).toEqual('key');
return res(ctx.text('{ invalid: json string }'));
}),
return res(ctx.text('{ invalid: json string }'));
},
),
);
await new Promise<void>(resolve => {
@@ -297,7 +315,7 @@ describe('Persistent Storage API', () => {
server.use(
rest.get(
`${mockBaseUrl}/buckets/:bucket/:key`,
`${mockBaseUrl}/buckets/:bucket/keys/:key`,
async (_req, res, ctx) => {
return res(ctx.text(JSON.stringify({ value: JSON.stringify(data) })));
},
@@ -182,7 +182,7 @@ export class PersistentStorage implements StorageApi {
const baseUrl = await this.discoveryApi.getBaseUrl('user-settings');
const encodedNamespace = encodeURIComponent(this.namespace);
const encodedKey = encodeURIComponent(key);
return `${baseUrl}/buckets/${encodedNamespace}/${encodedKey}`;
return `${baseUrl}/buckets/${encodedNamespace}/keys/${encodedKey}`;
}
private async notifyChanges<T>(snapshot: StorageValueSnapshot<T>) {