diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 0e98934..f62e871 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by `rubocop --auto-gen-config` -# on 2015-05-26 16:00:55 +0300 using RuboCop version 0.31.0. +# on 2015-06-11 16:35:14 +0300 using RuboCop version 0.31.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 14 +# Offense count: 13 Metrics/AbcSize: - Max: 59 + Max: 63 # Offense count: 1 Metrics/CyclomaticComplexity: @@ -21,7 +21,7 @@ Metrics/PerceivedComplexity: Style/AccessorMethodName: Enabled: false -# Offense count: 8 +# Offense count: 10 Style/Documentation: Enabled: false diff --git a/CHANGELOG.md b/CHANGELOG.md index e037874..05bf30e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## [Unreleased](https://github.com/skywinder/github-changelog-generator/tree/HEAD) + +[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.5.0...HEAD) + +**Fixed bugs:** + +- Exclude and Include tags is broken [\#245](https://github.com/skywinder/github-changelog-generator/issues/245) + ## [1.5.0](https://github.com/skywinder/github-changelog-generator/tree/1.5.0) (2015-05-26) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.4.1...1.5.0) diff --git a/github_changelog_generator.gemspec b/github_changelog_generator.gemspec index ff4c3cc..6f4c59d 100644 --- a/github_changelog_generator.gemspec +++ b/github_changelog_generator.gemspec @@ -23,9 +23,10 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_development_dependency "bundler", "~> 1.7" - spec.add_development_dependency "rake", "~> 10.0" - spec.add_runtime_dependency("github_api", ["~> 0.12"]) spec.add_runtime_dependency("colorize", ["~> 0.7"]) + + # Development only + spec.add_development_dependency "bundler", "~> 1.7" + spec.add_development_dependency "rake", "~> 10.0" end diff --git a/lib/github_changelog_generator.rb b/lib/github_changelog_generator.rb index c35db79..3b1e60f 100755 --- a/lib/github_changelog_generator.rb +++ b/lib/github_changelog_generator.rb @@ -5,6 +5,7 @@ require "json" require "colorize" require "benchmark" +require_relative "github_changelog_generator/helper" require_relative "github_changelog_generator/parser" require_relative "github_changelog_generator/generator/generator" require_relative "github_changelog_generator/version" diff --git a/lib/github_changelog_generator/fetcher.rb b/lib/github_changelog_generator/fetcher.rb index 5fb3c57..d18273f 100644 --- a/lib/github_changelog_generator/fetcher.rb +++ b/lib/github_changelog_generator/fetcher.rb @@ -1,11 +1,10 @@ -require "logger" - module GitHubChangelogGenerator # A Fetcher responsible for all requests to GitHub and all basic manipulation with related data # (such as filtering, validating, e.t.c) # # Example: # fetcher = GitHubChangelogGenerator::Fetcher.new options + class Fetcher PER_PAGE_NUMBER = 30 CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN" @@ -16,16 +15,9 @@ module GitHubChangelogGenerator def initialize(options = {}) @options = options || {} - - @logger = Logger.new(STDOUT) - @logger.formatter = proc do |_severity, _datetime, _progname, msg| - "#{msg}\n" - end - @user = @options[:user] @project = @options[:project] @github_token = fetch_github_token - @tag_times_hash = {} github_options = { per_page: PER_PAGE_NUMBER } github_options[:oauth_token] = @github_token unless @github_token.nil? github_options[:endpoint] = @options[:github_endpoint] unless @options[:github_endpoint].nil? @@ -41,7 +33,7 @@ module GitHubChangelogGenerator def fetch_github_token env_var = @options[:token] ? @options[:token] : (ENV.fetch CHANGELOG_GITHUB_TOKEN, nil) - @logger.warn NO_TOKEN_PROVIDED.yellow unless env_var + Helper.log.warn NO_TOKEN_PROVIDED.yellow unless env_var env_var end @@ -51,27 +43,28 @@ module GitHubChangelogGenerator def get_all_tags print "Fetching tags...\r" if @options[:verbose] - tags = [] - - check_github_response { github_fetch_tags(tags) } - - tags + check_github_response { github_fetch_tags } end + # This is wrapper with rescue block + # @return [Object] returns exactly the same, what you put in the block, but wrap it with begin-rescue block def check_github_response begin value = yield rescue Github::Error::Unauthorized => e - @logger.error e.body.red + Helper.log.error e.body.red abort "Error: wrong GitHub token" rescue Github::Error::Forbidden => e - @logger.warn e.body.red - @logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow + Helper.log.warn e.body.red + Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow end value end - def github_fetch_tags(tags) + # Fill input array with tags + # @return [Array] array of tags in repo + def github_fetch_tags + tags = [] response = @github.repos.tags @options[:user], @options[:project] page_i = 0 count_pages = response.count_pages @@ -83,11 +76,12 @@ module GitHubChangelogGenerator print_empty_line if tags.count == 0 - @logger.warn "Warning: Can't find any tags in repo.\ + Helper.log.warn "Warning: Can't find any tags in repo.\ Make sure, that you push tags to remote repo via 'git push --tags'".yellow else - @logger.info "Found #{tags.count} tags" + Helper.log.info "Found #{tags.count} tags" end + tags end # This method fetch all closed issues and separate them to pull requests and pure issues @@ -112,10 +106,10 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow break if @options[:max_issues] && issues.length >= @options[:max_issues] end print_empty_line - @logger.info "Received issues: #{issues.count}" + Helper.log.info "Received issues: #{issues.count}" rescue - @logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow + Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow end # separate arrays of issues and pull requests: @@ -140,17 +134,20 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow end print_empty_line rescue - @logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow + Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow end - @logger.info "Fetching merged dates: #{pull_requests.count}" + Helper.log.info "Fetching merged dates: #{pull_requests.count}" pull_requests end + # Print specified line on the same string + # @param [String] log_string def print_in_same_line(log_string) print log_string + "\r" end + # Print long line with spaces on same line to clear prev message def print_empty_line print_in_same_line(" ") end @@ -170,7 +167,7 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow repo: @options[:project], issue_number: issue["number"] rescue - @logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow + Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow end issue[:events] = obj.body print_in_same_line("Fetching events for issues and PR: #{i + 1}/#{issues.count}") @@ -184,32 +181,26 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow # to clear line from prev print print_empty_line - @logger.info "Fetching events for issues and PR: #{i}" + Helper.log.info "Fetching events for issues and PR: #{i}" end - # Try to find tag date in local hash. - # Otherwise fFetch tag time and put it to local hash file. - # @param [String] tag_name name of the tag + # Fetch tag time from repo + # + # @param [Hash] tag # @return [Time] time of specified tag - def get_time_of_tag(tag_name) - fail ChangelogGeneratorError, "tag_name is nil".red if tag_name.nil? - - if @tag_times_hash[tag_name["name"]] - return @tag_times_hash[tag_name["name"]] - end - + def fetch_date_of_tag(tag) begin - github_git_data_commits_get = @github.git_data.commits.get @options[:user], - @options[:project], - tag_name["commit"]["sha"] + commit_data = @github.git_data.commits.get @options[:user], + @options[:project], + tag["commit"]["sha"] rescue - @logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow + Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow end - time_string = github_git_data_commits_get["committer"]["date"] - @tag_times_hash[tag_name["name"]] = Time.parse(time_string) + time_string = commit_data["committer"]["date"] + Time.parse(time_string) end - # Fetch commit for specifed event + # Fetch commit for specified event # @return [Hash] def fetch_commit(event) @github.git_data.commits.get @options[:user], @options[:project], event[:commit_id] diff --git a/lib/github_changelog_generator/generator/generator.rb b/lib/github_changelog_generator/generator/generator.rb index 3ac896d..e6b4e6f 100644 --- a/lib/github_changelog_generator/generator/generator.rb +++ b/lib/github_changelog_generator/generator/generator.rb @@ -1,4 +1,4 @@ -require "github_changelog_generator/fetcher" +require_relative "../fetcher" require_relative "generator_generation" require_relative "generator_fetcher" require_relative "generator_processor" @@ -10,7 +10,7 @@ module GitHubChangelogGenerator end class Generator - attr_accessor :options, :all_tags, :github + attr_accessor :options, :filtered_tags, :github # A Generator responsible for all logic, related with change log generation from ready-to-parse issues # @@ -19,7 +19,7 @@ module GitHubChangelogGenerator # content = generator.compound_changelog def initialize(options = nil) @options = options || {} - + @tag_times_hash = {} @fetcher = GitHubChangelogGenerator::Fetcher.new @options end @@ -104,12 +104,12 @@ module GitHubChangelogGenerator issues.each do |dict| added = false dict.labels.each do |label| - if label.name == "bug" + if @options[:bug_labels].include? label.name bugs_a.push dict added = true next end - if label.name == "enhancement" + if @options[:enhancement_labels].include? label.name enhancement_a.push dict added = true next diff --git a/lib/github_changelog_generator/generator/generator_fetcher.rb b/lib/github_changelog_generator/generator/generator_fetcher.rb index 3b15769..16c5e5c 100644 --- a/lib/github_changelog_generator/generator/generator_fetcher.rb +++ b/lib/github_changelog_generator/generator/generator_fetcher.rb @@ -17,11 +17,11 @@ module GitHubChangelogGenerator # Async fetching tags: threads = [] i = 0 - all = @all_tags.count - @all_tags.each do |tag| + all = @filtered_tags.count + @filtered_tags.each do |tag| print " \r" threads << Thread.new do - @fetcher.get_time_of_tag(tag) + get_time_of_tag(tag) print "Fetching tags dates: #{i + 1}/#{all}\r" if @options[:verbose] i += 1 end diff --git a/lib/github_changelog_generator/generator/generator_generation.rb b/lib/github_changelog_generator/generator/generator_generation.rb index 5571359..634cbe1 100644 --- a/lib/github_changelog_generator/generator/generator_generation.rb +++ b/lib/github_changelog_generator/generator/generator_generation.rb @@ -5,6 +5,7 @@ module GitHubChangelogGenerator # @return [String] Generated change log file def compound_changelog fetch_and_filter_tags + sort_tags_by_date(@filtered_tags) fetch_issues_and_pr log = "# Change Log\n\n" @@ -24,7 +25,7 @@ module GitHubChangelogGenerator tag1 = @options[:tag1] tag2 = @options[:tag2] tags_strings = [] - all_tags.each { |x| tags_strings.push(x["name"]) } + filtered_tags.each { |x| tags_strings.push(x["name"]) } if tags_strings.include?(tag1) if tags_strings.include?(tag2) @@ -128,11 +129,11 @@ module GitHubChangelogGenerator log = generate_unreleased_section - (1...all_tags.size).each do |index| - log += generate_log_between_tags(all_tags[index], all_tags[index - 1]) + (1...filtered_tags.size).each do |index| + log += generate_log_between_tags(filtered_tags[index], filtered_tags[index - 1]) end - if @all_tags.count != 0 - log += generate_log_between_tags(nil, all_tags.last) + if @filtered_tags.count != 0 + log += generate_log_between_tags(nil, filtered_tags.last) end log @@ -141,7 +142,7 @@ module GitHubChangelogGenerator def generate_unreleased_section log = "" if @options[:unreleased] - unreleased_log = generate_log_between_tags(all_tags[0], nil) + unreleased_log = generate_log_between_tags(filtered_tags[0], nil) log += unreleased_log if unreleased_log end log diff --git a/lib/github_changelog_generator/generator/generator_processor.rb b/lib/github_changelog_generator/generator/generator_processor.rb index f95142c..d162cbc 100644 --- a/lib/github_changelog_generator/generator/generator_processor.rb +++ b/lib/github_changelog_generator/generator/generator_processor.rb @@ -36,7 +36,7 @@ module GitHubChangelogGenerator false else # check, that this milestone in tag list: - milestone_is_tag = @all_tags.find do |tag| + milestone_is_tag = @filtered_tags.find do |tag| tag.name == issue.milestone.title end @@ -57,7 +57,7 @@ module GitHubChangelogGenerator true else # check, that this milestone in tag list: - @all_tags.find { |tag| tag.name == issue.milestone.title }.nil? + @filtered_tags.find { |tag| tag.name == issue.milestone.title }.nil? end end end @@ -72,8 +72,8 @@ module GitHubChangelogGenerator # in case if not tags specified - return unchanged array return array if older_tag.nil? && newer_tag.nil? - newer_tag_time = newer_tag && @fetcher.get_time_of_tag(newer_tag) - older_tag_time = older_tag && @fetcher.get_time_of_tag(older_tag) + newer_tag_time = newer_tag && get_time_of_tag(newer_tag) + older_tag_time = older_tag && get_time_of_tag(older_tag) array.select do |req| if req[hash_key] diff --git a/lib/github_changelog_generator/generator/generator_tags.rb b/lib/github_changelog_generator/generator/generator_tags.rb index 6873c10..123c155 100644 --- a/lib/github_changelog_generator/generator/generator_tags.rb +++ b/lib/github_changelog_generator/generator/generator_tags.rb @@ -2,15 +2,34 @@ module GitHubChangelogGenerator class Generator # fetch, filter tags, fetch dates and sort them in time order def fetch_and_filter_tags - @all_tags = get_filtered_tags(@fetcher.get_all_tags) + @filtered_tags = get_filtered_tags(@fetcher.get_all_tags) fetch_tags_dates - sort_tags_by_date end # Sort all tags by date - def sort_tags_by_date + def sort_tags_by_date(tags) puts "Sorting tags..." if @options[:verbose] - @all_tags.sort_by! { |x| @fetcher.get_time_of_tag(x) }.reverse! + tags.sort_by! do |x| + get_time_of_tag(x) + end.reverse! + end + + # Try to find tag date in local hash. + # Otherwise fFetch tag time and put it to local hash file. + # @param [Hash] tag_name name of the tag + # @return [Time] time of specified tag + def get_time_of_tag(tag_name) + fail ChangelogGeneratorError, "tag_name is nil".red if tag_name.nil? + + name_of_tag = tag_name["name"] + time_for_name = @tag_times_hash[name_of_tag] + if !time_for_name.nil? + time_for_name + else + time_string = @fetcher.fetch_date_of_tag tag_name + @tag_times_hash[name_of_tag] = time_string + time_string + end end # Detect link, name and time for specified tag. @@ -19,7 +38,7 @@ module GitHubChangelogGenerator # @return [Array] link, name and time of the tag def detect_link_tag_time(newer_tag) # if tag is nil - set current time - newer_tag_time = newer_tag.nil? ? Time.new : @fetcher.get_time_of_tag(newer_tag) + newer_tag_time = newer_tag.nil? ? Time.new : get_time_of_tag(newer_tag) # if it's future release tag - set this value if newer_tag.nil? && @options[:future_release] diff --git a/lib/github_changelog_generator/helper.rb b/lib/github_changelog_generator/helper.rb new file mode 100644 index 0000000..7c13407 --- /dev/null +++ b/lib/github_changelog_generator/helper.rb @@ -0,0 +1,37 @@ +require "logger" +module GitHubChangelogGenerator + module Helper + # @return true if the currently running program is a unit test + def self.test? + defined?SpecHelper + end + + if test? + @log ||= Logger.new(nil) # don't show any logs when running tests + else + @log ||= Logger.new(STDOUT) + end + @log.formatter = proc do |severity, _datetime, _progname, msg| + string = "#{msg}\n" + + if severity == "DEBUG" + string = string.magenta + elsif severity == "INFO" + string = string.white + elsif severity == "WARN" + string = string.yellow + elsif severity == "ERROR" + string = string.red + elsif severity == "FATAL" + string = string.red.bold + end + + string + end + + # Logging happens using this method + class << self + attr_reader :log + end + end +end diff --git a/lib/github_changelog_generator/parser.rb b/lib/github_changelog_generator/parser.rb index 683b294..2f252d9 100644 --- a/lib/github_changelog_generator/parser.rb +++ b/lib/github_changelog_generator/parser.rb @@ -2,7 +2,7 @@ require "optparse" require "pp" require_relative "version" - +require_relative "helper" module GitHubChangelogGenerator class Parser # parse options with optparse @@ -13,7 +13,9 @@ module GitHubChangelogGenerator parser.parse! - detect_user_and_project(options) + if options[:user].nil? || options[:project].nil? + detect_user_and_project(options) + end if !options[:user] || !options[:project] puts parser.banner @@ -21,7 +23,7 @@ module GitHubChangelogGenerator end if options[:verbose] - puts "Performing task with options:" + Helper.log.info "Performing task with options:" pp options puts "" end @@ -84,6 +86,12 @@ module GitHubChangelogGenerator opts.on("--exclude-labels x,y,z", Array, 'Issues with the specified labels will be always excluded from changelog. Default is \'duplicate,question,invalid,wontfix\'') do |list| options[:exclude_labels] = list end + opts.on("--bug-labels x,y,z", Array, 'Issues with the specified labels will be always added to "Fixed bugs" section. Default is \'bug,Bug\'') do |list| + options[:bug_labels] = list + end + opts.on("--enhancement-labels x,y,z", Array, 'Issues with the specified labels will be always added to "Implemented enhancements" section. Default is \'enhancement,Enhancement\'') do |list| + options[:enhancement_labels] = list + end opts.on("--between-tags x,y,z", Array, "Change log will be filled only between specified tags") do |list| options[:between_tags] = list end @@ -136,8 +144,9 @@ module GitHubChangelogGenerator unreleased: true, unreleased_label: "Unreleased", compare_link: true, - include_labels: %w(bug enhancement), - exclude_labels: %w(duplicate question invalid wontfix), + enhancement_labels: %w(enhancement Enhancement), + bug_labels: %w(bug Bug), + exclude_labels: %w(duplicate question invalid wontfix Duplicate Question Invalid Wontfix), max_issues: nil, simple_list: false, verbose: true, diff --git a/lib/github_changelog_generator/version.rb b/lib/github_changelog_generator/version.rb index c453d07..9a539e6 100644 --- a/lib/github_changelog_generator/version.rb +++ b/lib/github_changelog_generator/version.rb @@ -1,3 +1,3 @@ module GitHubChangelogGenerator - VERSION = "1.5.0" + VERSION = "1.6.0" end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index dccfbf0..5c4749d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -19,6 +19,10 @@ require "codeclimate-test-reporter" require "simplecov" require "coveralls" +# This module is only used to check the environment is currently a testing env +module SpecHelper +end + SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ Coveralls::SimpleCov::Formatter, SimpleCov::Formatter::HTMLFormatter, diff --git a/spec/unit/fetcher_spec.rb b/spec/unit/fetcher_spec.rb index 6baf815..bba0c19 100644 --- a/spec/unit/fetcher_spec.rb +++ b/spec/unit/fetcher_spec.rb @@ -52,7 +52,7 @@ describe GitHubChangelogGenerator::Fetcher do @fetcher = GitHubChangelogGenerator::Fetcher.new(options) end it "should raise Unauthorized error" do - expect { @fetcher.github_fetch_tags [] }.to raise_error Github::Error::Unauthorized + expect { @fetcher.github_fetch_tags }.to raise_error Github::Error::Unauthorized end end end diff --git a/spec/unit/generator/generator_tags_spec.rb b/spec/unit/generator/generator_tags_spec.rb index bc28290..5dd00c2 100644 --- a/spec/unit/generator/generator_tags_spec.rb +++ b/spec/unit/generator/generator_tags_spec.rb @@ -1,3 +1,18 @@ +def tag_mash_with_name(tag) + mash_tag = Hashie::Mash.new + mash_tag.name = tag + mash_tag +end + +def tags_mash_from_strings(tags_strings) + mash_array = [] + tags_strings.each do |tag| + mash_tag = tag_mash_with_name(tag) + mash_array << mash_tag + end + mash_array +end + describe GitHubChangelogGenerator::Generator do describe "#filter_between_tags" do context "when between_tags nil" do @@ -46,16 +61,6 @@ describe GitHubChangelogGenerator::Generator do end end - def tags_mash_from_strings(tags_strings) - mash_array = [] - tags_strings.each do |tag| - mash_tag = Hashie::Mash.new - mash_tag.name = tag - mash_array << mash_tag - end - mash_array - end - describe "#get_filtered_tags" do subject do generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3 4 5))) @@ -76,5 +81,71 @@ describe GitHubChangelogGenerator::Generator do it { is_expected.to be_a Array } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2))) } end + + context "with invalid excluded tags" do + let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags: %w(invalid tags)) } + it { is_expected.to be_a Array } + it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) } + end + end + + describe "#get_time_of_tag" do + current_time = Time.now + before(:all) { @generator = GitHubChangelogGenerator::Generator.new } + context "run with nil parameter" do + it "should raise ChangelogGeneratorError" do + expect { @generator.get_time_of_tag nil }.to raise_error(GitHubChangelogGenerator::ChangelogGeneratorError) + end + end + context "fetch already filled tag" do + before { @generator.instance_variable_set :@tag_times_hash, "valid_tag" => current_time } + subject { @generator.get_time_of_tag tag_mash_with_name("valid_tag") } + it { is_expected.to be_a_kind_of(Time) } + it { is_expected.to eq(current_time) } + end + context "fetch not filled tag" do + before do + mock = double("fake fetcher") + allow(mock).to receive_messages(fetch_date_of_tag: current_time) + @generator.instance_variable_set :@fetcher, mock + end + subject do + of_tag = @generator.get_time_of_tag tag_mash_with_name("valid_tag") + of_tag + end + it { is_expected.to be_a_kind_of(Time) } + it { is_expected.to eq(current_time) } + end + end + + describe "#sort_tags_by_date" do + time1 = Time.now + time2 = Time.now + time3 = Time.now + before(:all) do + @generator = GitHubChangelogGenerator::Generator.new + end + context "sort unsorted tags" do + tags = tags_mash_from_strings %w(valid_tag1 valid_tag2 valid_tag3) + before do + @generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3 + end + subject do + @generator.sort_tags_by_date tags + end + it { is_expected.to be_a_kind_of(Array) } + it { is_expected.to match_array(tags.reverse!) } + end + context "sort sorted tags" do + tags = tags_mash_from_strings %w(valid_tag3 valid_tag2 valid_tag1) + before do + @generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3 + end + subject do + @generator.sort_tags_by_date tags + end + it { is_expected.to be_a_kind_of(Array) } + it { is_expected.to match_array(tags) } + end end end diff --git a/spec/unit/parser_spec.rb b/spec/unit/parser_spec.rb index 6bc9d8a..3f792c1 100644 --- a/spec/unit/parser_spec.rb +++ b/spec/unit/parser_spec.rb @@ -1,21 +1,21 @@ describe GitHubChangelogGenerator::Parser do describe ".user_project_from_remote" do - context "when remote is 1" do + context "when remote is type 1" do subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin https://github.com/skywinder/ActionSheetPicker-3.0 (fetch)") } it { is_expected.to be_a(Array) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } end - context "when remote is 2" do + context "when remote is type 2" do subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") } it { is_expected.to be_a(Array) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } end - context "when remote is 3" do + context "when remote is type 3" do subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") } it { is_expected.to be_a(Array) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } end - context "when remote is 4" do + context "when remote is type 4" do subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin git@github.com:skywinder/ActionSheetPicker-3.0.git (fetch)") } it { is_expected.to be_a(Array) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } @@ -27,9 +27,9 @@ describe GitHubChangelogGenerator::Parser do end end describe ".user_project_from_option" do - # context "when option is invalid" do - # it("should exit") { expect { GitHubChangelogGenerator::Parser.user_project_from_option("blah", nil) }.to raise_error(SystemExit) } - # end + context "when option is invalid" do + it("should exit") { expect { GitHubChangelogGenerator::Parser.user_project_from_option("blah", nil) }.to raise_error(SystemExit) } + end context "when option is valid" do subject { GitHubChangelogGenerator::Parser.user_project_from_option("skywinder/ActionSheetPicker-3.0", nil) }