test: theme-picker
This commit is contained in:
parent
71c93afad7
commit
dc6d3a7161
2 changed files with 52 additions and 5 deletions
41
src/components/user/theme-picker.cy.tsx
Normal file
41
src/components/user/theme-picker.cy.tsx
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { ThemePicker } from '@/components/user/theme-picker';
|
||||||
|
import { ThemeProvider } from '../theme-provider';
|
||||||
|
|
||||||
|
describe('<ThemePicker />', () => {
|
||||||
|
it('renders', () => {
|
||||||
|
cy.mount(<ThemePicker />);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('toggle open and close', () => {
|
||||||
|
cy.mount(<ThemePicker />);
|
||||||
|
cy.getBySel('theme-picker').click();
|
||||||
|
cy.getBySel('theme-picker-content').should('exist');
|
||||||
|
cy.get('html').click();
|
||||||
|
cy.getBySel('theme-picker-content').should('not.exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('enable dark mode', () => {
|
||||||
|
cy.mount(
|
||||||
|
<ThemeProvider>
|
||||||
|
<ThemePicker />
|
||||||
|
</ThemeProvider>,
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.getBySel('theme-picker').click();
|
||||||
|
cy.getBySel('dark-theme').click();
|
||||||
|
cy.get('html').should('have.attr', 'data-theme', 'dark');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('enable light mode', () => {
|
||||||
|
cy.mount(
|
||||||
|
<ThemeProvider>
|
||||||
|
<ThemePicker />
|
||||||
|
</ThemeProvider>,
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.getBySel('theme-picker').click();
|
||||||
|
cy.getBySel('light-theme').click();
|
||||||
|
cy.get('html').should('have.attr', 'data-theme', 'light');
|
||||||
|
});
|
||||||
|
});
|
|
@ -18,20 +18,26 @@ export function ThemePicker() {
|
||||||
return (
|
return (
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button variant='outline' size='icon'>
|
<Button variant='outline' size='icon' data-cy='theme-picker'>
|
||||||
<Sun className='h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0' />
|
<Sun className='h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0' />
|
||||||
<Moon className='absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100' />
|
<Moon className='absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100' />
|
||||||
<span className='sr-only'>Toggle theme</span>
|
<span className='sr-only'>Toggle theme</span>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align='end'>
|
<DropdownMenuContent align='end' data-cy='theme-picker-content'>
|
||||||
<DropdownMenuItem onClick={() => setTheme('light')}>
|
<DropdownMenuItem
|
||||||
|
onClick={() => setTheme('light')}
|
||||||
|
data-cy='light-theme'
|
||||||
|
>
|
||||||
Light
|
Light
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem onClick={() => setTheme('dark')}>
|
<DropdownMenuItem onClick={() => setTheme('dark')} data-cy='dark-theme'>
|
||||||
Dark
|
Dark
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem onClick={() => setTheme('system')}>
|
<DropdownMenuItem
|
||||||
|
onClick={() => setTheme('system')}
|
||||||
|
data-cy='system-theme'
|
||||||
|
>
|
||||||
System
|
System
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue