1- import { expect , Page } from '@playwright/test' ;
2- import { grpc } from '@improbable-eng/grpc-web' ;
3- import {
4- GrpcErrorResponse ,
5- grpcResponseToBuffer ,
6- GrpcSuccessResponse ,
7- } from '../base' ;
8- import { Request } from 'playwright-core' ;
1+ import { expect , Page } from '@playwright/test' ;
2+ import { grpc } from '@improbable-eng/grpc-web' ;
3+ import { GrpcResponse , grpcResponseToBuffer , } from '../base' ;
4+ import { Request } from 'playwright-core' ;
95
106export interface UnaryMethodDefinitionish
117 extends grpc . UnaryMethodDefinition < any , any > {
@@ -41,7 +37,7 @@ function unframeRequest(requestBody: Uint8Array): Uint8Array {
4137export function mockGrpcUnary (
4238 page : Page ,
4339 rpc : UnaryMethodDefinitionish ,
44- response : GrpcSuccessResponse | GrpcErrorResponse
40+ response : GrpcResponse | ( ( request : Uint8Array | null ) => GrpcResponse )
4541) : MockedGrpcCall {
4642 const url = `/${ rpc . service . serviceName } /${ rpc . methodName } ` ;
4743
@@ -52,11 +48,19 @@ export function mockGrpcUnary(
5248 'ALL gRPC requests should be a POST request'
5349 ) . toBe ( 'POST' ) ;
5450
55- // error messages need to have a zero length message field to be considered valid
56- const grpcResponse = grpcResponseToBuffer ( response ) ;
51+ let grpcResponse : GrpcResponse
52+
53+ if ( typeof response === 'function' ) {
54+ const requestBody = route . request ( ) . postDataBuffer ( ) ;
55+ grpcResponse = response ( ! requestBody ? null : unframeRequest ( requestBody ) ) ;
56+ } else {
57+ grpcResponse = response ;
58+ }
59+
60+ const grpcResponseBody = grpcResponseToBuffer ( grpcResponse )
5761
5862 return route . fulfill ( {
59- body : grpcResponse ,
63+ body : grpcResponseBody ,
6064 contentType : 'application/grpc-web+proto' ,
6165 headers : {
6266 'Access-Control-Allow-Origin' : '*' ,
0 commit comments