import * as React from "react"
import { create, ReactTestRenderer } from "react-test-renderer"
import { BookHighlighReview } from ".."
import { bookReview } from "./mock.data"
import { isArray } from "util"
import ReviewSliderComponent from "../ReviewSlider.component"
import { Carousel } from "../.."
import { Primary } from "../../Button"
declare global {
namespace NodeJS {
interface Global {
window: any
}
}
}
// Simulate window resize event
const resizeEvent = document.createEvent("Event")
resizeEvent.initEvent("resize", true, true)
// create resizeTo function
global.window.resizeTo = (width, height) => {
global.window.innerWidth = width || global.window.innerWidth
global.window.innerHeight = width || global.window.innerHeight
global.window.dispatchEvent(resizeEvent)
}
describe("Book Review test", () => {
let t: ReactTestRenderer
const onWriteReviewClickMock = jest.fn()
beforeAll(() => {
t = create(
)
})
it("should Highlight review component able to render", () => {
create()
})
it("should not render carousel if page less than 1 page", () => {
const r = create()
const c = r.root.findAll((node) => node.type === ( Carousel as any ))
expect(c.length).toEqual(0)
})
it("should groupReviewsPerPage group review correctly", () => {
const result = BookHighlighReview.groupReviewsPerPage(bookReview)
for (const page of result) {
expect(isArray(page)).toBeTruthy()
expect(page.length).toEqual(3)
}
})
it("should groupReviewPerPage emit 0 length array if no review", () => {
const result = BookHighlighReview.groupReviewsPerPage([])
expect(result.length).toEqual(0)
})
it("should render as carousel", () => {
const { root } = t
root.find((node) => {
return (Carousel as any) === node.type
})
})
it("should render 3 items per page on desktop 1174++px", function test() {
window.resizeTo(1500, 1000)
const root = t.root
root.find((node) => {
return (
node.type === (ReviewSliderComponent as any) &&
node.props.page[0].length === 3
)
})
})
it("should render 2 items per page on desktop size gt 1024 lt 1174", () => {
window.resizeTo(1048, 1000)
const { root } = t
root.find((node) => {
return (
node.type === (ReviewSliderComponent as any) &&
node.props.page[0].length === 2
)
})
})
it("should passing props onWriteReviewClick correctly to button", () => {
const s = create()
s.root.find((node) => {
return (
node.type === (Primary as any) &&
node.props.onClick === onWriteReviewClickMock
)
})
})
it("should render 1 items per page on mobile size lte 1024", () => {
window.resizeTo(1024, 1000)
const { root } = t
root.find((node) => {
return (
node.type === (ReviewSliderComponent as any) &&
node.props.page[0].length === 1
)
})
})
})