Skip to content

Commit 0043690

Browse files
committed
refactor: rename 'supported' → 'synchronous' query, move helper stuff
1 parent 765f7b5 commit 0043690

File tree

3 files changed

+43
-32
lines changed

3 files changed

+43
-32
lines changed

lib/fixture/locator/fixtures.ts

+11-26
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,28 @@
1-
import type {Locator, Page, PlaywrightTestArgs, TestFixture} from '@playwright/test'
1+
import type {Locator, PlaywrightTestArgs, TestFixture} from '@playwright/test'
22
import {selectors} from '@playwright/test'
3-
import {queries} from '@testing-library/dom'
43

5-
import {replacer} from '../helpers'
6-
import type {
7-
Config,
8-
LocatorQueries as Queries,
9-
Query,
10-
SelectorEngine,
11-
SupportedQuery,
12-
} from '../types'
4+
import type {Config, LocatorQueries as Queries, SelectorEngine, SynchronousQuery} from '../types'
135

14-
import {buildTestingLibraryScript, isAllQuery, isNotFindQuery, queryToSelector} from './helpers'
6+
import {
7+
buildTestingLibraryScript,
8+
isAllQuery,
9+
queriesFor,
10+
queryToSelector,
11+
synchronousQueryNames,
12+
} from './helpers'
1513

16-
const allQueryNames = Object.keys(queries) as Query[]
17-
18-
const queryNames = allQueryNames.filter(isNotFindQuery)
1914
const defaultConfig: Config = {testIdAttribute: 'data-testid', asyncUtilTimeout: 1000}
2015

2116
const options = Object.fromEntries(
2217
Object.entries(defaultConfig).map(([key, value]) => [key, [value, {option: true}] as const]),
2318
)
2419

25-
const queriesFor = (pageOrLocator: Page | Locator) =>
26-
queryNames.reduce(
27-
(rest, query) => ({
28-
...rest,
29-
[query]: (...args: Parameters<Queries[keyof Queries]>) =>
30-
pageOrLocator.locator(`${queryToSelector(query)}=${JSON.stringify(args, replacer)}`),
31-
}),
32-
{} as Queries,
33-
)
34-
3520
const queriesFixture: TestFixture<Queries, PlaywrightTestArgs> = async ({page}, use) =>
3621
use(queriesFor(page))
3722

3823
const within = (locator: Locator): Queries => queriesFor(locator)
3924

40-
declare const queryName: SupportedQuery
25+
declare const queryName: SynchronousQuery
4126

4227
const engine: () => SelectorEngine = () => ({
4328
query(root, selector) {
@@ -77,7 +62,7 @@ const registerSelectorsFixture: [
7762
async ({}, use) => {
7863
try {
7964
await Promise.all(
80-
queryNames.map(async name =>
65+
synchronousQueryNames.map(async name =>
8166
selectors.register(
8267
queryToSelector(name),
8368
`(${engine.toString().replace(/queryName/g, `"${name}"`)})()`,

lib/fixture/locator/helpers.ts

+29-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
11
import {promises as fs} from 'fs'
22

3+
import type {Locator, Page} from '@playwright/test'
4+
import {queries} from '@testing-library/dom'
5+
36
import {configureTestingLibraryScript} from '../../common'
4-
import {reviver} from '../helpers'
5-
import type {AllQuery, Config, FindQuery, Query, Selector, SupportedQuery} from '../types'
7+
import {replacer, reviver} from '../helpers'
8+
import type {
9+
AllQuery,
10+
Config,
11+
FindQuery,
12+
LocatorQueries as Queries,
13+
Query,
14+
Selector,
15+
SynchronousQuery,
16+
} from '../types'
17+
18+
const allQueryNames = Object.keys(queries) as Query[]
619

720
const isAllQuery = (query: Query): query is AllQuery => query.includes('All')
821
const isNotFindQuery = (query: Query): query is Exclude<Query, FindQuery> =>
922
!query.startsWith('find')
1023

11-
const queryToSelector = (query: SupportedQuery) =>
24+
const queryToSelector = (query: SynchronousQuery) =>
1225
query.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() as Selector
1326

1427
const buildTestingLibraryScript = async ({config}: {config: Config}) => {
@@ -26,4 +39,16 @@ const buildTestingLibraryScript = async ({config}: {config: Config}) => {
2639
`
2740
}
2841

29-
export {isAllQuery, isNotFindQuery, queryToSelector, buildTestingLibraryScript}
42+
const synchronousQueryNames = allQueryNames.filter(isNotFindQuery)
43+
44+
const queriesFor = (pageOrLocator: Page | Locator) =>
45+
synchronousQueryNames.reduce(
46+
(rest, query) => ({
47+
...rest,
48+
[query]: (...args: Parameters<Queries[keyof Queries]>) =>
49+
pageOrLocator.locator(`${queryToSelector(query)}=${JSON.stringify(args, replacer)}`),
50+
}),
51+
{} as Queries,
52+
)
53+
54+
export {buildTestingLibraryScript, isAllQuery, queriesFor, queryToSelector, synchronousQueryNames}

lib/fixture/types.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ export type Query = keyof Queries
4545

4646
export type AllQuery = Extract<Query, `${string}All${string}`>
4747
export type FindQuery = Extract<Query, `find${string}`>
48-
export type SupportedQuery = Exclude<Query, FindQuery>
48+
export type GetQuery = Extract<Query, `get${string}`>
49+
export type SynchronousQuery = Exclude<Query, FindQuery>
4950

50-
export type Selector = KebabCase<SupportedQuery>
51+
export type Selector = KebabCase<SynchronousQuery>
5152

5253
export type {Config}
5354
export interface ConfigFn {

0 commit comments

Comments
 (0)