import Zoom from './Zoom'; const Content = (): JSX.Element => ( ); const ContentWithMultipleShapes = (): JSX.Element => { return ( ); }; const ContentWithMultipleShapesWithNegativeTranslations = (): JSX.Element => { return ( ); }; interface Props { minimapPosition?; showMinimap: boolean; tenplate?: () => JSX.Element; } const initialize = ({ showMinimap, minimapPosition, template = Content }: Props): void => { cy.mount({ Component: (
{template}
) }); }; describe('Zoom', () => { it('displays the minimap when the prop is set', () => { initialize({ showMinimap: true }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.makeSnapshot(); }); it('zooms in when the corresponding buttom is clicked', () => { initialize({ showMinimap: true }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('zoom in').click(); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '1.2, 0, 0, 1.2'); cy.makeSnapshot(); }); it('zooms out when the corresponding buttom is clicked', () => { initialize({ showMinimap: true }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('zoom out').click(); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '0.8, 0, 0, 0.8'); cy.makeSnapshot(); }); it('zooms out when the content is scrolled up', () => { initialize({ showMinimap: true }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('zoom-content').realMouseWheel({ deltaY: 20 }); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '0.9, 0, 0, 0.9'); cy.makeSnapshot(); }); it('zooms in when the content is scrolled down', () => { initialize({ showMinimap: true }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('zoom-content').realMouseWheel({ deltaY: -20 }); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '1.1, 0, 0, 1.1'); cy.makeSnapshot(); }); it('clears the zoom when the corresponding button is clicked', () => { initialize({ showMinimap: true }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('zoom-content').realMouseWheel({ deltaY: -20 }); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '1.1, 0, 0, 1.1'); cy.findByTestId('clear').click(); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.makeSnapshot(); }); it('does not display the minimap when the prop is set', () => { initialize({ showMinimap: false }); cy.get('g[transform="matrix(1, 0, 0, 1, 0, 0)"]'); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('not.exist'); cy.makeSnapshot(); }); it('zooms in when the minimap is scrolled up', () => { initialize({ showMinimap: true }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('minimap-interaction').realMouseWheel({ deltaY: -20 }); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '1.1, 0, 0, 1.1'); cy.makeSnapshot(); }); it('zooms out when the minimap is scrolled down', () => { initialize({ showMinimap: true }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.findByTestId('minimap-interaction').realMouseWheel({ deltaY: 20 }); cy.findByTestId('zoom-content') .should('have.attr', 'transform') .and('include', '0.9, 0, 0, 0.9'); cy.makeSnapshot(); }); it('moves the view when the mouse is hover the content with the corresponding button pressed down', () => { initialize({ showMinimap: true }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.get('svg').should('have.attr', 'height', '400'); cy.findByTestId('zoom-container') .trigger('mousedown', 400, 200) .trigger('mousemove', 600, 200); cy.findByTestId('zoom-content').should( 'have.attr', 'transform', 'matrix(1, 0, 0, 1, 0, 0)' ); cy.makeSnapshot(); }); it('displays the minimap in the bottom right when the prop to the corresponding value', () => { initialize({ minimapPosition: 'bottom-right', showMinimap: true }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.get('svg').should('have.attr', 'height', '400'); cy.makeSnapshot(); }); it('applies a scale down on the minimap when the content is higher than the original height', () => { initialize({ showMinimap: true, template: ContentWithMultipleShapes }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.get('svg').should('have.attr', 'height', '400'); cy.findByTestId('minimap-interaction') .parent() .find('g') .should('have.attr', 'style') .and('include', 'transform: scale(0.684211) translate(-85px, -105px);'); cy.makeSnapshot(); }); it('applies a scale down on the minimap when the content has negative translation values', () => { initialize({ showMinimap: true, template: ContentWithMultipleShapesWithNegativeTranslations }); cy.get('g[clip-path="url(#zoom-clip-0)"]').should('be.visible'); cy.get('svg').should('have.attr', 'height', '400'); cy.findByTestId('minimap-interaction') .parent() .find('g') .should('have.attr', 'style') .and('include', 'transform: scale(0.448276) translate(345px, 195px);'); cy.makeSnapshot(); }); });