This commit is contained in:
Elio Bischof
2023-06-05 13:02:36 +02:00
parent c71046dc66
commit 4ca1d60f0f
38 changed files with 10214 additions and 226 deletions

View File

@@ -22,6 +22,7 @@
},
"devDependencies": {
"@bufbuild/buf": "^1.14.0",
"@mocks-server/main": "^4.1.0",
"@types/jest": "^29.5.1",
"@zitadel/tsconfig": "workspace:*",
"eslint": "^7.32.0",

View File

@@ -0,0 +1,57 @@
import { CallOptions, ClientMiddlewareCall, Metadata, MethodDescriptor } from "nice-grpc";
import { authMiddleware } from "./middleware";
describe('authMiddleware', () => {
const scenarios = [
{
name: 'should add authorization if metadata is undefined',
initialMetadata: undefined,
expectedMetadata: new Metadata().set("authorization", "Bearer mock-token"),
token: "mock-token"
},
{
name: 'should add authorization if metadata exists but no authorization',
initialMetadata: new Metadata().set("other-key", "other-value"),
expectedMetadata: new Metadata().set("other-key", "other-value").set("authorization", "Bearer mock-token"),
token: "mock-token"
},
{
name: 'should not modify authorization if it already exists',
initialMetadata: new Metadata().set("authorization", "Bearer initial-token"),
expectedMetadata: new Metadata().set("authorization", "Bearer initial-token"),
token: "mock-token"
},
];
scenarios.forEach(({ name, initialMetadata, expectedMetadata, token }) => {
it(name, async () => {
const mockNext = jest.fn().mockImplementation(async function*() { });
const mockRequest = {}; // Ersetze dies mit einem geeigneten Mock Request-Objekt
const mockMethodDescriptor: MethodDescriptor = {
options: {idempotencyLevel: undefined},
path: '',
requestStream: false,
responseStream: false,
};
const mockCall: ClientMiddlewareCall<unknown, unknown> = {
method: mockMethodDescriptor,
requestStream: false, // Setze diese Werte entsprechend deiner Testbedingungen
responseStream: false,
request: mockRequest,
next: mockNext,
};
const options: CallOptions = {
metadata: initialMetadata
};
await authMiddleware(token)(mockCall, options).next();
expect(mockNext).toHaveBeenCalledTimes(1);
const actualMetadata = mockNext.mock.calls[0][1].metadata;
expect(actualMetadata?.get('authorization')).toEqual(expectedMetadata.get('authorization'));
});
});
});

View File

@@ -1,7 +1,7 @@
import { CallOptions, ClientMiddlewareCall, Metadata } from "nice-grpc";
import { CallOptions, ClientMiddleware, ClientMiddlewareCall, Metadata } from "nice-grpc";
export const authMiddleware = (token: string) =>
async function* <Request, Response>(
export function authMiddleware (token: string): ClientMiddleware {
return async function* <Request, Response>(
call: ClientMiddlewareCall<Request, Response>,
options: CallOptions
) {
@@ -12,6 +12,7 @@ export const authMiddleware = (token: string) =>
return yield* call.next(call.request, options);
};
}
export const orgMetadata = (orgId: string) =>
new Metadata({ "x-zitadel-orgid": orgId });