Added auth and request storage
This commit is contained in:
@@ -7,6 +7,8 @@ import { ApplicationRouteStream } from '../../source/services/route-stream.ts';
|
||||
import type { Database } from '../../source/services/storage/database.ts';
|
||||
import { TestConnection } from '../helpers/test-connection.ts';
|
||||
import { HTTP_STATUS_CODE_NOT_ACCEPTED } from '../../source/constants.ts';
|
||||
import type { AuthSecp256k1 } from '../../source/auth/auth.ts';
|
||||
import { Accounts } from '../../source/auth/accounts.ts';
|
||||
|
||||
const createBroadcasterStub = (): BaseBroadcaster => {
|
||||
return {
|
||||
@@ -17,6 +19,31 @@ const createBroadcasterStub = (): BaseBroadcaster => {
|
||||
} as unknown as BaseBroadcaster;
|
||||
};
|
||||
|
||||
const createAuthStub = (): AuthSecp256k1 => {
|
||||
return {
|
||||
verifySignature: vi.fn().mockImplementation(() => {
|
||||
return true;
|
||||
}),
|
||||
} as unknown as AuthSecp256k1;
|
||||
};
|
||||
|
||||
const createAccountsStub = (): Accounts => {
|
||||
return {
|
||||
getBalance: vi.fn().mockImplementation(() => {
|
||||
return 0;
|
||||
}),
|
||||
setBalance: vi.fn().mockImplementation(() => {
|
||||
return;
|
||||
}),
|
||||
deductBalance: vi.fn().mockImplementation(() => {
|
||||
return;
|
||||
}),
|
||||
hasSufficientBalance: vi.fn().mockImplementation(() => {
|
||||
return true;
|
||||
}),
|
||||
} as unknown as Accounts;
|
||||
};
|
||||
|
||||
describe('DataRoute subscriptions', (): void => {
|
||||
it('subscribes to future resource changes until removal', async (): Promise<void> => {
|
||||
let resolveRemoved: () => void = () => undefined;
|
||||
@@ -31,10 +58,14 @@ describe('DataRoute subscriptions', (): void => {
|
||||
const broadcaster = createBroadcasterStub();
|
||||
vi.mocked(broadcaster.subscribe).mockReturnValue(removed);
|
||||
const connection = new TestConnection(true, false);
|
||||
const stream = new ApplicationRouteStream(connection, {
|
||||
resourceId: [ 'a', 'b' ],
|
||||
});
|
||||
const route = new DataRoute(storage, broadcaster, 0);
|
||||
const stream = new ApplicationRouteStream(
|
||||
connection,
|
||||
{
|
||||
resourceId: [ 'a', 'b' ],
|
||||
},
|
||||
'/data/subscribe',
|
||||
);
|
||||
const route = new DataRoute(storage, broadcaster, createAuthStub(), createAccountsStub(), 0);
|
||||
|
||||
const execution = route.subscribeData(stream);
|
||||
|
||||
@@ -55,8 +86,8 @@ describe('DataRoute subscriptions', (): void => {
|
||||
} as unknown as Database;
|
||||
const broadcaster = createBroadcasterStub();
|
||||
const connection = new TestConnection(true, true);
|
||||
const stream = new ApplicationRouteStream(connection, { resourceId: [ 'a' ] }, 'unsubscribe-1');
|
||||
const route = new DataRoute(storage, broadcaster, 0);
|
||||
const stream = new ApplicationRouteStream(connection, { resourceId: [ 'a' ] }, '/data/unsubscribe', 'unsubscribe-1');
|
||||
const route = new DataRoute(storage, broadcaster, createAuthStub(), createAccountsStub(), 0);
|
||||
|
||||
await route.unsubscribeData(stream);
|
||||
|
||||
@@ -78,10 +109,14 @@ describe('DataRoute subscriptions', (): void => {
|
||||
},
|
||||
} as unknown as Database;
|
||||
const broadcaster = createBroadcasterStub();
|
||||
const stream = new ApplicationRouteStream(new TestConnection(true, false), {
|
||||
resourceId: [ 'a' ],
|
||||
});
|
||||
const route = new DataRoute(storage, broadcaster, 0);
|
||||
const stream = new ApplicationRouteStream(
|
||||
new TestConnection(true, false),
|
||||
{
|
||||
resourceId: [ 'a' ],
|
||||
},
|
||||
'/data/unsubscribe',
|
||||
);
|
||||
const route = new DataRoute(storage, broadcaster, createAuthStub(), createAccountsStub(), 0);
|
||||
|
||||
await expect(route.unsubscribeData(stream)).rejects.toMatchObject({ statusCode: HTTP_STATUS_CODE_NOT_ACCEPTED });
|
||||
expect(broadcaster.unsubscribe).not.toHaveBeenCalled();
|
||||
@@ -97,7 +132,7 @@ describe('DataRoute resource write auth', (): void => {
|
||||
} as unknown as Database;
|
||||
|
||||
const broadcaster = createBroadcasterStub();
|
||||
const route = new DataRoute(storage, broadcaster, 0);
|
||||
const route = new DataRoute(storage, broadcaster, createAuthStub(), createAccountsStub(), 0);
|
||||
|
||||
await expect(route.writeData({
|
||||
connection: new TestConnection(true, true),
|
||||
@@ -115,6 +150,11 @@ describe('DataRoute resource write auth', (): void => {
|
||||
},
|
||||
],
|
||||
},
|
||||
headers: {
|
||||
publicKey: 'public-key',
|
||||
signature: 'signature',
|
||||
timestamp: Date.now(),
|
||||
},
|
||||
} as unknown as ApplicationRouteStream)).rejects.toBeInstanceOf(UnauthorizedError);
|
||||
|
||||
expect(storage.db.transaction).not.toHaveBeenCalled();
|
||||
|
||||
Reference in New Issue
Block a user