import React from 'react'; import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; import { readV2ThemeCss } from '../test/readV2ThemeCss'; describe('QueryEditorToolbar layout', () => { it('keeps the v2 toolbar on a single scrollable row in small windows', () => { const toolbarSource = readFileSync(new URL('./QueryEditorToolbar.tsx', import.meta.url), 'utf8'); const css = readV2ThemeCss(); const toolbarCss = css.slice( css.indexOf('body[data-ui-version="v2"] .gn-v2-query-toolbar {'), css.indexOf('body[data-ui-version="v2"] .gn-v2-query-toolbar-main {'), ); const toolbarMainCss = css.slice( css.indexOf('body[data-ui-version="v2"] .gn-v2-query-toolbar-main {'), css.indexOf('body[data-ui-version="v2"] .gn-v2-query-toolbar-selects {'), ); expect(toolbarSource).toContain('gn-v2-query-toolbar-main'); expect(toolbarSource).toContain('gn-v2-query-toolbar-actions'); expect(css).toContain('body[data-ui-version="v2"] .gn-v2-query-toolbar-main'); expect(toolbarCss).toContain('overflow-x: auto;'); expect(toolbarCss).toContain('overflow-y: hidden;'); expect(toolbarCss).toContain('flex-wrap: nowrap;'); expect(toolbarMainCss).toContain('flex-wrap: nowrap;'); expect(toolbarMainCss).toContain('min-width: 100%;'); expect(toolbarMainCss).toContain('width: max-content;'); expect(css).toContain('body[data-ui-version="v2"] .gn-v2-query-toolbar-actions {'); expect(css).toContain('body[data-ui-version="v2"] .gn-v2-query-toolbar-action-pair {'); }); it('keeps run and stop buttons separated in the v2 toolbar action group', () => { const toolbarSource = readFileSync(new URL('./QueryEditorToolbar.tsx', import.meta.url), 'utf8'); const css = readV2ThemeCss(); expect(toolbarSource).toContain('gn-v2-query-toolbar-action-group'); expect(toolbarSource).not.toContain('Space.Compact'); expect(css).toContain('body[data-ui-version="v2"] .gn-v2-query-toolbar-action-group {'); expect(css).not.toContain('.gn-v2-query-toolbar-action-group.ant-btn-group'); expect(css).toContain('gap: 6px;'); }); it('keeps commit button hover styling in source and v2 css', () => { const css = readV2ThemeCss(); const commitBaseCss = css.slice( css.indexOf('body[data-ui-version="v2"] .gn-v2-query-transaction-commit-button {'), css.indexOf('body[data-ui-version="v2"] .gn-v2-query-transaction-commit-button:hover,'), ); const commitHoverCss = css.slice( css.indexOf('body[data-ui-version="v2"] .gn-v2-query-transaction-commit-button:hover,'), css.indexOf('body[data-ui-version="v2"] .gn-v2-query-transaction-commit-button .gn-v2-toolbar-kbd {'), ); const commitKbdHoverCss = css.slice( css.indexOf('body[data-ui-version="v2"] .gn-v2-query-transaction-commit-button:hover .gn-v2-toolbar-kbd,'), css.indexOf('body[data-ui-version="v2"] .gn-v2-query-toolbar-icon-action.ant-btn,'), ); expect(css).toContain('.gn-v2-query-transaction-commit-button:hover'); expect(css).toContain('.gn-v2-query-transaction-commit-button:focus-visible'); expect(commitBaseCss).toContain('background: var(--gn-accent-soft) !important;'); expect(commitHoverCss).not.toContain('background: var(--gn-accent-soft) !important;'); expect(commitHoverCss).toContain('box-shadow:'); expect(commitKbdHoverCss).toContain('background:'); }); });