import { screen, render } from '@testing-library/react' import { expect } from 'chai' import fetchMock from 'fetch-mock' import { SettingsModalProvider } from '@/features/ide-settings/context/settings-modal-context' import { EditorProviders, projectDefaults, } from '../../../helpers/editor-providers' import userEvent from '@testing-library/user-event' import OptimizeCompilesSetting from '@/features/ide-settings/components/compiler-settings/optimize-compile-setting' import type { PermissionsLevel } from '@/features/ide-react/types/permissions' describe('', function () { afterEach(function () { window.metaAttributesCache.delete('ol-canUsePng2Pdf') localStorage.clear() fetchMock.removeRoutes().clearHistory() }) function renderSetting( png2pdf?: boolean, permissionsLevel: PermissionsLevel = 'owner' ) { render( ) } it('is not rendered when png2pdf is unavailable', function () { renderSetting() expect(screen.queryByLabelText('Optimise images (recommended)')).to.be.null }) it('is on by default when the project has no stored preference', function () { window.metaAttributesCache.set('ol-canUsePng2Pdf', true) renderSetting() const toggle = screen.getByLabelText('Optimise images (recommended)') expect((toggle as HTMLInputElement).checked).to.be.true }) it('is disabled for a collaborator without write access', function () { window.metaAttributesCache.set('ol-canUsePng2Pdf', true) renderSetting(undefined, 'readOnly') const toggle = screen.getByLabelText('Optimise images (recommended)') expect((toggle as HTMLInputElement).disabled).to.be.true }) it('reflects the stored project preference when it is off', function () { window.metaAttributesCache.set('ol-canUsePng2Pdf', true) renderSetting(false) const toggle = screen.getByLabelText('Optimise images (recommended)') expect((toggle as HTMLInputElement).checked).to.be.false }) it('persists the setting to the project when toggled', async function () { window.metaAttributesCache.set('ol-canUsePng2Pdf', true) renderSetting() const saveSettingsMock = fetchMock.post( `express:/project/:projectId/settings`, { status: 200 }, { delay: 0 } ) const toggle = screen.getByLabelText('Optimise images (recommended)') await userEvent.click(toggle) expect( saveSettingsMock.callHistory.called( `/project/${projectDefaults._id}/settings`, { body: { png2pdf: false } } ) ).to.be.true }) })