2025-01-26 16:06:06 -08:00

73 lines
2.2 KiB
TypeScript

import { InvalidDidError } from '../../src/did-error.js'
import { Did } from '../../src/did.js'
import { asDidPlc, assertDidPlc, isDidPlc } from '../../src/methods/plc.js'
const VALID: Did<'plc'>[] = [
'did:plc:l3rouwludahu3ui3bt66mfvj',
'did:plc:aaaaaaaaaaaaaaaaaaaaaaaa',
'did:plc:zzzzzzzzzzzzzzzzzzzzzzzz',
]
const INVALID: [value: unknown, message: string][] = [
['did:plc:l3rouwludahu3ui3bt66mfv0', 'Invalid character at position 31'],
['did:plc:l3rouwludahu3ui3bt66mfv1', 'Invalid character at position 31'],
['did:plc:l3rouwludahu3ui3bt66mfv9', 'Invalid character at position 31'],
['did:plc:l3rouwludahu3ui3bt66mfv', 'did:plc must be 32 characters long'],
['did:plc:l3rouwludahu3ui3bt66mfvja', 'did:plc must be 32 characters long'],
['did:plc:example.com:', 'did:plc must be 32 characters long'],
['did:plc:exam%3Aple.com%3A8080', 'did:plc must be 32 characters long'],
[3, 'DID must be a string'],
[{ toString: () => 'did:plc:foo.com' }, 'DID must be a string'],
[[''], 'DID must be a string'],
['random-string', 'Invalid did:plc prefix'],
['did plc', 'Invalid did:plc prefix'],
['lorem ipsum dolor sit', 'Invalid did:plc prefix'],
]
describe('isDidPlc', () => {
it('returns true for various valid dids', () => {
for (const did of VALID) {
expect(isDidPlc(did)).toBe(true)
}
})
it('returns false for invalid dids', () => {
for (const [did] of INVALID) {
expect(isDidPlc(did)).toBe(false)
}
})
})
describe('assertDidPlc', () => {
it('does not throw on valid dids', () => {
for (const did of VALID) {
expect(() => assertDidPlc(did)).not.toThrow()
}
})
it('throws if called with non string argument', () => {
for (const [val, message] of INVALID) {
expect(() => assertDidPlc(val)).toThrowError(
new InvalidDidError(
typeof val === 'string' ? val : typeof val,
message,
),
)
}
})
})
describe('asDidPlc', () => {
it('returns the input for valid dids', () => {
for (const did of VALID) {
expect(asDidPlc(did)).toBe(did)
}
})
it('throws if called with invalid dids', () => {
for (const [val] of INVALID) {
expect(() => asDidPlc(val)).toThrowError(InvalidDidError)
}
})
})