import React from 'react'
import { render, fireEvent } from '@testing-library/react'
import { NextPageContext } from 'next'
import Search from '../../../src/pages/search'
import ddo from '../__fixtures__/ddo'
import { DDO } from '@oceanprotocol/squid'
import { QueryResult } from '@oceanprotocol/squid/dist/node/aquarius/Aquarius'
describe('Search', () => {
it('renders without crashing', async () => {
const queryResult = {
results: [new DDO(ddo), new DDO(ddo)],
page: 1,
totalPages: 10,
totalResults: 200
}
const { container } = render(
)
expect(container.firstChild).toBeInTheDocument()
// interact with search bar
const form = container.querySelector('form')
const input = container.querySelector('form input')
const button = container.querySelector('form button')
input &&
fireEvent.change(input, {
target: {
value: 'Changed Hello'
}
})
button && fireEvent.click(button)
form && fireEvent.submit(form)
// interact with pagination
const pageItem = container.querySelector(
'.pagination li:nth-child(3) .number'
)
pageItem && fireEvent.click(pageItem)
})
it('renders empty state', async () => {
const queryResult: QueryResult = {
results: [],
page: 1,
totalPages: 1,
totalResults: 0
}
const { container } = render(
)
expect(container.querySelector('.empty')).toBeInTheDocument()
})
})
describe('Search.getInitialProps', () => {
it('returns the corresponding props', async () => {
const getInitialProps = Search.getInitialProps as (
context: Partial
) => {
text: string
tag: string
queryResult: QueryResult
}
const context = {
query: {
text: 'text',
tag: 'tag',
page: '1',
offset: '1'
}
}
const props = await getInitialProps(context)
expect(props.text).toEqual('text')
expect(props.tag).toEqual('tag')
})
})