it('retries on LEADER_NOT_AVAILABLE errors', async () => { const leaderNotAvailableError = new KafkaJSProtocolError({ message: 'LEADER_NOT_AVAILABLE', type: 'LEADER_NOT_AVAILABLE', code: 5, }) brokerPool.findConnectedBroker = jest.fn(() => brokerPool.seedBroker) jest.spyOn(brokerPool.seedBroker, 'metadata').mockImplementationOnce(() => { throw leaderNotAvailableError }) expect(brokerPool.metadata).toEqual(null) await brokerPool.refreshMetadata([topicName]) expect(brokerPool.metadata).not.toEqual(null) })
describe('Utils > shuffle', () => { it('shuffles', () => { const array = Array(500) .fill() .map((_, i) => i) const shuffled = shuffle(array) expect(shuffled).not.toEqual(array) expect(shuffled).toIncludeSameMembers(array) }) it('returns the same order for single element arrays', () => { expect(shuffle([1])).toEqual([1]) }) it('throws if it receives a non-array', () => { expect(() => shuffle()).toThrowError(TypeError) expect(() => shuffle('foo')).toThrowError(TypeError) expect(() => shuffle({})).toThrowError(TypeError) }) })
describe('#hasConnectedBrokers', () => { it('returns true if the seed broker is connected', async () => { expect(brokerPool.hasConnectedBrokers()).toEqual(false) await brokerPool.connect() expect(brokerPool.hasConnectedBrokers()).toEqual(true) }) it('returns true if any of the brokers are connected', async () => { expect(brokerPool.hasConnectedBrokers()).toEqual(false) await brokerPool.connect() await brokerPool.refreshMetadata([topicName]) const broker = Object.values(brokerPool.brokers).find(broker => !broker.isConnected()) expect(broker).not.toEqual(brokerPool.seedBroker) await broker.connect() await brokerPool.seedBroker.disconnect() expect(brokerPool.hasConnectedBrokers()).toEqual(true) }) it('returns false when nothing is connected', async () => { expect(brokerPool.hasConnectedBrokers()).toEqual(false) await brokerPool.connect() await brokerPool.disconnect() expect(brokerPool.hasConnectedBrokers()).toEqual(false) }) })
expect(brokerPool.seedBroker.isConnected()).toEqual(true) await brokerPool.disconnect() expect(brokerPool.seedBroker.isConnected()).toEqual(false) }) expect(brokerPool.hasConnectedBrokers()).toEqual(true) await brokerPool.disconnect() expect(broker.isConnected()).toEqual(false) expect(brokerPool.metadata).not.toEqual(null) expect(brokerPool.versions).not.toEqual(null) expect(brokerPool.brokers).not.toEqual({}) expect(brokerPool.metadata).toEqual(null) expect(brokerPool.versions).toEqual(null) expect(brokerPool.brokers).toEqual({}) }) })
describe('#connect', () => { it('connects to the seed broker when the broker pool is created', async () => { expect(brokerPool.seedBroker.isConnected()).toEqual(false) await brokerPool.connect() expect(brokerPool.seedBroker.isConnected()).toEqual(true) }) expect(brokerPool.versions).toEqual(null) await brokerPool.connect() expect(brokerPool.versions).toEqual(brokerPool.seedBroker.versions) }) expect(brokerPool.seedBroker.connection.port).not.toEqual(originalSeedPort) }) expect(brokerPool.seedBroker.connection.port).not.toEqual(originalSeedPort) }) expect(brokerPool.seedBroker.isConnected()).toEqual(true) expect(broker).not.toEqual(brokerPool.seedBroker) expect(broker.isConnected()).toEqual(true) expect(brokerPool.seedBroker.isConnected()).toEqual(false)
describe('utils tests', () => { it('should shorten the string and return "This is a very lon.."', () => { let string = 'This is a very long string' expect(util.shortener(string, 20)).toEqual('This is a very lon..') }) let first = util.uniq() let second = util.uniq() expect(first).not.toEqual(second) }) let rand = util.randNum() let rand2 = util.randNum() expect(rand).not.toEqual(rand2) }) expect(util.humanReadable(0, 'like')).toEqual('No likes') expect(util.humanReadable(1, 'like')).toEqual('1 like') expect(util.humanReadable(10, 'like')).toEqual('10 likes') }) expect(util.c_first('takkar')).toEqual('Takkar')) let om = util.ObjectMssg expect(om(mssg1)).toEqual('Sleep') expect(om(mssg2)).toEqual('Hello') expect(om(mssg3)).toEqual('Only one') }) })
test("should build filter _like", () => { const query = { viewsA_like: "cd9", viewsB_like: ["cd9", "aBc"], }; expect(normalize(query)).toEqual({ filter: { viewsA: /cd9/i, viewsB: { $in: [/cd9/i, /aBc/i] }, }, }); });
describe("UuidIdGenerator", () => { it("should generate different ID on multiple calls", async () => { const idGenerator = new UuidIdGenerator(); const id1 = idGenerator.generate(); const id2 = idGenerator.generate(); expect(id1).not.toEqual(id2); }); });
test("fetch with body", async () => { await fetch("/ok", { body: bodyOK }); expect(fetchMock.lastOptions("/ok").body).toEqual(JSON.stringify(bodyOK)); });
describe("UuidIdGenerator", () => { it("should generate different ID on multiple calls", async () => { const idGenerator = new UuidIdGenerator(); const id1 = idGenerator.generate(); const id2 = idGenerator.generate(); expect(id1).not.toEqual(id2); }); });
test("should build filter _lte _gte", () => { const query = { views_lte: 20, views_gte: 10, }; expect(normalize(query)).toEqual({ filter: { views: { $lte: 20, $gte: 10 } }, }); });
test("should build filter q", () => { const query = { q: "hello world", }; expect(normalize(query)).toEqual({ filter: { $text: { $search: "hello world" } }, }); });