import { ProcessDataService } from '../core/data/processes/process-data.service';
import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils';
import { processBreadcrumbResolver } from './process-breadcrumb.resolver';
import { Process } from './processes/process.model';

describe('processBreadcrumbResolver', () => {
  describe('resolve', () => {
    let resolver: any;
    let processDataService: ProcessDataService;
    let processBreadcrumbService: any;
    let process: Process;
    let id: string;
    let path: string;
    beforeEach(() => {
      id = '12345';
      process = Object.assign(new Process(), { id });
      path = 'rest.com/path/to/breadcrumb/12345';
      processBreadcrumbService = {};
      processDataService = {
        findById: () => createSuccessfulRemoteDataObject$(process),
      } as any;
      resolver = processBreadcrumbResolver;
    });

    it('should resolve the breadcrumb config', (done) => {
      const resolvedConfig = resolver(
        { data: { breadcrumbKey: process }, params: { id: id } } as any,
        { url: path } as any,
        processBreadcrumbService,
        processDataService,
      );
      const expectedConfig = { provider: processBreadcrumbService, key: process, url: path };
      resolvedConfig.subscribe((config) => {
        expect(config).toEqual(expectedConfig);
        done();
      });
    });

    it('should resolve throw an error when no breadcrumbKey is defined', () => {
      expect(() => {
        resolver({ data: {} } as any, undefined, processBreadcrumbService, processDataService);
      }).toThrow();
    });
  });
});