if (process.env.PARSE_SERVER_TEST_CACHE === 'redis') {
  describe('ParseLiveQuery redis', () => {
    afterEach(async () => {
      const client = await Parse.CoreManager.getLiveQueryController().getDefaultLiveQueryClient();
      client.close();
    });
    it('can connect', async () => {
      await reconfigureServer({
        appId: 'redis_live_query',
        startLiveQueryServer: true,
        liveQuery: {
          classNames: ['TestObject'],
          redisURL: 'redis://localhost:6379',
        },
        liveQueryServerOptions: {
          redisURL: 'redis://localhost:6379',
        },
      });
      const subscription = await new Parse.Query('TestObject').subscribe();
      const [object] = await Promise.all([
        new Parse.Object('TestObject').save(),
        new Promise(resolve =>
          subscription.on('create', () => {
            resolve();
          })
        ),
      ]);
      await Promise.all([
        new Promise(resolve =>
          subscription.on('delete', () => {
            resolve();
          })
        ),
        object.destroy(),
      ]);
    });

    it('can call connect twice', async () => {
      const server = await reconfigureServer({
        appId: 'redis_live_query',
        startLiveQueryServer: true,
        liveQuery: {
          classNames: ['TestObject'],
          redisURL: 'redis://localhost:6379',
        },
        liveQueryServerOptions: {
          redisURL: 'redis://localhost:6379',
        },
      });
      expect(server.config.liveQueryController.liveQueryPublisher.parsePublisher.isOpen).toBeTrue();
      await server.config.liveQueryController.connect();
      expect(server.config.liveQueryController.liveQueryPublisher.parsePublisher.isOpen).toBeTrue();
      expect(server.liveQueryServer.subscriber.isOpen).toBe(true);
      await server.liveQueryServer.connect();
      expect(server.liveQueryServer.subscriber.isOpen).toBe(true);
    });
  });
}
