// Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/

import { flushPromises } from '@vue/test-utils'
import { axe } from 'vitest-axe'

import { generateObjectData } from '#tests/graphql/builders/index.ts'
import ticketCustomerObjectAttributes from '#tests/graphql/factories/fixtures/ticket-customer-object-attributes.ts'
import { visitView } from '#tests/support/components/visitView.ts'
import { mockPermissions } from '#tests/support/mock-permissions.ts'

import { mockObjectManagerFrontendAttributesQuery } from '#shared/entities/object-attributes/graphql/queries/objectManagerFrontendAttributes.mocks.ts'
import { mockTicketOverviewTicketCountQuery } from '#shared/entities/ticket/graphql/queries/ticket/overviewTicketCount.mocks.ts'
import { createDummyTicket } from '#shared/entities/ticket-article/__tests__/mocks/ticket.ts'
import { EnumOrderDirection } from '#shared/graphql/types.ts'
import { convertToGraphQLId } from '#shared/graphql/utils.ts'

import { mockTicketsByOverviewQuery } from '#desktop/entities/ticket/graphql/queries/ticketsByOverview.mocks.ts'
import { mockUserCurrentTicketOverviewsQuery } from '#desktop/entities/ticket/graphql/queries/userCurrentTicketOverviews.mocks.ts'

describe('ticket overviews view', () => {
  it('has no accessibility violations in main content', async () => {
    mockPermissions(['ticket.agent'])

    mockUserCurrentTicketOverviewsQuery({
      userCurrentTicketOverviews: [
        {
          id: convertToGraphQLId('Overview', 1),
          name: 'My Assigned Tickets',
          link: 'my_assigned',
          prio: 1000,
          orderBy: 'created_at',
          orderDirection: EnumOrderDirection.Ascending,
          viewColumns: [],
          orderColumns: [],
          viewColumnsRaw: [],
          active: true,
        },
      ],
    })

    mockObjectManagerFrontendAttributesQuery({
      objectManagerFrontendAttributes: ticketCustomerObjectAttributes(),
    })

    mockTicketOverviewTicketCountQuery({
      ticketOverviews: [
        {
          id: convertToGraphQLId('Overview', 1),
          ticketCount: 111,
        },
      ],
    })

    mockTicketsByOverviewQuery({
      ticketsByOverview: generateObjectData('TicketConnection', {
        edges: [
          {
            node: createDummyTicket(),
            cursor: 'MjY',
          },
        ],
        pageInfo: {
          endCursor: 'MjY',
          hasNextPage: false,
        },
      }),
    })

    const view = await visitView('/tickets/my_assigned')

    await flushPromises()

    const results = await axe(view.html())

    expect(results).toHaveNoViolations()
  })
})