import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { GroupComponent } from './group.component';
import { ClarityModule } from '@clr/angular';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { FormsModule } from '@angular/forms';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { SessionService } from "../../../shared/services/session.service";
import { GroupService } from "./group.service";
import { of } from "rxjs";
import { MessageHandlerService } from '../../../shared/services/message-handler.service';
import { AppConfigService } from '../../../services/app-config.service';
import { OperationService } from "../../../shared/components/operation/operation.service";
import { ConfirmationDialogService } from "../../global-confirmation-dialog/confirmation-dialog.service";

describe('GroupComponent', () => {
  let component: GroupComponent;
  let fixture: ComponentFixture<GroupComponent>;
  let fakeMessageHandlerService = null;
  let fakeOperationService = null;
  let fakeGroupService = {
    getUserGroups: function () {
      return of([{
        group_name: ''
      }, {
        group_name: 'abc'
      }]);
    }
  };
  let fakeConfirmationDialogService = {
    confirmationConfirm$: of({
      state: 1,
      source: 2
    })
  };
  let fakeSessionService = {
    currentUser: {
      has_admin_role: true
    }
  };
  let fakeAppConfigService = {
    isLdapMode: function () {
      return true;
    }
  };

  beforeEach(waitForAsync(() => {
    TestBed.configureTestingModule({
      declarations: [GroupComponent],
      imports: [
        ClarityModule,
        FormsModule,
        TranslateModule.forRoot()
      ],
      schemas: [
        CUSTOM_ELEMENTS_SCHEMA
      ],
      providers: [
        TranslateService,
        { provide: MessageHandlerService, useValue: fakeMessageHandlerService },
        { provide: OperationService, useValue: fakeOperationService },
        { provide: GroupService, useValue: fakeGroupService },
        { provide: ConfirmationDialogService, useValue: fakeConfirmationDialogService },
        { provide: SessionService, useValue: fakeSessionService },
        { provide: AppConfigService, useValue: fakeAppConfigService }
      ]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(GroupComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
