68 lines
2.7 KiB
TypeScript
68 lines
2.7 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { isSegment, parsePullRequestUrl, parseRemoteUrl } from '../src/urls.ts'
|
|
|
|
const demo = { host: 'github.com', owner: 'octo', name: 'demo' }
|
|
|
|
describe('remote URLs', () => {
|
|
it.each([
|
|
['https://github.com/octo/demo.git', demo],
|
|
['https://user:[email protected]/octo/demo', demo],
|
|
['http://github.com/octo/demo/', demo],
|
|
['ssh://[email protected]:22/octo/demo.git', demo],
|
|
['https://ghe.example.com:8443/team/repo.git', { host: 'ghe.example.com:8443', owner: 'team', name: 'repo' }],
|
|
['http://ghe.example.com:8080/team/repo', { host: 'ghe.example.com:8080', owner: 'team', name: 'repo' }],
|
|
['SSH://[email protected]:7999/team/repo.git', { host: 'ghe.example.com', owner: 'team', name: 'repo' }],
|
|
['git://github.com/octo/demo', demo],
|
|
['[email protected]:octo/demo.git', demo],
|
|
['github.com:octo/demo.git', demo],
|
|
[' [email protected]:team/svc.GIT ', { host: 'ghe.corp.example', owner: 'team', name: 'svc' }],
|
|
['https://github.com/octo/my.repo-name_1.git', { host: 'github.com', owner: 'octo', name: 'my.repo-name_1' }],
|
|
])('parses %s', (url, expected) => {
|
|
expect(parseRemoteUrl(url)).toEqual(expected)
|
|
})
|
|
|
|
it.each([
|
|
'https://github.com/octo',
|
|
'https://github.com/octo/demo/extra',
|
|
'/local/path/repo.git',
|
|
'file:///tmp/repo.git',
|
|
'C:/repo',
|
|
'[email protected]:octo/../demo',
|
|
'[email protected]:../demo',
|
|
'https://github.com/oc to/demo',
|
|
'not a url',
|
|
])('rejects %s', (url) => {
|
|
expect(parseRemoteUrl(url)).toBeUndefined()
|
|
})
|
|
|
|
it('rejects dot segments as owner or name', () => {
|
|
expect(isSegment('.')).toBe(false)
|
|
expect(isSegment('..')).toBe(false)
|
|
expect(isSegment('demo.js')).toBe(true)
|
|
})
|
|
})
|
|
|
|
describe('pull request URLs', () => {
|
|
it('uses the same host identity as an HTTP remote with a custom port', () => {
|
|
const remote = parseRemoteUrl('https://ghe.example.com:8443/team/repo.git')
|
|
expect(parsePullRequestUrl('https://ghe.example.com:8443/team/repo/pull/1')).toEqual({ ...remote, number: 1 })
|
|
})
|
|
it.each([
|
|
['https://github.com/octo/demo/pull/12', { ...demo, number: 12 }],
|
|
['https://GITHUB.com/octo/demo/pull/12/files?diff=split#top', { ...demo, number: 12 }],
|
|
['http://ghe.corp.example/team/svc/pull/3', { host: 'ghe.corp.example', owner: 'team', name: 'svc', number: 3 }],
|
|
])('parses %s', (url, expected) => {
|
|
expect(parsePullRequestUrl(url)).toEqual(expected)
|
|
})
|
|
|
|
it.each([
|
|
'https://github.com/octo/demo/issues/12',
|
|
'https://github.com/octo/demo/pull/0',
|
|
'https://github.com/octo/demo/pull/99999999999999999999',
|
|
'https://github.com/o o/demo/pull/1',
|
|
'https://github.com/octo/demo/pulls/1',
|
|
])('rejects %s', (url) => {
|
|
expect(parsePullRequestUrl(url)).toBeUndefined()
|
|
})
|
|
})
|