Files
deepseek-harness/packages/experimental/forge-github/tests/urls.spec.ts
T

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()
})
})