|
1 | 1 | import { ServerGrpc } from '../../server/server-grpc'; |
2 | 2 | import { expect } from 'chai'; |
3 | 3 | import * as sinon from 'sinon'; |
4 | | -import { Observable } from 'rxjs'; |
| 4 | +import { of } from 'rxjs'; |
5 | 5 | import { join } from 'path'; |
6 | 6 | import { InvalidGrpcPackageException } from '../../exceptions/invalid-grpc-package.exception'; |
7 | 7 |
|
@@ -161,6 +161,24 @@ describe('ServerGrpc', () => { |
161 | 161 | await server.createStreamServiceMethod(native)(call, callback); |
162 | 162 | expect(native.called).to.be.true; |
163 | 163 | expect(call.addListener.calledWith('cancelled')).to.be.true; |
| 164 | + expect(call.removeListener.calledWith('cancelled')).to.be.true; |
| 165 | + }); |
| 166 | + |
| 167 | + it(`should close the result observable when receiving an 'cancelled' event from the client`, async () => { |
| 168 | + let cancelCb: () => void; |
| 169 | + const call = { |
| 170 | + write: sinon.stub().onSecondCall().callsFake(() => cancelCb()), |
| 171 | + end: sinon.spy(), |
| 172 | + addListener: (name, cb) => cancelCb = cb, |
| 173 | + removeListener: sinon.spy(), |
| 174 | + }; |
| 175 | + const result$ = of(1, 2, 3); |
| 176 | + const callback = sinon.spy(); |
| 177 | + const native = sinon.stub().returns(new Promise((resolve, reject) => resolve(result$))); |
| 178 | + |
| 179 | + await server.createStreamServiceMethod(native)(call, callback); |
| 180 | + expect(call.write.calledTwice).to.be.true; |
| 181 | + expect(call.end.called).to.be.true; |
164 | 182 | }); |
165 | 183 | }); |
166 | 184 | }); |
|
0 commit comments