93c4719a21
* check handle as you type * metrics * add metric types * fix overflow * only check reserved handles for bsky.social, fix test * change validation check name * tweak input * move ghosttext component to textfield * tweak styles to try and match latest * add suggestions * improvements, metrics * share logic between typeahead and next button * Apply suggestions from code review Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * update checks, disable button if unavailable * convert to lowercase * fix bug with checkHandleAvailability * add gate * move files around to make clearer * fix bad import * Fix flashing next button * Enable for TF --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> Co-authored-by: Hailey <me@haileyok.com> Co-authored-by: Eric Bailey <git@esb.lol>
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import {type IsValidHandle, validateServiceHandle} from '#/lib/strings/handles'
|
|
|
|
describe('handle validation', () => {
|
|
const valid = [
|
|
['ali', 'bsky.social'],
|
|
['alice', 'bsky.social'],
|
|
['a-lice', 'bsky.social'],
|
|
['a-----lice', 'bsky.social'],
|
|
['123', 'bsky.social'],
|
|
['123456789012345678', 'bsky.social'],
|
|
['alice', 'custom-pds.com'],
|
|
['alice', 'my-custom-pds-with-long-name.social'],
|
|
['123456789012345678', 'my-custom-pds-with-long-name.social'],
|
|
]
|
|
it.each(valid)(`should be valid: %s.%s`, (handle, service) => {
|
|
const result = validateServiceHandle(handle, service)
|
|
expect(result.overall).toEqual(true)
|
|
})
|
|
|
|
const invalid = [
|
|
['al', 'bsky.social', 'frontLengthNotTooShort'],
|
|
['-alice', 'bsky.social', 'hyphenStartOrEnd'],
|
|
['alice-', 'bsky.social', 'hyphenStartOrEnd'],
|
|
['%%%', 'bsky.social', 'handleChars'],
|
|
['1234567890123456789', 'bsky.social', 'frontLengthNotTooLong'],
|
|
[
|
|
'1234567890123456789',
|
|
'my-custom-pds-with-long-name.social',
|
|
'frontLengthNotTooLong',
|
|
],
|
|
['al', 'my-custom-pds-with-long-name.social', 'frontLengthNotTooShort'],
|
|
['a'.repeat(300), 'toolong.com', 'totalLength'],
|
|
] satisfies [string, string, keyof IsValidHandle][]
|
|
it.each(invalid)(
|
|
`should be invalid: %s.%s due to %s`,
|
|
(handle, service, expectedError) => {
|
|
const result = validateServiceHandle(handle, service)
|
|
expect(result.overall).toEqual(false)
|
|
expect(result[expectedError]).toEqual(false)
|
|
},
|
|
)
|
|
})
|