fetch-h2-br
Version:
🥐 Brotli decoder to fetch-h2-br
110 lines (80 loc) • 2.36 kB
text/typescript
;
import 'mocha';
import { expect } from 'chai'
import { buffer as getStreamAsBuffer } from 'get-stream'
import { compressStream } from 'iltorb'
import { makeServer } from 'fetch-h2/dist/test/lib/server'
import { fetch, context, disconnectAll, Response } from 'fetch-h2'
import brDecode from '../../'
afterEach( disconnectAll );
function ensureStatusSuccess( response: Response ): Response
{
if ( response.status < 200 || response.status >= 300 )
throw new Error( "Status not 2xx" );
return response;
}
describe( 'basic', ( ) =>
{
it( 'should accept brotli but decode gzip', async ( ) =>
{
const { server, port } = await makeServer( );
const host = 'localhost';
const testData = { foo: "bar" };
const { fetch, disconnectAll } =
context( { decoders: [ brDecode( ) ] } );
const response = ensureStatusSuccess(
await fetch(
`http://localhost:${port}/compressed/gzip`,
{
method: 'POST',
json: testData,
}
)
);
const stream = await response.readable( );
const data = await getStreamAsBuffer( stream );
expect( JSON.parse( data.toString( ) ) ).to.deep.equal( testData );
expect( response.headers.get( 'content-encoding' ) )
.to.equal( 'gzip' );
await disconnectAll( );
await server.shutdown( );
} );
it( 'should accept and decode brotli', async ( ) =>
{
const matchers = [
( { path, stream, headers } ) =>
{
if ( path !== '/compressed-br' )
return false;
const responseHeaders = {
':status': 200,
'content-encoding': 'br',
};
stream.respond( responseHeaders );
stream.pipe( compressStream( ) ).pipe( stream );
return true;
}
];
const { server, port } = await makeServer( { matchers } );
const host = 'localhost';
const testData = { foo: "bar" };
const { fetch, disconnectAll } =
context( { decoders: [ brDecode( ) ] } );
const response = ensureStatusSuccess(
await fetch(
`http://localhost:${port}/compressed-br`,
{
method: 'POST',
json: testData,
}
)
);
const stream = await response.readable( );
const data = await getStreamAsBuffer( stream );
expect( JSON.parse( data.toString( ) ) ).to.deep.equal( testData );
expect( response.headers.get( 'content-encoding' ) )
.to.equal( 'br' );
await disconnectAll( );
await server.shutdown( );
} );
} );