it('adds a sub-subgroup when new one provided', function(done) {
      app.loadBalancers.data.push({
        name: 'elb-2',
        account: 'test',
        region: 'eu-west-1',
        serverGroups: [],
        vpcName: '',
      });
      const newSubsubGroup = {
        heading: 'eu-west-1',
        loadBalancer: app.loadBalancers.data[3],
        serverGroups: [] as IServerGroup[],
      };
      LoadBalancerState.filterService.updateLoadBalancerGroups(app);

      setTimeout(() => {
        expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
          {
            heading: 'prod',
            subgroups: [{ heading: 'elb-2', subgroups: [resultJson[2]] }],
          },
          {
            heading: 'test',
            subgroups: [
              { heading: 'elb-1', subgroups: [resultJson[0], resultJson[1]] },
              { heading: 'elb-2', subgroups: [newSubsubGroup] },
            ],
          },
        ]);
        done();
      }, debounceTimeout);
    });
 it('should not match on partial vpc name', function(done) {
   LoadBalancerState.filterModel.asFilterModel.sortFilter.filter = 'vpc:main-old';
   LoadBalancerState.filterService.updateLoadBalancerGroups(app);
   setTimeout(() => {
     expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([]);
     done();
   }, debounceTimeout);
 });
      it('1 account filter: should be transformed showing only prod accounts', function(done) {
        LoadBalancerState.filterModel.asFilterModel.sortFilter.account = { prod: true };
        LoadBalancerState.filterService.updateLoadBalancerGroups(app);

        setTimeout(() => {
          expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
            {
              heading: 'prod',
              subgroups: [{ heading: 'elb-2', subgroups: [resultJson[2]] }],
            },
          ]);
          done();
        }, debounceTimeout);
      });
      it('should filter by vpc name as an exact match', function(done) {
        LoadBalancerState.filterModel.asFilterModel.sortFilter.filter = 'vpc:main';
        LoadBalancerState.filterService.updateLoadBalancerGroups(app);

        setTimeout(() => {
          expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
            {
              heading: 'test',
              subgroups: [{ heading: 'elb-1', subgroups: [resultJson[1]] }],
            },
          ]);
          done();
        }, debounceTimeout);
      });
      it('should add searchField when filter is not prefixed with vpc:', function(done) {
        expect(app.loadBalancers.data.length).toBe(3);
        app.loadBalancers.data.forEach((group: ILoadBalancerGroup) => {
          expect(group.searchField).toBeUndefined();
        });
        LoadBalancerState.filterModel.asFilterModel.sortFilter.filter = 'main';
        LoadBalancerState.filterService.updateLoadBalancerGroups(app);

        setTimeout(() => {
          app.loadBalancers.data.forEach((group: ILoadBalancerGroup) => {
            expect(group.searchField).not.toBeUndefined();
          });
          done();
        }, debounceTimeout);
      });
    it('no filter: should be transformed', function(done) {
      const expected = [
        {
          heading: 'prod',
          subgroups: [{ heading: 'elb-2', subgroups: [resultJson[2]] }],
        },
        {
          heading: 'test',
          subgroups: [{ heading: 'elb-1', subgroups: [resultJson[0], resultJson[1]] }],
        },
      ];
      LoadBalancerState.filterService.updateLoadBalancerGroups(app);

      setTimeout(() => {
        expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual(expected);
        done();
      }, debounceTimeout);
    });
    it('should not filter if all provider are selected', function(done) {
      LoadBalancerState.filterModel.asFilterModel.sortFilter.providerType = { aws: true, gce: true };
      LoadBalancerState.filterService.updateLoadBalancerGroups(app);

      setTimeout(() => {
        expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
          {
            heading: 'prod',
            subgroups: [{ heading: 'elb-2', subgroups: [resultJson[2]] }],
          },
          {
            heading: 'test',
            subgroups: [{ heading: 'elb-1', subgroups: [resultJson[0], resultJson[1]] }],
          },
        ]);
        done();
      }, debounceTimeout);
    });
    it('All regions: should show all load balancers', function(done) {
      LoadBalancerState.filterModel.asFilterModel.sortFilter.region = { 'us-east-1': true, 'us-west-1': true };
      LoadBalancerState.filterService.updateLoadBalancerGroups(app);

      setTimeout(() => {
        expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
          {
            heading: 'prod',
            subgroups: [{ heading: 'elb-2', subgroups: [resultJson[2]] }],
          },
          {
            heading: 'test',
            subgroups: [{ heading: 'elb-1', subgroups: [resultJson[0], resultJson[1]] }],
          },
        ]);
        done();
      }, debounceTimeout);
    });
    it('should filter any load balancers with starting instances (based on starting) if "Starting" checked', function(done) {
      LoadBalancerState.filterModel.asFilterModel.sortFilter.status = { Starting: true };
      app.loadBalancers.data[0].instanceCounts.starting = 1;
      app.loadBalancers.data.forEach((loadBalancer: ILoadBalancer) => {
        loadBalancer.instances = [
          { name: 'foo', id: 'foo', healthState: 'Starting', health: [], launchTime: 0, zone: 'us-east-1a' },
        ];
      });
      LoadBalancerState.filterService.updateLoadBalancerGroups(app);

      setTimeout(() => {
        expect(LoadBalancerState.filterModel.asFilterModel.groups).toEqual([
          {
            heading: 'test',
            subgroups: [{ heading: 'elb-1', subgroups: [resultJson[0]] }],
          },
        ]);
        done();
      }, debounceTimeout);
    });