import { TEST_UTILITIES } from '@armor/testing';
import { HelloArmorComponent } from './hello-armor.component';
import { ApiService, LoginRedirectService } from '@armor/api';
import { LocalStorageService } from '@armor/platform-browser';

describe('SecurityHelpPopoverLinkComponent', () => {
  let component: HelloArmorComponent;
  let apiService: ApiService;

  const initComponent = () => {
    component = new HelloArmorComponent(apiService);
  };

  const fakeObservable = (returnVal) => {
    return {
      subscribe: (fn) => {
        return fn(returnVal);
      }
    };
  };

  beforeEach(() => {
    TEST_UTILITIES.initTestBed([], [
      ApiService,
      LocalStorageService,
      LoginRedirectService
    ]);

    apiService = TEST_UTILITIES.getInjectable(ApiService);
  });

  describe('ngOnInit', () => {
    const fakeMeData = {
      user: 'test.user@fake.com',
      accounts: [1, 2, 3]
    };

    it('should call apiService.get(\'me\') as set local vars', () => {
      initComponent();
      spyOn(apiService, 'get').and.callFake(() => {
        return fakeObservable(fakeMeData);
      });

      component.ngOnInit();

      expect(apiService.get).toHaveBeenCalledTimes(1);
      expect(apiService.get).toHaveBeenCalledWith('me');
      expect(component.user).toEqual(fakeMeData.user as any);
      expect(component.accounts).toEqual(fakeMeData.accounts as any);
    });
  });

});
