import { Test, TestingModule } from '@nestjs/testing';
import { WorkingHours } from './classes/working-hours';
import { WorkingHoursActiveDto } from './dto/working-hours-active.dto';
import { CheckActiveWorkingHoursWorkflow } from './workflows/check-active-working-hours/check-active-working-hours.workflow';
import { WorkingHoursController } from './working-hours.controller';

describe('WorkingHoursController', () => {
  let controller: WorkingHoursController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [WorkingHoursController],
      providers: [
        {
          provide: CheckActiveWorkingHoursWorkflow,
          useValue: {
            check: jest.fn().mockResolvedValue(
              new WorkingHoursActiveDto({
                isActive: true,
                nextActive: new Date('2042-01-01T12:00:00.000Z').getTime(),
              })
            ),
          },
        },
      ],
    }).compile();

    controller = module.get<WorkingHoursController>(WorkingHoursController);

    WorkingHours.createFromConfiguration = jest
      .fn()
      .mockResolvedValue(new WorkingHours('-;08:00-18:00;+;+;+;+;-'));
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });

  it('should get list of working hours', async () => {
    const result = await controller.getWorkingHours();

    expect(result).toEqual([
      null,
      [['08:00', '18:00']],
      [['08:00', '18:00']],
      [['08:00', '18:00']],
      [['08:00', '18:00']],
      [['08:00', '18:00']],
      null,
    ]);
  });

  it('should check for active working hours', async () => {
    const result = await controller.isActive();

    expect(result).toEqual({
      isActive: true,
      nextActive: new Date('2042-01-01T12:00:00.000Z').getTime(),
    });
  });
});
