Add a test suite (#78)

This commit is contained in:
Paul Irish 2017-06-16 15:57:49 -07:00 committed by GitHub
parent 661a4cb20b
commit 927517adb9
8 changed files with 245 additions and 6 deletions

6
.gitmodules vendored Normal file
View 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

View file

@ -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

View file

@ -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

View file

@ -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 $?

View file

@ -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
View 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
}

@ -0,0 +1 @@
Subproject commit 9f88b4207da750093baabc4e3f41bf68f0dd3630

@ -0,0 +1 @@
Subproject commit 004e707638eedd62e0481e8cdc9223ad471f12ee