import { Test, TestingModule } from '@nestjs/testing';
import { ContactController } from './contact.controller';
import { ContactService } from './contact.service';
import { MailerModule } from '../mailer/mailer.module';
import { ContactMessage } from './schemas/contact-message.schema';

describe('ContactController', () => {
  let controller: ContactController;

  const contactServiceMock = {
    sendMessage: jest.fn(),
  };

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      imports: [MailerModule],
      providers: [
        {
          provide: ContactService,
          useValue: contactServiceMock,
        },
      ],
      controllers: [ContactController],
    }).compile();

    controller = module.get<ContactController>(ContactController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });

  it('should call sendMessage', async () => {
    const spyer = jest.spyOn(contactServiceMock, 'sendMessage');
    await controller.sendContactMessage({ contactMessage: new ContactMessage() });
    expect(spyer).toBeCalledTimes(1);
    expect(spyer).toBeCalledWith(new ContactMessage());
  });
});