diff --git a/.eslintrc.js b/.eslintrc.js index 1644fd618..b63a55c1f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,7 +22,7 @@ module.exports = { }, overrides: [ { - files: ['test/**/**.ts'], + files: ['test/**/int.spec.ts'], rules: { '@typescript-eslint/no-use-before-define': 'off', '@typescript-eslint/consistent-type-imports': 'warn', @@ -30,7 +30,7 @@ module.exports = { } }, { - files: ['test/e2e/**/**.ts'], + files: ['test/**/e2e.spec.ts'], extends: [ 'plugin:playwright/playwright-test' ], diff --git a/playwright.config.ts b/playwright.config.ts index 75010eb3f..f34fbc2ff 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -3,7 +3,8 @@ import type { PlaywrightTestConfig } from '@playwright/test'; const config: PlaywrightTestConfig = { // Look for test files in the "tests" directory, relative to this configuration file - testDir: 'test/e2e', + testDir: 'test', + testMatch: 'e2e.spec.ts', workers: 999, timeout: 600000, }; diff --git a/src/admin/components/forms/DraggableSection/ActionPanel/index.scss b/src/admin/components/forms/DraggableSection/ActionPanel/index.scss deleted file mode 100644 index 6286e260c..000000000 --- a/src/admin/components/forms/DraggableSection/ActionPanel/index.scss +++ /dev/null @@ -1,12 +0,0 @@ -@import '../../../../scss/styles'; - -.action-panel { - - &__remove-row { - margin: 0 0 base(.3); - } - - &__add-row { - margin: base(.3) 0 0; - } -} diff --git a/src/admin/components/forms/DraggableSection/ActionPanel/index.tsx b/src/admin/components/forms/DraggableSection/ActionPanel/index.tsx deleted file mode 100644 index a62b6e9f4..000000000 --- a/src/admin/components/forms/DraggableSection/ActionPanel/index.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; - -import Button from '../../../elements/Button'; -import Popup from '../../../elements/Popup'; -import BlockSelector from '../../field-types/Blocks/BlockSelector'; -import { Props } from './types'; - -import './index.scss'; - -const baseClass = 'action-panel'; - -const ActionPanel: React.FC = (props) => { - const { - addRow, - removeRow, - label = 'Row', - blockType, - blocks = [], - rowIndex, - isHovered, - hasMaxRows, - } = props; - - const classes = [ - baseClass, - ].filter(Boolean).join(' '); - - return ( -
- removeRow(rowIndex)} - /> - )} - > - Remove  - {label} - - - {!hasMaxRows && ( - - {blockType === 'blocks' - ? ( - - )} - render={({ close }) => ( - - )} - /> - ) - : ( - addRow(rowIndex)} - /> - )} - > - Add  - {label} - - )} - - )} -
- ); -}; - -export default ActionPanel; diff --git a/src/admin/components/forms/DraggableSection/ActionPanel/types.ts b/src/admin/components/forms/DraggableSection/ActionPanel/types.ts deleted file mode 100644 index e08396372..000000000 --- a/src/admin/components/forms/DraggableSection/ActionPanel/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Block } from '../../../../../fields/config/types'; - -export type Props = { - label: string - addRow?: (index: number, blockType?: string) => void - removeRow?: (index: number) => void - blockType?: string - isHovered: boolean - rowIndex: number - blocks?: Block[] - hasMaxRows?: boolean -} diff --git a/src/admin/components/forms/DraggableSection/PositionPanel/index.scss b/src/admin/components/forms/DraggableSection/PositionPanel/index.scss deleted file mode 100644 index d0102509b..000000000 --- a/src/admin/components/forms/DraggableSection/PositionPanel/index.scss +++ /dev/null @@ -1,21 +0,0 @@ -@import '../../../../scss/styles'; - -.position-panel { - &__move-backward { - transform: rotate(.5turn); - margin: 0; - opacity: 0; - } - - &__move-forward { - margin: 0; - opacity: 0; - } - - &__current-position { - text-align: center; - color: var(--theme-elevation-400); - } - - padding-right: base(.5); -} diff --git a/src/admin/components/forms/DraggableSection/PositionPanel/index.tsx b/src/admin/components/forms/DraggableSection/PositionPanel/index.tsx deleted file mode 100644 index a3f7465f6..000000000 --- a/src/admin/components/forms/DraggableSection/PositionPanel/index.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import Button from '../../../elements/Button'; -import { Props } from './types'; - -import './index.scss'; - -const baseClass = 'position-panel'; - -const PositionPanel: React.FC = (props) => { - const { moveRow, positionIndex, rowCount, readOnly } = props; - - const adjustedIndex = positionIndex + 1; - - const classes = [ - baseClass, - `${baseClass}__${readOnly ? 'read-only' : ''}`, - ].filter(Boolean).join(' '); - - return ( -
- {!readOnly && ( -
- ); -}; - -export default PositionPanel; diff --git a/src/admin/components/forms/DraggableSection/PositionPanel/types.ts b/src/admin/components/forms/DraggableSection/PositionPanel/types.ts deleted file mode 100644 index 07d096028..000000000 --- a/src/admin/components/forms/DraggableSection/PositionPanel/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type Props = { - moveRow: (fromIndex: number, toIndex: number) => void - positionIndex: number - rowCount: number - readOnly: boolean -} diff --git a/src/admin/components/forms/DraggableSection/index.scss b/src/admin/components/forms/DraggableSection/index.scss deleted file mode 100644 index 66002685f..000000000 --- a/src/admin/components/forms/DraggableSection/index.scss +++ /dev/null @@ -1,100 +0,0 @@ -@import '../../../scss/styles.scss'; - -////////////////////// -// COMPONENT STYLES -////////////////////// - -.draggable-section { - padding-bottom: base(.5); - - .draggable-section { - padding-bottom: 0; - } - - &__content-wrapper { - display: flex; - position: relative; - margin-bottom: $baseline; - } - - &__section-header { - display: flex; - position: sticky; - top: $top-header-offset; - z-index: 1; - padding: base(.75) base(.75); - margin-left: - base(.75); - margin-right: - base(.75); - width: calc(100% + #{base(1.5)}); - } - - &__render-fields-wrapper { - flex-grow: 1; - } - - &.is-hovered>div { - >.field-type-gutter { - &.actions { - - .field-type-gutter__content { - &:hover { - z-index: $z-nav; - } - } - - .field-type-gutter__content-container { - box-shadow: none; - } - } - - .field-type-gutter__content-container { - box-shadow: #{$style-stroke-width-m} 0px 0px 0px var(--theme-elevation-800); - } - - .position-panel__move-forward, - .position-panel__move-backward { - opacity: 1; - - &.first-row, - &.last-row { - opacity: .15; - pointer-events: none; - } - } - - .position-panel__current-position { - color: var(--theme-elevation-800); - } - } - - .toggle-collapse { - @include color-svg(var(--theme-elevation-0)); - - .btn__icon { - background-color: var(--theme-elevation-400); - - &:hover { - background-color: var(--theme-elevation-800); - } - } - } - } - - label.field-label { - line-height: 1; - padding-bottom: base(.75) - } - - @include mid-break { - min-width: base(16); - - .position-panel__move-forward, - .position-panel__move-backward { - opacity: 1; - } - - &__section-header { - top: $top-header-offset-m; - } - } -} diff --git a/src/admin/components/forms/DraggableSection/index.tsx b/src/admin/components/forms/DraggableSection/index.tsx deleted file mode 100644 index 0f51d6e61..000000000 --- a/src/admin/components/forms/DraggableSection/index.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { useState } from 'react'; -import AnimateHeight from 'react-animate-height'; -import { Draggable } from 'react-beautiful-dnd'; - -import ActionPanel from './ActionPanel'; -import SectionTitle from './SectionTitle'; -import PositionPanel from './PositionPanel'; -import Button from '../../elements/Button'; -import { NegativeFieldGutterProvider } from '../FieldTypeGutter/context'; -import FieldTypeGutter from '../FieldTypeGutter'; -import RenderFields from '../RenderFields'; -import { Props } from './types'; -import HiddenInput from '../field-types/HiddenInput'; -import { fieldAffectsData } from '../../../../fields/config/types'; - -import './index.scss'; - -const baseClass = 'draggable-section'; - -const DraggableSection: React.FC = (props) => { - const { - moveRow, - addRow, - removeRow, - rowIndex, - rowCount, - parentPath, - fieldSchema, - label, - blockType, - fieldTypes, - id, - setRowCollapse, - isCollapsed, - permissions, - readOnly, - hasMaxRows, - } = props; - - const [isHovered, setIsHovered] = useState(false); - - const classes = [ - baseClass, - isCollapsed ? 'is-collapsed' : 'is-open', - (isHovered && !readOnly) && 'is-hovered', - ].filter(Boolean).join(' '); - - return ( - - {(providedDrag) => ( -
setIsHovered(false)} - onMouseOver={() => setIsHovered(true)} - onFocus={() => setIsHovered(true)} - {...providedDrag.draggableProps} - > - -
- - - - -
- - - - ({ - ...field, - path: `${parentPath}.${rowIndex}${fieldAffectsData(field) ? `.${field.name}` : ''}`, - }))} - /> - - -
- - - {!readOnly && ( - - )} - -
-
- )} -
- ); -}; - -export default DraggableSection; diff --git a/src/admin/components/forms/DraggableSection/types.ts b/src/admin/components/forms/DraggableSection/types.ts deleted file mode 100644 index 059207491..000000000 --- a/src/admin/components/forms/DraggableSection/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Field, Block } from '../../../../fields/config/types'; -import { FieldTypes } from '../field-types'; -import { FieldPermissions } from '../../../../auth/types'; - -export type Props = { - moveRow: (fromIndex: number, toIndex: number) => void - addRow: (index: number, blockType?: string) => void - removeRow: (index: number) => void - rowIndex: number - rowCount: number - parentPath: string - fieldSchema: Field[], - label?: string - blockType?: string - fieldTypes: FieldTypes - id: string - isCollapsed?: boolean - setRowCollapse?: (id: string, open: boolean) => void - positionPanelVerticalAlignment?: 'top' | 'center' | 'sticky' - actionPanelVerticalAlignment?: 'top' | 'center' | 'sticky' - permissions: FieldPermissions - readOnly: boolean - blocks?: Block[] - hasMaxRows?: boolean -} diff --git a/test/dev/index.js b/test/dev/index.js index 5745bd70c..21ad58b0b 100644 --- a/test/dev/index.js +++ b/test/dev/index.js @@ -12,9 +12,9 @@ require('@babel/register')({ }, }); -const [testConfigDir] = process.argv.slice(2); +const [testSuiteDir] = process.argv.slice(2); -const configPath = path.resolve(__dirname, '../', testConfigDir, 'config.ts'); +const configPath = path.resolve(__dirname, '../', testSuiteDir, 'config.ts'); process.env.PAYLOAD_CONFIG_PATH = configPath; process.env.PAYLOAD_DROP_DATABASE = 'true'; diff --git a/test/e2e/uploads/.gitignore b/test/e2e/uploads/.gitignore deleted file mode 100644 index 9938aa6b4..000000000 --- a/test/e2e/uploads/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/media diff --git a/src/collections/tests/uploads.spec.ts b/test/int/uploads/index.spec.ts similarity index 100% rename from src/collections/tests/uploads.spec.ts rename to test/int/uploads/index.spec.ts diff --git a/test/uploads/.gitignore b/test/uploads/.gitignore new file mode 100644 index 000000000..9c471cc97 --- /dev/null +++ b/test/uploads/.gitignore @@ -0,0 +1,2 @@ +!media/.gitkeep +media diff --git a/test/e2e/uploads/config.ts b/test/uploads/config.ts similarity index 92% rename from test/e2e/uploads/config.ts rename to test/uploads/config.ts index b4250055c..bbea8ea68 100644 --- a/test/e2e/uploads/config.ts +++ b/test/uploads/config.ts @@ -1,8 +1,8 @@ import path from 'path'; import fs from 'fs'; -import { buildConfig } from '../buildConfig'; -import { devUser } from '../../credentials'; -import getFileByPath from '../../../src/uploads/getFileByPath'; +import { buildConfig } from '../e2e/buildConfig'; +import { devUser } from '../credentials'; +import getFileByPath from '../../src/uploads/getFileByPath'; export const mediaSlug = 'media'; diff --git a/test/e2e/uploads/index.spec.ts b/test/uploads/e2e.spec.ts similarity index 90% rename from test/e2e/uploads/index.spec.ts rename to test/uploads/e2e.spec.ts index 488eadadf..11826f207 100644 --- a/test/e2e/uploads/index.spec.ts +++ b/test/uploads/e2e.spec.ts @@ -1,13 +1,13 @@ import type { Page } from '@playwright/test'; import { expect, test } from '@playwright/test'; import path from 'path'; -import { AdminUrlUtil } from '../../helpers/adminUrlUtil'; -import { initPayloadE2E } from '../../helpers/configHelpers'; -import { login, saveDocAndAssert } from '../helpers'; import { relationSlug, mediaSlug } from './config'; import type { Media } from './payload-types'; -import wait from '../../../src/utilities/wait'; -import payload from '../../../src'; +import payload from '../../src'; +import { AdminUrlUtil } from '../helpers/adminUrlUtil'; +import { initPayloadE2E } from '../helpers/configHelpers'; +import { login, saveDocAndAssert } from '../e2e/helpers'; +import wait from '../../src/utilities/wait'; const { beforeAll, describe } = test; diff --git a/test/e2e/uploads/image.png b/test/uploads/image.png similarity index 100% rename from test/e2e/uploads/image.png rename to test/uploads/image.png diff --git a/test/uploads/int.spec.ts b/test/uploads/int.spec.ts new file mode 100644 index 000000000..e69de29bb diff --git a/test/e2e/uploads/mocks/mockFSModule.js b/test/uploads/mocks/mockFSModule.js similarity index 100% rename from test/e2e/uploads/mocks/mockFSModule.js rename to test/uploads/mocks/mockFSModule.js diff --git a/test/e2e/uploads/payload-types.ts b/test/uploads/payload-types.ts similarity index 100% rename from test/e2e/uploads/payload-types.ts rename to test/uploads/payload-types.ts