Feature: hub compare
Background:
Given I am in "git://github.com/mislav/dotfiles.git" git repo
And I am "mislav" on github.com with OAuth token "OTOKEN"
Scenario: Compare branch
When I successfully run `hub compare refactor`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/refactor" should be run
Scenario: Compare complex branch
When I successfully run `hub compare feature/foo`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/feature/foo" should be run
Scenario: Compare branch with funky characters
When I successfully run `hub compare 'my#branch!with.special+chars'`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/my%23branch!with.special%2Bchars" should be run
Scenario: No args, no upstream
When I run `hub compare`
Then the exit status should be 1
And the stderr should contain:
"""
Usage: hub compare [-u] [-b ] [] [[...]]
"""
Scenario: Can't compare default branch to self
Given the default branch for "origin" is "develop"
And I am on the "develop" branch with upstream "origin/develop"
When I run `hub compare`
Then the exit status should be 1
And the stderr should contain:
"""
Usage: hub compare [-u] [-b ] [] [[...]]
"""
Scenario: No args, has upstream branch
Given I am on the "feature" branch with upstream "origin/experimental"
And git "push.default" is set to "upstream"
When I successfully run `hub compare`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/experimental" should be run
Scenario: Current branch has funky characters
Given I am on the "feature" branch with upstream "origin/my#branch!with.special+chars"
And git "push.default" is set to "upstream"
When I successfully run `hub compare`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/my%23branch!with.special%2Bchars" should be run
Scenario: Compare range
When I successfully run `hub compare 1.0...fix`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/1.0...fix" should be run
Scenario: Output URL without opening the browser
When I successfully run `hub compare -u 1.0...fix`
Then "open https://github.com/mislav/dotfiles/compare/1.0...fix" should not be run
And the stdout should contain exactly:
"""
https://github.com/mislav/dotfiles/compare/1.0...fix\n
"""
Scenario: Compare base in branch that is not master
Given I am on the "feature" branch with upstream "origin/experimental"
And git "push.default" is set to "upstream"
When I successfully run `hub compare -b master`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/master...experimental" should be run
Scenario: Compare base in master branch
Given I am on the "master" branch with upstream "origin/master"
And git "push.default" is set to "upstream"
When I successfully run `hub compare -b experimental`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/experimental...master" should be run
Scenario: Compare base with same branch as the current branch
Given I am on the "feature" branch with upstream "origin/experimental"
And git "push.default" is set to "upstream"
When I run `hub compare -b experimental`
Then "open https://github.com/mislav/dotfiles/compare/experimental...experimental" should not be run
And the exit status should be 1
And the stderr should contain:
"""
Usage: hub compare [-u] [-b ] [] [[...]]
"""
Scenario: Compare base with parameters
Given I am on the "master" branch with upstream "origin/master"
When I run `hub compare -b master experimental..master`
Then "open https://github.com/mislav/dotfiles/compare/experimental...master" should not be run
And the exit status should be 1
And the stderr should contain:
"""
Usage: hub compare [-u] [-b ] [] [[...]]
"""
Scenario: Compare 2-dots range for tags
When I successfully run `hub compare 1.0..fix`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/1.0...fix" should be run
Scenario: Compare 2-dots range for SHAs
When I successfully run `hub compare 1234abc..3456cde`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/1234abc...3456cde" should be run
Scenario: Compare 2-dots range with "user:repo" notation
When I successfully run `hub compare henrahmagix:master..2b10927`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/henrahmagix:master...2b10927" should be run
Scenario: Complex range is unchanged
When I successfully run `hub compare @{a..b}..@{c..d}`
Then there should be no output
And "open https://github.com/mislav/dotfiles/compare/@{a..b}..@{c..d}" should be run
Scenario: Compare wiki
Given the "origin" remote has url "git://github.com/mislav/dotfiles.wiki.git"
When I successfully run `hub compare 1.0..fix`
Then there should be no output
And "open https://github.com/mislav/dotfiles/wiki/_compare/1.0...fix" should be run
Scenario: Compare fork
When I successfully run `hub compare anotheruser feature`
Then there should be no output
And "open https://github.com/anotheruser/dotfiles/compare/feature" should be run
Scenario: Enterprise repo over HTTP
Given the "origin" remote has url "git://git.my.org/mislav/dotfiles.git"
And I am "mislav" on http://git.my.org with OAuth token "FITOKEN"
And "git.my.org" is a whitelisted Enterprise host
When I successfully run `hub compare refactor`
Then there should be no output
And "open http://git.my.org/mislav/dotfiles/compare/refactor" should be run
Scenario: Enterprise repo with explicit upstream project
Given the "origin" remote has url "git://git.my.org/mislav/dotfiles.git"
And I am "mislav" on git.my.org with OAuth token "FITOKEN"
And "git.my.org" is a whitelisted Enterprise host
When I successfully run `hub compare fehmicansaglam a..b`
Then there should be no output
And "open https://git.my.org/fehmicansaglam/dotfiles/compare/a...b" should be run
Scenario: Compare in non-GitHub repo
Given the "origin" remote has url "git@bitbucket.org:mislav/dotfiles.git"
And I am on the "feature" branch
When I run `hub compare`
Then the stdout should contain exactly ""
And the stderr should contain exactly:
"""
Aborted: the origin remote doesn't point to a GitHub repository.\n
"""
And the exit status should be 1
Scenario: Comparing two branches while not on a local branch
Given I am in detached HEAD
And I run `hub compare refactor...master`
Then the exit status should be 0
And there should be no output
And "open https://github.com/mislav/dotfiles/compare/refactor...master" should be run