mirror of
https://github.com/paulirish/git-open.git
synced 2026-09-10 07:26:15 -04:00
Add a test suite (#78)
This commit is contained in:
parent
661a4cb20b
commit
927517adb9
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[submodule "test/test_helper/bats-assert"]
|
||||||
|
path = test/test_helper/bats-assert
|
||||||
|
url = https://github.com/ztombol/bats-assert
|
||||||
|
[submodule "test/test_helper/bats-support"]
|
||||||
|
path = test/test_helper/bats-support
|
||||||
|
url = https://github.com/ztombol/bats-support
|
||||||
|
|
@ -9,6 +9,8 @@ addons:
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- node_modules
|
- node_modules
|
||||||
|
before_install:
|
||||||
|
- git clone --depth 1 https://github.com/sstephenson/bats.git
|
||||||
install:
|
install:
|
||||||
- npm install
|
- npm install
|
||||||
script:
|
script:
|
||||||
|
|
@ -16,5 +18,4 @@ script:
|
||||||
- npm run lint:readme
|
- npm run lint:readme
|
||||||
- npm run lint:editorconfig
|
- npm run lint:editorconfig
|
||||||
- shellcheck git-open
|
- shellcheck git-open
|
||||||
|
- ./bats/bin/bats test/*.bats
|
||||||
|
|
||||||
|
|
|
||||||
24
README.md
24
README.md
|
|
@ -119,7 +119,7 @@ If your Gitlab custom hosted is serving `http` you can also specify this:
|
||||||
git config [--global] gitopen.gitlab.protocol http
|
git config [--global] gitopen.gitlab.protocol http
|
||||||
```
|
```
|
||||||
|
|
||||||
## Related projects / alternatives
|
## Alternative projects
|
||||||
|
|
||||||
See [hub](https://github.com/github/hub) for complete GitHub opening support.
|
See [hub](https://github.com/github/hub) for complete GitHub opening support.
|
||||||
It's the official GitHub project and provides `hub browse`.
|
It's the official GitHub project and provides `hub browse`.
|
||||||
|
|
@ -138,10 +138,30 @@ from which this plugin was forked.
|
||||||
|
|
||||||
[jasonmccreary](https://github.com/jasonmccreary/) did [the initial hard work](https://github.com/jasonmccreary/gh). Since then, [many contributors](https://github.com/paulirish/git-open/graphs/contributors) have submitted great PRs.
|
[jasonmccreary](https://github.com/jasonmccreary/) did [the initial hard work](https://github.com/jasonmccreary/gh). Since then, [many contributors](https://github.com/paulirish/git-open/graphs/contributors) have submitted great PRs.
|
||||||
|
|
||||||
## Contributing
|
## Contributing & Development
|
||||||
|
|
||||||
Please provide examples of the URLs you are parsing with each PR.
|
Please provide examples of the URLs you are parsing with each PR.
|
||||||
|
|
||||||
|
You can run `git-open` in `echo` mode, which doesn't open your browser, but just prints the URL to stdout:
|
||||||
|
```sh
|
||||||
|
BATS_CWD="." ./git-open
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Testing:
|
||||||
|
|
||||||
|
You'll need to install [bats](https://github.com/sstephenson/bats#installing-bats-from-source), the Bash automated testing system. It's also available as `brew install bats`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git submodule update --init # pull in the assertion libraries
|
||||||
|
|
||||||
|
# Run the test suite once:
|
||||||
|
bats test
|
||||||
|
|
||||||
|
# Run it on every change with `entr`
|
||||||
|
brew install entr
|
||||||
|
npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
## Related projects
|
## Related projects
|
||||||
|
|
||||||
- [`git recent`](https://github.com/paulirish/git-recent) - View your most recent git branches
|
- [`git recent`](https://github.com/paulirish/git-recent) - View your most recent git branches
|
||||||
|
|
|
||||||
10
git-open
10
git-open
|
|
@ -158,6 +158,14 @@ case $( uname -s ) in
|
||||||
*) open=${BROWSER:-xdg-open};;
|
*) open=${BROWSER:-xdg-open};;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# if testing, log results to stdout. otherwise, mute the output
|
||||||
|
if [ "$BATS_CWD" ]; then
|
||||||
|
open=echo
|
||||||
|
else
|
||||||
|
exec &>/dev/null
|
||||||
|
fi;
|
||||||
|
|
||||||
# open it in a browser
|
# open it in a browser
|
||||||
$open "$giturl" &> /dev/null
|
$open "$giturl"
|
||||||
|
|
||||||
exit $?
|
exit $?
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@
|
||||||
"lint:editorconfig": "eclint check git-open* readme* .travis.yml",
|
"lint:editorconfig": "eclint check git-open* readme* .travis.yml",
|
||||||
"lint:package": "pjv --recommendations --warnings",
|
"lint:package": "pjv --recommendations --warnings",
|
||||||
"lint:readme": "node ./node_modules/markdownlint/lib/markdownlint.js --config markdownlint.json README.md",
|
"lint:readme": "node ./node_modules/markdownlint/lib/markdownlint.js --config markdownlint.json README.md",
|
||||||
"test": "npm run lint:package && npm run lint:readme && npm run lint:editorconfig"
|
"test": "npm run lint:package && npm run lint:readme && npm run lint:editorconfig",
|
||||||
|
"watch": "find . -maxdepth 2 -iname '*bats' -o -iname 'git-open' | entr bats test/"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
||||||
201
test/git-open.bats
Normal file
201
test/git-open.bats
Normal file
|
|
@ -0,0 +1,201 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
|
||||||
|
load "test_helper/bats-support/load"
|
||||||
|
load "test_helper/bats-assert/load"
|
||||||
|
|
||||||
|
foldername="sandboxrepo"
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
create_git_sandbox
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## GitHub
|
||||||
|
##
|
||||||
|
|
||||||
|
@test "gh: basic" {
|
||||||
|
git remote set-url origin "git@github.com:user/repo.git"
|
||||||
|
git checkout -B "master"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/user/repo/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: branch" {
|
||||||
|
git remote set-url origin "git@github.com:user/repo.git"
|
||||||
|
git checkout -B "mybranch"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/user/repo/tree/mybranch"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: non-origin remote" {
|
||||||
|
git remote set-url origin "git@github.com:user/repo.git"
|
||||||
|
git remote add upstream "git@github.com:upstreamorg/repo.git"
|
||||||
|
run ../git-open "upstream"
|
||||||
|
assert_output "https://github.com/upstreamorg/repo/"
|
||||||
|
|
||||||
|
git checkout -B "mybranch"
|
||||||
|
run ../git-open "upstream" "otherbranch"
|
||||||
|
assert_output "https://github.com/upstreamorg/repo/tree/otherbranch"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: without git user" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/63
|
||||||
|
git remote set-url origin "github.com:paulirish/git-open.git"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/paulirish/git-open/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: ssh origin" {
|
||||||
|
git remote set-url origin "ssh://git@github.com/user/repo"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/user/repo/"
|
||||||
|
|
||||||
|
# https://github.com/paulirish/git-open/pull/30
|
||||||
|
git remote set-url origin "ssh://git@github.com/user/repo.git"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/user/repo/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: git protocol origin" {
|
||||||
|
# currently fails. derimagia rewrite fixes
|
||||||
|
skip
|
||||||
|
|
||||||
|
git remote set-url origin "git://github.com/user/repo.git"
|
||||||
|
git checkout -B "master"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/user/repo"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: git open issue" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/46
|
||||||
|
git remote set-url origin "github.com:paulirish/git-open.git"
|
||||||
|
git checkout -B "issues/#12"
|
||||||
|
run ../git-open "issue"
|
||||||
|
assert_output "https://github.com/paulirish/git-open/issues/12"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gh: gist" {
|
||||||
|
git remote set-url origin "git@gist.github.com:2d84a6db1b41b4020685.git"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://gist.github.com/2d84a6db1b41b4020685/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "basic: # and % in branch names are URL encoded" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/24
|
||||||
|
git checkout -B "issue-#42"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/paulirish/git-open/tree/issue-%2342"
|
||||||
|
|
||||||
|
git checkout -B "just-50%"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://github.com/paulirish/git-open/tree/just-50%25"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## Bitbucket
|
||||||
|
##
|
||||||
|
|
||||||
|
@test "bitbucket: basic" {
|
||||||
|
git remote set-url origin "git@bitbucket.org:paulirish/crbug-extension.git"
|
||||||
|
run ../git-open
|
||||||
|
assert_output --partial "https://bitbucket.org/paulirish/crbug-extension/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "bitbucket: non-origin remote" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/4
|
||||||
|
git remote add bbclone "git@bitbucket.org:rwhitbeck/git-open.git"
|
||||||
|
run ../git-open "bbclone"
|
||||||
|
assert_output --partial "https://bitbucket.org/rwhitbeck/git-open/"
|
||||||
|
assert_output --partial "//?at=master"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "bitbucket: branch" {
|
||||||
|
git remote set-url origin "https://paulirish@bitbucket.org/malb/lwe-estimator.git"
|
||||||
|
git checkout -B "new-bkw"
|
||||||
|
run ../git-open
|
||||||
|
assert_output --partial "https://bitbucket.org/malb/lwe-estimator/src/"
|
||||||
|
assert_output --partial "?at=new-bkw"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "bitbucket: ssh:// clone urls" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/36
|
||||||
|
git remote set-url origin "ssh://git@bitbucket.org/lbesson/bin.git"
|
||||||
|
run ../git-open
|
||||||
|
assert_output --partial "https://bitbucket.org/lbesson/bin/"
|
||||||
|
assert_output --partial "//?at=master"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "bitbucket: no username@ in final url" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/69
|
||||||
|
git remote set-url origin "https://trend_rand@bitbucket.org/trend_rand/test-repo.git"
|
||||||
|
run ../git-open
|
||||||
|
refute_output --partial "@"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## GitLab
|
||||||
|
##
|
||||||
|
|
||||||
|
@test "gitlab: separate domains" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/56
|
||||||
|
git remote set-url origin "git@git.example.com:namespace/project.git"
|
||||||
|
git config "gitopen.gitlab.domain" "gitlab.example.com"
|
||||||
|
git config "gitopen.gitlab.ssh.domain" "git.example.com"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://gitlab.example.com/namespace/project/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gitlab: default ssh origin style" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/55
|
||||||
|
git remote set-url origin "git@gitlab.example.com:user/repo"
|
||||||
|
git config "gitopen.gitlab.domain" "gitlab.example.com"
|
||||||
|
run ../git-open
|
||||||
|
assert_output "https://gitlab.example.com/user/repo/"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "gitlab: ssh:// origin style" {
|
||||||
|
# https://github.com/paulirish/git-open/pull/51
|
||||||
|
git remote set-url origin "ssh://git@gitlab.domain.com/user/repo"
|
||||||
|
git config "gitopen.gitlab.domain" "gitlab.domain.com"
|
||||||
|
run ../git-open
|
||||||
|
assert_output --partial "https://gitlab.domain.com/"
|
||||||
|
assert_output --partial "/user/repo/"
|
||||||
|
# assert_output "https://gitlab.domain.com//user/repo/" # TODO fix double slash
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Tests not yet written:
|
||||||
|
# * gitopen.gitlab.port
|
||||||
|
# * gitopen.gitlab.protocol
|
||||||
|
# * Atlassian Bitbucket Server (https://github.com/paulirish/git-open/pull/15)
|
||||||
|
|
||||||
|
|
||||||
|
teardown() {
|
||||||
|
cd ..
|
||||||
|
rm -rf "$foldername"
|
||||||
|
}
|
||||||
|
|
||||||
|
# helper to create a test git sandbox that won't dirty the real repo
|
||||||
|
function create_git_sandbox() {
|
||||||
|
rm -rf "$foldername"
|
||||||
|
mkdir "$foldername"
|
||||||
|
cd "$foldername"
|
||||||
|
|
||||||
|
git init -q
|
||||||
|
git config user.email "test@runner.com" && git config user.name "Test Runner"
|
||||||
|
# newer git auto-creates the origin remote
|
||||||
|
if [ $(git remote) ]; then
|
||||||
|
git remote set-url origin "github.com:paulirish/git-open.git"
|
||||||
|
else
|
||||||
|
git remote add origin "github.com:paulirish/git-open.git"
|
||||||
|
fi
|
||||||
|
git checkout -B "master"
|
||||||
|
|
||||||
|
echo "ok" > readme.txt
|
||||||
|
git add readme.txt
|
||||||
|
git commit -m "add file" -q
|
||||||
|
}
|
||||||
1
test/test_helper/bats-assert
Submodule
1
test/test_helper/bats-assert
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 9f88b4207da750093baabc4e3f41bf68f0dd3630
|
||||||
1
test/test_helper/bats-support
Submodule
1
test/test_helper/bats-support
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 004e707638eedd62e0481e8cdc9223ad471f12ee
|
||||||
Loading…
Reference in a new issue