From 9adb92a025048f1bffc76f08a47e6fde95e559a5 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 20:59:12 +0200 Subject: [PATCH 01/13] Configure simplecov --- spec/spec_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f8869cf..eaf55ab 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,7 +2,11 @@ require "simplecov" -SimpleCov.start +SimpleCov.start do + enable_coverage :branch + + primary_coverage :branch +end require "errbit_plugin" From ab2d3e501b43b8e6b48e865706b9d8d391376c3a Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:00:21 +0200 Subject: [PATCH 02/13] Configure RSpec --- .rspec | 4 ++++ spec/spec_helper.rb | 15 ++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 .rspec diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..6c6110e --- /dev/null +++ b/.rspec @@ -0,0 +1,4 @@ +--format documentation +--color +--require spec_helper +--order random diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index eaf55ab..35ae743 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -11,12 +11,13 @@ require "errbit_plugin" RSpec.configure do |config| - config.run_all_when_everything_filtered = true - config.filter_run :focus + # Enable flags like --only-failures and --next-failure + config.example_status_persistence_file_path = ".rspec_status" - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = "random" + # Disable RSpec exposing methods globally on `Module` and `main` + config.disable_monkey_patching! + + config.expect_with :rspec do |c| + c.syntax = :expect + end end From bb1af5a24dff39ce65ca202a35d9d15696ba230a Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:01:12 +0200 Subject: [PATCH 03/13] Configure standard --- .standard.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .standard.yml diff --git a/.standard.yml b/.standard.yml new file mode 100644 index 0000000..72b2693 --- /dev/null +++ b/.standard.yml @@ -0,0 +1 @@ +ruby_version: 3.1 From 1a6c88562c34773d46003809441f2a784da70dfc Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:01:49 +0200 Subject: [PATCH 04/13] Fix tests --- spec/errbit_plugin/registry_spec.rb | 2 +- spec/errbit_plugin/validate_issue_tracker_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/errbit_plugin/registry_spec.rb b/spec/errbit_plugin/registry_spec.rb index b405dbc..9d0481f 100644 --- a/spec/errbit_plugin/registry_spec.rb +++ b/spec/errbit_plugin/registry_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe ErrbitPlugin::Registry do +RSpec.describe ErrbitPlugin::Registry do before do ErrbitPlugin::Registry.clear_issue_trackers end diff --git a/spec/errbit_plugin/validate_issue_tracker_spec.rb b/spec/errbit_plugin/validate_issue_tracker_spec.rb index bc8cfcf..eb470a6 100644 --- a/spec/errbit_plugin/validate_issue_tracker_spec.rb +++ b/spec/errbit_plugin/validate_issue_tracker_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe ErrbitPlugin::ValidateIssueTracker do +RSpec.describe ErrbitPlugin::ValidateIssueTracker do describe "#valid?" do context "with a complete class" do klass = Class.new(ErrbitPlugin::IssueTracker) do From 8e1513b3891aaf6ffb0819b2d4ec27efeff5dd74 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:05:35 +0200 Subject: [PATCH 05/13] Rename ValidateIssueTracker -> IssueTrackerValidator --- lib/errbit_plugin.rb | 2 +- ..._tracker.rb => issue_tracker_validator.rb} | 2 +- lib/errbit_plugin/registry.rb | 6 +-- spec/errbit_plugin/registry_spec.rb | 6 +-- .../validate_issue_tracker_spec.rb | 44 +++++++++---------- 5 files changed, 30 insertions(+), 30 deletions(-) rename lib/errbit_plugin/{validate_issue_tracker.rb => issue_tracker_validator.rb} (97%) diff --git a/lib/errbit_plugin.rb b/lib/errbit_plugin.rb index 4a54ca1..333bed9 100644 --- a/lib/errbit_plugin.rb +++ b/lib/errbit_plugin.rb @@ -3,5 +3,5 @@ require "errbit_plugin/version" require "errbit_plugin/registry" require "errbit_plugin/issue_tracker" -require "errbit_plugin/validate_issue_tracker" +require "errbit_plugin/issue_tracker_validator" require "errbit_plugin/issue_trackers/none" diff --git a/lib/errbit_plugin/validate_issue_tracker.rb b/lib/errbit_plugin/issue_tracker_validator.rb similarity index 97% rename from lib/errbit_plugin/validate_issue_tracker.rb rename to lib/errbit_plugin/issue_tracker_validator.rb index a7c1fc7..6f65ebf 100644 --- a/lib/errbit_plugin/validate_issue_tracker.rb +++ b/lib/errbit_plugin/issue_tracker_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module ErrbitPlugin - class ValidateIssueTracker + class IssueTrackerValidator def initialize(klass) @klass = klass @errors = [] diff --git a/lib/errbit_plugin/registry.rb b/lib/errbit_plugin/registry.rb index adda68d..1ff9bdc 100644 --- a/lib/errbit_plugin/registry.rb +++ b/lib/errbit_plugin/registry.rb @@ -16,12 +16,12 @@ def self.add_issue_tracker(klass) "issue_tracker '#{key}' already registered" end - validate = ValidateIssueTracker.new(klass) + validator = IssueTrackerValidator.new(klass) - if validate.valid? + if validator.valid? @issue_trackers[key] = klass else - raise IncompatibilityError.new(validate.errors.join("; ")) + raise IncompatibilityError.new(validator.errors.join("; ")) end end diff --git a/spec/errbit_plugin/registry_spec.rb b/spec/errbit_plugin/registry_spec.rb index 9d0481f..3ce12e6 100644 --- a/spec/errbit_plugin/registry_spec.rb +++ b/spec/errbit_plugin/registry_spec.rb @@ -19,7 +19,7 @@ def self.label describe ".add_issue_tracker" do context "with issue_tracker class valid" do before do - allow(ErrbitPlugin::ValidateIssueTracker) + allow(ErrbitPlugin::IssueTrackerValidator) .to receive(:new) .with(tracker) .and_return(double(valid?: true, message: "")) @@ -42,7 +42,7 @@ def self.label context "with an IssueTracker not valid" do it "raise an IncompatibilityError" do - allow(ErrbitPlugin::ValidateIssueTracker) + allow(ErrbitPlugin::IssueTrackerValidator) .to receive(:new) .with(tracker) .and_return(double(valid?: false, message: "foo", errors: [])) @@ -52,7 +52,7 @@ def self.label end it "puts the errors in the exception message" do - allow(ErrbitPlugin::ValidateIssueTracker) + allow(ErrbitPlugin::IssueTrackerValidator) .to receive(:new) .with(tracker) .and_return(double(valid?: false, message: "foo", errors: ["one", "two"])) diff --git a/spec/errbit_plugin/validate_issue_tracker_spec.rb b/spec/errbit_plugin/validate_issue_tracker_spec.rb index eb470a6..e5a7aa1 100644 --- a/spec/errbit_plugin/validate_issue_tracker_spec.rb +++ b/spec/errbit_plugin/validate_issue_tracker_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe ErrbitPlugin::ValidateIssueTracker do +RSpec.describe ErrbitPlugin::IssueTrackerValidator do describe "#valid?" do context "with a complete class" do klass = Class.new(ErrbitPlugin::IssueTracker) do @@ -44,7 +44,7 @@ def url end it "valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be true + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be true end end @@ -91,11 +91,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "says :not_inherited" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:not_inherited]] end @@ -137,11 +137,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement label method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:class_method_missing, :label]] end @@ -183,11 +183,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement icons method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:class_method_missing, :icons]] end @@ -229,11 +229,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement fields method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:class_method_missing, :fields]] end @@ -275,11 +275,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement configured? method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:instance_method_missing, :configured?]] end @@ -321,11 +321,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement errors method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:instance_method_missing, :errors]] end @@ -367,10 +367,10 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement create_issue method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:instance_method_missing, :create_issue]] end @@ -413,10 +413,10 @@ def url end it "is valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be true + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be true end it "not say not implement close_issue method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).not_to eql [[:instance_method_missing, :close_issue]] end @@ -458,11 +458,11 @@ def close_issue end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement url method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:instance_method_missing, :url]] end @@ -504,11 +504,11 @@ def url end it "not valid" do - expect(ErrbitPlugin::ValidateIssueTracker.new(klass).valid?).to be false + expect(ErrbitPlugin::IssueTrackerValidator.new(klass).valid?).to be false end it "say not implement note method" do - is = ErrbitPlugin::ValidateIssueTracker.new(klass) + is = ErrbitPlugin::IssueTrackerValidator.new(klass) is.valid? expect(is.errors).to eql [[:class_method_missing, :note]] end From ba6235a619c9039f2cbadd56fba3cb6ad898a339 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:06:37 +0200 Subject: [PATCH 06/13] Rename --- ...date_issue_tracker_spec.rb => issue_tracker_validator_spec.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec/errbit_plugin/{validate_issue_tracker_spec.rb => issue_tracker_validator_spec.rb} (100%) diff --git a/spec/errbit_plugin/validate_issue_tracker_spec.rb b/spec/errbit_plugin/issue_tracker_validator_spec.rb similarity index 100% rename from spec/errbit_plugin/validate_issue_tracker_spec.rb rename to spec/errbit_plugin/issue_tracker_validator_spec.rb From 42c0bf78f523ed33b2fb775945aea980cca52886 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:09:10 +0200 Subject: [PATCH 07/13] Move --- lib/errbit_plugin.rb | 2 +- .../{issue_trackers/none.rb => none_issue_tracker.rb} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename lib/errbit_plugin/{issue_trackers/none.rb => none_issue_tracker.rb} (100%) diff --git a/lib/errbit_plugin.rb b/lib/errbit_plugin.rb index 333bed9..3fb352d 100644 --- a/lib/errbit_plugin.rb +++ b/lib/errbit_plugin.rb @@ -4,4 +4,4 @@ require "errbit_plugin/registry" require "errbit_plugin/issue_tracker" require "errbit_plugin/issue_tracker_validator" -require "errbit_plugin/issue_trackers/none" +require "errbit_plugin/none_issue_tracker" diff --git a/lib/errbit_plugin/issue_trackers/none.rb b/lib/errbit_plugin/none_issue_tracker.rb similarity index 100% rename from lib/errbit_plugin/issue_trackers/none.rb rename to lib/errbit_plugin/none_issue_tracker.rb From 9b62a55f671592016aada3e4ffecba076ced6e4d Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:10:25 +0200 Subject: [PATCH 08/13] Add empty test --- spec/errbit_plugin/none_issue_tracker_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 spec/errbit_plugin/none_issue_tracker_spec.rb diff --git a/spec/errbit_plugin/none_issue_tracker_spec.rb b/spec/errbit_plugin/none_issue_tracker_spec.rb new file mode 100644 index 0000000..53c734a --- /dev/null +++ b/spec/errbit_plugin/none_issue_tracker_spec.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +require "spec_helper" + +RSpec.describe ErrbitPlugin::NoneIssueTracker do +end From 8e15ae2c7c85619a18b1870335f39798c871df1e Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:30:16 +0200 Subject: [PATCH 09/13] Add failing tests --- spec/errbit_plugin/none_issue_tracker_spec.rb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spec/errbit_plugin/none_issue_tracker_spec.rb b/spec/errbit_plugin/none_issue_tracker_spec.rb index 53c734a..54f6852 100644 --- a/spec/errbit_plugin/none_issue_tracker_spec.rb +++ b/spec/errbit_plugin/none_issue_tracker_spec.rb @@ -3,4 +3,25 @@ require "spec_helper" RSpec.describe ErrbitPlugin::NoneIssueTracker do + subject { described_class.new({}) } + + it { expect(described_class.label).to eq("none") } + + it { expect(described_class.note).to start_with("When no issue tracker") } + + it { expect(described_class.fields).to eq({}) } + + it { expect(described_class.icons).not_to be_empty } + + # TODO: .read_static_file + + it { expect(subject.configured?).to eq(false) } + + it { expect(subject.errors).to eq({}) } + + it { expect(subject.url).to eq("") } + + it { expect(subject.create_issue).to eq(false) } + + it { expect(subject.close_issue).to eq(false) } end From b9aa5bbc82d6705ed021f7c1cfb1b08492714bbb Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:31:24 +0200 Subject: [PATCH 10/13] Fix code --- lib/errbit_plugin/none_issue_tracker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/errbit_plugin/none_issue_tracker.rb b/lib/errbit_plugin/none_issue_tracker.rb index cc7ecb7..e9edaa8 100644 --- a/lib/errbit_plugin/none_issue_tracker.rb +++ b/lib/errbit_plugin/none_issue_tracker.rb @@ -25,7 +25,7 @@ def self.icons def self.read_static_file(file) File.read(File.expand_path(File.join( - File.dirname(__FILE__), "..", "..", "..", "static", file + File.dirname(__FILE__), "..", "..", "static", file ))) end From 15fd7663e09cead19179a4962eb021f4b2682c1b Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:31:54 +0200 Subject: [PATCH 11/13] Fix FrozenError --- lib/errbit_plugin/none_issue_tracker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/errbit_plugin/none_issue_tracker.rb b/lib/errbit_plugin/none_issue_tracker.rb index e9edaa8..0de3c8e 100644 --- a/lib/errbit_plugin/none_issue_tracker.rb +++ b/lib/errbit_plugin/none_issue_tracker.rb @@ -7,7 +7,7 @@ def self.label end def self.note - "When no issue tracker has been configured, you will be able to " << + "When no issue tracker has been configured, you will be able to " \ "leave comments on errors." end From 04172b5c0210baafd0c1d6dc9780aaa8b1479455 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:33:49 +0200 Subject: [PATCH 12/13] Configure simplecov --- spec/spec_helper.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 35ae743..040f26d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,8 @@ enable_coverage :branch primary_coverage :branch + + add_filter "spec/" end require "errbit_plugin" From f2318dfaec1c891feb445a3104b5ca6d31da0e44 Mon Sep 17 00:00:00 2001 From: Igor Zubkov Date: Thu, 10 Apr 2025 21:38:56 +0200 Subject: [PATCH 13/13] Update tests --- spec/errbit_plugin/none_issue_tracker_spec.rb | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/spec/errbit_plugin/none_issue_tracker_spec.rb b/spec/errbit_plugin/none_issue_tracker_spec.rb index 54f6852..ea0b7e9 100644 --- a/spec/errbit_plugin/none_issue_tracker_spec.rb +++ b/spec/errbit_plugin/none_issue_tracker_spec.rb @@ -3,17 +3,11 @@ require "spec_helper" RSpec.describe ErrbitPlugin::NoneIssueTracker do - subject { described_class.new({}) } + let(:options) { {} } - it { expect(described_class.label).to eq("none") } + subject { described_class.new(options) } - it { expect(described_class.note).to start_with("When no issue tracker") } - - it { expect(described_class.fields).to eq({}) } - - it { expect(described_class.icons).not_to be_empty } - - # TODO: .read_static_file + it { expect(subject).to be_an(ErrbitPlugin::IssueTracker) } it { expect(subject.configured?).to eq(false) } @@ -24,4 +18,14 @@ it { expect(subject.create_issue).to eq(false) } it { expect(subject.close_issue).to eq(false) } + + it { expect(described_class.label).to eq("none") } + + it { expect(described_class.note).to start_with("When no issue tracker") } + + it { expect(described_class.fields).to eq({}) } + + it { expect(described_class.icons).not_to be_empty } + + # TODO: .read_static_file end