spec/support/github_helpers.rb in git_reflow-0.8.9 vs spec/support/github_helpers.rb in git_reflow-0.8.10

- old
+ new

@@ -1,109 +1,99 @@ -$LOAD_PATH << 'lib' -require 'git_reflow' -require 'github_api' -require 'spec_helper' - -module GithubHelpers - def stub_github_with(options = {}) - - hostname = options[:hostname] || 'hostname.local' - api_endpoint = options[:api_endpoint] || "https://api.github.com" - site_url = options[:site_url] || "https://github.com" - user = options[:user] || 'reenhanced' - password = options[:passwordl] || 'shazam' - oauth_token_hash = Hashie::Mash.new({ token: 'a1b2c3d4e5f6g7h8i9j0', note: 'git-reflow (hostname.local)'}) - repo = options[:repo] || 'repo' - branch = options[:branch] || 'new-feature' - pull = options[:pull] - - allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question| - values = { - "Please enter your GitHub username: " => user, - "Please enter your GitHub password (we do NOT store this): " => password, - "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site, - "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api - } - return_value = values[question] || values[terminal] - question = "" - return_value - end - - github = Github.new do |config| - config.oauth_token = oauth_token_hash.token - config.endpoint = api_endpoint - config.site = site_url - config.adapter = :net_http - config.ssl = {:verify => false} - end - - stub_request(:get, "#{api_endpoint}/authorizations?").to_return(:body => [oauth_token_hash].to_json, status: 200, headers: {}) - allow(Github::Client).to receive(:new).and_return(github) - allow(GitReflow).to receive(:push_current_branch).and_return(true) - allow(GitReflow).to receive(:github).and_return(github) - allow(GitReflow).to receive(:current_branch).and_return(branch) - allow(GitReflow).to receive(:remote_repo_name).and_return(repo) - allow(GitReflow).to receive(:remote_user).and_return(user) - allow(GitReflow).to receive(:fetch_destination).and_return(true) - allow(GitReflow).to receive(:update_destination).and_return(true) - - allow_any_instance_of(GitReflow::GitServer::GitHub).to receive(:run).with('hostname', loud: false).and_return(hostname) - github_server = GitReflow::GitServer::GitHub.new - allow(github_server.class).to receive(:user).and_return(user) - allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token) - allow(github_server.class).to receive(:site_url).and_return(site_url) - allow(github_server.class).to receive(:api_endpoint).and_return(api_endpoint) - allow(github_server.class).to receive(:remote_user).and_return(user) - allow(github_server.class).to receive(:remote_repo).and_return(repo) - allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token) - allow(github_server.class).to receive(:get_committed_time).and_return(Time.now) - - allow(GitReflow).to receive(:git_server).and_return(github_server) - - # Stubbing statuses for a given commit - #stub_request(:get, %r{#{GitReflow.git_server.class.api_endpoint}/repos/#{user}/commits/\w+}). - # to_return(:body => Fixture.new('repositories/commit.json.erb', repo_owner: user, repo_name: repo, author: user).to_json.to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - stub_request(:get, %r{/repos/#{user}/(#{repo}/)?commits/\w+/statuses}). - to_return(:body => Fixture.new('repositories/statuses.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - - if pull - # Stubbing review - stub_post("/repos/#{user}/#{repo}/pulls"). - to_return(:body => pull.to_s, :status => 201, :headers => {:content_type => "application/json\; charset=utf-8"}) - - # Stubbing pull request finder - stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). - to_return(:body => Fixture.new('pull_requests/pull_request.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - stub_get("/repos/#{user}/pulls").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0', 'base' => 'master', 'head' => "#{user}:#{branch}", 'state' => 'open'}). - to_return(:body => Fixture.new('pull_requests/pull_requests.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - stub_get("/repos/#{user}/#{repo}/pulls").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0', 'base' => 'master', 'head' => "#{user}:#{branch}", 'state' => 'open'}). - to_return(:body => Fixture.new('pull_requests/pull_requests.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - # Stubbing pull request comments - stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). - to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"}) - stub_get("/repos/#{user}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). - to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"}) - # Stubbing issue comments - stub_get("/repos/#{user}/issues/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). - to_return(:body => Fixture.new('issues/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - stub_get("/repos/#{user}/#{repo}/issues/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). - to_return(:body => Fixture.new('issues/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) - # Stubbing pull request commits - stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}/commits").with(query: {"access_token" => "a1b2c3d4e5f6g7h8i9j0"}). - to_return(:body => Fixture.new("pull_requests/commits.json").to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"}) - stub_request(:get, %r{/repos/#{user}/commits/\w+}).with(query: {"access_token" => "a1b2c3d4e5f6g7h8i9j0"}). - to_return(:body => Fixture.new("repositories/commit.json").to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"}) - end - - github_server - end -end -# -# the github_api gem does some overrides to Hash so we have to make sure -# this still works here... -class Hash - def except(*keys) - cpy = self.dup - keys.each { |key| cpy.delete(key) } - cpy - end -end +$LOAD_PATH << 'lib' +require 'git_reflow' +require 'github_api' +require 'spec_helper' + +module GithubHelpers + def stub_github_with(options = {}) + + hostname = options[:hostname] || 'hostname.local' + api_endpoint = options[:api_endpoint] || "https://api.github.com" + site_url = options[:site_url] || "https://github.com" + user = options[:user] || 'reenhanced' + password = options[:passwordl] || 'shazam' + oauth_token_hash = Hashie::Mash.new({ token: 'a1b2c3d4e5f6g7h8i9j0', note: 'git-reflow (hostname.local)'}) + repo = options[:repo] || 'repo' + branch = options[:branch] || 'new-feature' + pull = options[:pull] + + allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question| + values = { + "Please enter your GitHub username: " => user, + "Please enter your GitHub password (we do NOT store this): " => password, + "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site, + "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api + } + return_value = values[question] || values[terminal] + question = "" + return_value + end + + github = Github.new do |config| + config.oauth_token = oauth_token_hash.token + config.endpoint = api_endpoint + config.site = site_url + config.adapter = :net_http + config.ssl = {:verify => false} + end + + stub_request(:get, "#{api_endpoint}/authorizations?").to_return(:body => [oauth_token_hash].to_json, status: 200, headers: {}) + allow(Github::Client).to receive(:new).and_return(github) + allow(GitReflow).to receive(:push_current_branch).and_return(true) + allow(GitReflow).to receive(:github).and_return(github) + allow(GitReflow).to receive(:current_branch).and_return(branch) + allow(GitReflow).to receive(:remote_repo_name).and_return(repo) + allow(GitReflow).to receive(:remote_user).and_return(user) + allow(GitReflow).to receive(:fetch_destination).and_return(true) + allow(GitReflow).to receive(:update_destination).and_return(true) + + allow_any_instance_of(GitReflow::GitServer::GitHub).to receive(:run).with('hostname', loud: false).and_return(hostname) + github_server = GitReflow::GitServer::GitHub.new + allow(github_server.class).to receive(:user).and_return(user) + allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token) + allow(github_server.class).to receive(:site_url).and_return(site_url) + allow(github_server.class).to receive(:api_endpoint).and_return(api_endpoint) + allow(github_server.class).to receive(:remote_user).and_return(user) + allow(github_server.class).to receive(:remote_repo).and_return(repo) + allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token) + allow(github_server.class).to receive(:get_committed_time).and_return(Time.now) + + allow(GitReflow).to receive(:git_server).and_return(github_server) + + # Stubbing statuses for a given commit + #stub_request(:get, %r{#{GitReflow.git_server.class.api_endpoint}/repos/#{user}/commits/\w+}). + # to_return(:body => Fixture.new('repositories/commit.json.erb', repo_owner: user, repo_name: repo, author: user).to_json.to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + stub_request(:get, %r{/repos/#{user}/(#{repo}/)?commits/\w+/statuses}). + to_return(:body => Fixture.new('repositories/statuses.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + + if pull + # Stubbing review + stub_post("/repos/#{user}/#{repo}/pulls"). + to_return(:body => pull.to_s, :status => 201, :headers => {:content_type => "application/json\; charset=utf-8"}) + + # Stubbing pull request finder + stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). + to_return(:body => Fixture.new('pull_requests/pull_request.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + stub_get("/repos/#{user}/pulls").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0', 'base' => 'master', 'head' => "#{user}:#{branch}", 'state' => 'open'}). + to_return(:body => Fixture.new('pull_requests/pull_requests.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + stub_get("/repos/#{user}/#{repo}/pulls").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0', 'base' => 'master', 'head' => "#{user}:#{branch}", 'state' => 'open'}). + to_return(:body => Fixture.new('pull_requests/pull_requests.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + # Stubbing pull request comments + stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). + to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"}) + stub_get("/repos/#{user}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). + to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"}) + # Stubbing issue comments + stub_get("/repos/#{user}/issues/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). + to_return(:body => Fixture.new('issues/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + stub_get("/repos/#{user}/#{repo}/issues/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}). + to_return(:body => Fixture.new('issues/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"}) + # Stubbing pull request commits + stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}/commits").with(query: {"access_token" => "a1b2c3d4e5f6g7h8i9j0"}). + to_return(:body => Fixture.new("pull_requests/commits.json").to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"}) + stub_request(:get, %r{/repos/#{user}/commits/\w+}).with(query: {"access_token" => "a1b2c3d4e5f6g7h8i9j0"}). + to_return(:body => Fixture.new("repositories/commit.json").to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"}) + end + + github_server + end +end