jiragit 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ require 'rspec'
2
+ require 'rspec/mocks'
3
+ require './lib/jiragit.rb'
4
+ require './spec/test_support.rb'
5
+ require './spec/test_repository_context.rb'
6
+ require './spec/cli_context.rb'
7
+
8
+ RSpec.configure do |config|
9
+ include TestSupport
10
+
11
+ config.color = true
12
+ config.formatter = :documentation
13
+
14
+ config.before(:suite) do
15
+ install_gemfile
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,35 @@
1
+ require './spec/spec_helper'
2
+
3
+ module Jiragit
4
+
5
+ describe Tag do
6
+
7
+ subject { described_class.new tag_type: "tag_label" }
8
+
9
+ it "requires a type and label passed in via hash" do
10
+ expect(subject).to be_a Tag
11
+ end
12
+
13
+ it "should provide a formatted output" do
14
+ expect(subject.to_s).to eq('tag_type: tag_label')
15
+ end
16
+
17
+ it "should be unique in a set based on type and label" do
18
+ tag1 = described_class.new tag_type: "tag_label"
19
+ tag2 = described_class.new tag_type: "tag_label"
20
+ tag3 = described_class.new tag_type: "a_different_tag_label"
21
+
22
+ set = Set.new
23
+ set << tag1
24
+ set << tag2
25
+ set << tag3
26
+
27
+ expect(set.size).to eq(2)
28
+ expect(set).to include tag1
29
+ expect(set).to include tag2
30
+ expect(set).to include tag3
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,17 @@
1
+ RSpec.shared_context "Test Repository" do
2
+
3
+ before do
4
+ @config = Jiragit::Configuration.new("#{`echo ~`.chomp}/.jiragit")
5
+ @config[:jira_url] = "http://test.url"
6
+ @repository = "test_repository"
7
+ @repo = create_test_repository(@repository)
8
+ @js = Jiragit::JiraStore.new("#{@repository}/.git/jiragit/jira_store")
9
+ @log = "#{@repository}/.git/jiragit/hooks.log"
10
+ @debug = false
11
+ end
12
+
13
+ after do
14
+ @repo.remove
15
+ end
16
+
17
+ end
@@ -0,0 +1,81 @@
1
+ require 'rake'
2
+ require './lib/jiragit.rb'
3
+ require 'expect'
4
+
5
+ module TestSupport
6
+
7
+ def install_gemfile
8
+ rake = Rake.application
9
+ rake.init
10
+ rake.load_rakefile
11
+ rake['gem:install'].invoke
12
+ end
13
+
14
+ def create_test_repository(repository)
15
+ repo = Jiragit::Git::Repository.create(repository)
16
+ repo.make_a_commit
17
+ repo.origin = "git@github.com:thirtysixthspan/jiragit_test.git"
18
+ Dir.chdir repository
19
+ Jiragit::Cli.new([:install, :silent])
20
+ Dir.chdir '..'
21
+ repo
22
+ end
23
+
24
+ def checkout_a_new_branch(branch, jira="")
25
+ if jira.empty?
26
+ text = branch
27
+ else
28
+ text = 'JIRA'
29
+ end
30
+ @repo.checkout_new_branch(branch) do |output, input|
31
+ output.expect(text, 20) do |message|
32
+ puts "new #{message}" if @debug
33
+ expect(message).to_not be nil
34
+ end
35
+ input.puts(jira) if !jira.empty?
36
+ end
37
+ end
38
+
39
+ def checkout_a_new_branch_with_default(branch)
40
+ @repo.checkout_new_branch(branch) do |output, input|
41
+ output.expect(']>', 20) do |message|
42
+ puts "new default #{message}" if @debug
43
+ expect(message).to_not be nil
44
+ end
45
+ input.puts ""
46
+ end
47
+ end
48
+
49
+ def checkout_an_existing_branch(branch, jira="")
50
+ if jira.empty?
51
+ text = branch
52
+ else
53
+ text = 'JIRA'
54
+ end
55
+ @repo.checkout_branch(branch) do |output, input|
56
+ output.expect(text, 20) do |message|
57
+ puts "existing #{message}" if @debug
58
+ expect(message).to_not be nil
59
+ end
60
+ input.puts(jira) if !jira.empty?
61
+ end
62
+ end
63
+
64
+ def assert_no_relation(first, second)
65
+ sleep(5)
66
+ relations = @js.relations(first)
67
+ expect(relations).to_not include Jiragit::Tag.new(second)
68
+ end
69
+
70
+ def assert_relation(first, second)
71
+ sleep(5)
72
+ relations = @js.relations(first)
73
+ expect(relations).to include Jiragit::Tag.new(second)
74
+ end
75
+
76
+ def assert_log_contains(regex)
77
+ expect(File.exists?(@log)).to be true
78
+ expect(`cat #{@log}`).to match(regex)
79
+ end
80
+
81
+ end
@@ -0,0 +1,100 @@
1
+ require './spec/spec_helper'
2
+
3
+ module Jiragit
4
+
5
+ describe Vault do
6
+
7
+ let!(:vault) { described_class.new('.testvault') }
8
+ let(:item) { Tag.new(type: 'label') }
9
+ let(:related_item) { Tag.new(type: 'label2') }
10
+ let(:another_related_item) { Tag.new(type: 'label3') }
11
+ let(:a_third_related_item) { Tag.new(type: 'label4') }
12
+ let(:unrelated_item) { Tag.new(type: 'label5') }
13
+
14
+ after do
15
+ File.delete('.testvault')
16
+ end
17
+
18
+ it "should create a vault file" do
19
+ expect(File.exists?('.testvault')).to be true
20
+ end
21
+
22
+ it "should add items" do
23
+ vault.create
24
+ vault.add(item)
25
+ expect(vault.include?(item)).to be true
26
+ end
27
+
28
+ it "should relate items" do
29
+ vault.create
30
+ vault.relate(item, related_item)
31
+ vault.add(unrelated_item)
32
+ expect(vault.include?(item)).to be true
33
+ expect(vault.include?(related_item)).to be true
34
+ expect(vault.related?(item, related_item)).to be true
35
+ expect(vault.include?(unrelated_item)).to be true
36
+ expect(vault.related?(item,unrelated_item)).to be false
37
+ end
38
+
39
+ it "should relate multiple items" do
40
+ vault.create
41
+ vault.relate(item, related_item, another_related_item)
42
+ vault.add(unrelated_item)
43
+ expect(vault.include?(item)).to be true
44
+ expect(vault.include?(related_item)).to be true
45
+ expect(vault.related?(item, related_item)).to be true
46
+ expect(vault.include?(another_related_item)).to be true
47
+ expect(vault.related?(item, another_related_item)).to be true
48
+ expect(vault.include?(unrelated_item)).to be true
49
+ expect(vault.related?(item, unrelated_item)).to be false
50
+ end
51
+
52
+ it "should store relations without self reference" do
53
+ vault.create
54
+ vault.relate(item, related_item, another_related_item)
55
+ expect(vault.relations(item)).not_to include item
56
+ expect(vault.relations(item)).to include related_item
57
+ expect(vault.relations(item)).to include another_related_item
58
+ end
59
+
60
+ it "should build relation chains across one item" do
61
+ vault.create
62
+ chain = [item, related_item, another_related_item]
63
+ vault.relate(item, related_item)
64
+ vault.relate(related_item, another_related_item)
65
+ expect(vault.relation_chain(item, another_related_item)).to eq chain
66
+ expect(vault.distally_related?(item, another_related_item)).to eq true
67
+ expect(vault.distally_related?(another_related_item, item)).to eq true
68
+ expect(vault.distally_related?(item, unrelated_item)).to eq false
69
+ end
70
+
71
+ it "should build relation chains across more than one item" do
72
+ vault.create
73
+ chain = [item, related_item, another_related_item, a_third_related_item]
74
+ vault.relate(item, related_item)
75
+ vault.relate(related_item, another_related_item)
76
+ vault.relate(another_related_item, a_third_related_item)
77
+ expect(vault.relation_chain(item, a_third_related_item)).to eq chain
78
+ expect(vault.distally_related?(item, a_third_related_item)).to eq true
79
+ expect(vault.distally_related?(a_third_related_item, item)).to eq true
80
+ expect(vault.distally_related?(item, unrelated_item)).to eq false
81
+ end
82
+
83
+ it "should save and load thousand items in less than a tenth of a second" do
84
+ vault.create
85
+ 1000.times.each do |i|
86
+ tag1 = Tag.new(jira: "PA-#{i}")
87
+ tag2 = Tag.new(branch: "my-feature-branch-#{i}")
88
+ vault.relate(tag1, tag2)
89
+ end
90
+
91
+ start_time = Time.now.to_f
92
+ vault.save
93
+ vault.load
94
+ end_time = Time.now.to_f
95
+ expect(end_time - start_time).to be < 0.1
96
+ end
97
+
98
+ end
99
+
100
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jiragit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Derrick Parkhurst
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.1'
41
+ description: add jira numbers and urls to your commits automatically
42
+ email:
43
+ - derrick.parkhurst@gmail.com
44
+ executables:
45
+ - jiragit
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - LICENSE.txt
50
+ - README.md
51
+ - Rakefile
52
+ - bin/jiragit
53
+ - hooks/commit-msg
54
+ - hooks/post-checkout
55
+ - hooks/post-commit
56
+ - hooks/prepare-commit-msg
57
+ - lib/jiragit.rb
58
+ - lib/jiragit/cli.rb
59
+ - lib/jiragit/configuration.rb
60
+ - lib/jiragit/git/branch.rb
61
+ - lib/jiragit/git/commit_response.rb
62
+ - lib/jiragit/git/repository.rb
63
+ - lib/jiragit/jira_store.rb
64
+ - lib/jiragit/logger.rb
65
+ - lib/jiragit/tag.rb
66
+ - lib/jiragit/vault.rb
67
+ - lib/jiragit/version.rb
68
+ - spec/branch_spec.rb
69
+ - spec/cli_context.rb
70
+ - spec/cli_spec.rb
71
+ - spec/commit_message_spec.rb
72
+ - spec/commit_spec.rb
73
+ - spec/configuration_spec.rb
74
+ - spec/git_editor.rb
75
+ - spec/git_editor_spec.rb
76
+ - spec/jira_store_spec.rb
77
+ - spec/logger_spec.rb
78
+ - spec/merge_spec.rb
79
+ - spec/spec_helper.rb
80
+ - spec/tag_spec.rb
81
+ - spec/test_repository_context.rb
82
+ - spec/test_support.rb
83
+ - spec/vault_spec.rb
84
+ homepage: https://github.com/thirtysixthspan/jiragit
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.2.2
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Integrate Jira and Git
108
+ test_files:
109
+ - spec/branch_spec.rb
110
+ - spec/cli_context.rb
111
+ - spec/cli_spec.rb
112
+ - spec/commit_message_spec.rb
113
+ - spec/commit_spec.rb
114
+ - spec/configuration_spec.rb
115
+ - spec/git_editor.rb
116
+ - spec/git_editor_spec.rb
117
+ - spec/jira_store_spec.rb
118
+ - spec/logger_spec.rb
119
+ - spec/merge_spec.rb
120
+ - spec/spec_helper.rb
121
+ - spec/tag_spec.rb
122
+ - spec/test_repository_context.rb
123
+ - spec/test_support.rb
124
+ - spec/vault_spec.rb