import { registerToCalendars } from '@/websocket/operations/registerToCalendars'

describe('registerToCalendars', () => {
  let mockSocket: any

  beforeEach(() => {
    mockSocket = {
      readyState: WebSocket.OPEN,
      send: jest.fn()
    }
  })

  it('should send registration message with calendar URIs', () => {
    const calendarURIs = ['/calendars/cal1', '/calendars/cal2']

    registerToCalendars(mockSocket, calendarURIs)

    expect(mockSocket.send).toHaveBeenCalledWith(
      JSON.stringify({
        register: calendarURIs
      })
    )
  })

  it('should throw error if socket is not open', () => {
    mockSocket.readyState = WebSocket.CONNECTING
    const calendarURIs = ['/calendars/cal1']

    expect(() => registerToCalendars(mockSocket, calendarURIs)).toThrow(
      'Cannot register: WebSocket is not open'
    )
  })

  it('should handle empty calendar list', () => {
    registerToCalendars(mockSocket, [])

    expect(mockSocket.send).toHaveBeenCalledWith(
      JSON.stringify({
        register: []
      })
    )
  })

  it('should log registration', () => {
    const consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation()
    const calendarURIs = ['/calendars/cal1', '/calendars/cal2']

    registerToCalendars(mockSocket, calendarURIs)

    expect(consoleInfoSpy).toHaveBeenCalledWith(
      'Registered to calendars',
      calendarURIs
    )

    consoleInfoSpy.mockRestore()
  })
})
