pgit 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.agignore +3 -0
  3. data/.travis.yml +1 -0
  4. data/README.markdown +32 -9
  5. data/Rakefile +12 -0
  6. data/bin/pgit +167 -25
  7. data/lib/pgit.rb +40 -10
  8. data/lib/pgit/bilateral/handle_back.rb +22 -0
  9. data/lib/pgit/bilateral/handle_choose_story.rb +31 -0
  10. data/lib/pgit/bilateral/story.rb +44 -0
  11. data/lib/pgit/command.rb +83 -0
  12. data/lib/pgit/command/add.rb +36 -0
  13. data/lib/pgit/command/application.rb +21 -0
  14. data/lib/pgit/command/edit.rb +36 -0
  15. data/lib/pgit/command/remove.rb +36 -0
  16. data/lib/pgit/command/run.rb +32 -0
  17. data/lib/pgit/command/show.rb +53 -0
  18. data/lib/pgit/configuration.rb +27 -3
  19. data/lib/pgit/current_project.rb +9 -45
  20. data/lib/pgit/current_project/validator.rb +2 -1
  21. data/lib/pgit/error/external.rb +11 -0
  22. data/lib/pgit/error/user.rb +12 -0
  23. data/lib/pgit/helpers/heredoc.rb +17 -0
  24. data/lib/pgit/helpers/query_methods.rb +63 -0
  25. data/lib/pgit/helpers/string_extensions.rb +29 -0
  26. data/lib/pgit/installer/bash_auto_completion.rb +57 -0
  27. data/lib/pgit/pivotal/collection_request.rb +21 -0
  28. data/lib/pgit/pivotal/individual_request.rb +47 -0
  29. data/lib/pgit/pivotal/iteration.rb +6 -0
  30. data/lib/pgit/pivotal/iterations.rb +15 -0
  31. data/lib/pgit/pivotal/project.rb +6 -0
  32. data/lib/pgit/pivotal/projects.rb +20 -0
  33. data/lib/pgit/pivotal/query.rb +8 -0
  34. data/lib/pgit/pivotal/request.rb +33 -0
  35. data/lib/pgit/pivotal/request/query.rb +25 -0
  36. data/lib/pgit/pivotal/story.rb +38 -0
  37. data/lib/pgit/pivotal_request_validator.rb +1 -1
  38. data/lib/pgit/project.rb +78 -0
  39. data/lib/pgit/project/add.rb +28 -0
  40. data/lib/pgit/project/application.rb +21 -0
  41. data/lib/pgit/project/interactive_adder.rb +41 -0
  42. data/lib/pgit/project/remove.rb +41 -0
  43. data/lib/pgit/project/reuse_api_token_adder.rb +48 -0
  44. data/lib/pgit/response_handler.rb +16 -0
  45. data/lib/pgit/root.rb +5 -0
  46. data/lib/pgit/status.rb +16 -0
  47. data/lib/pgit/story_branch/application.rb +3 -3
  48. data/lib/pgit/{name_parser.rb → story_branch/name_parser.rb} +0 -0
  49. data/lib/pgit/story_branch/story_id_parser.rb +11 -0
  50. data/lib/pgit/validators/project_validator.rb +20 -0
  51. data/lib/pgit/version.rb +1 -1
  52. data/lib/pivotal +0 -0
  53. data/pgit.gemspec +5 -0
  54. data/spec/fixtures/iterations +1 -0
  55. data/spec/pgit/bilateral/handle_back_spec.rb +29 -0
  56. data/spec/pgit/bilateral/handle_choose_story_spec.rb +17 -0
  57. data/spec/pgit/bilateral/story_spec.rb +178 -0
  58. data/spec/pgit/command/add_spec.rb +68 -0
  59. data/spec/pgit/command/application_spec.rb +110 -0
  60. data/spec/pgit/command/edit_spec.rb +61 -0
  61. data/spec/pgit/command/remove_spec.rb +76 -0
  62. data/spec/pgit/command/run_spec.rb +49 -0
  63. data/spec/pgit/command/show_spec.rb +95 -0
  64. data/spec/pgit/command_spec.rb +299 -0
  65. data/spec/pgit/configuration_spec.rb +121 -18
  66. data/spec/pgit/current_project/validator_spec.rb +2 -1
  67. data/spec/pgit/current_project_spec.rb +20 -71
  68. data/spec/pgit/{external_error_spec.rb → error/external_spec.rb} +3 -3
  69. data/spec/pgit/error/user_spec.rb +17 -0
  70. data/spec/pgit/helpers/heredoc_spec.rb +33 -0
  71. data/spec/pgit/helpers/query_methods_spec.rb +24 -0
  72. data/spec/pgit/helpers/string_extensions_spec.rb +49 -0
  73. data/spec/pgit/installer/bash_auto_completion_spec.rb +134 -0
  74. data/spec/pgit/pivotal/individual_request_spec.rb +32 -0
  75. data/spec/pgit/pivotal/iteration_spec.rb +19 -0
  76. data/spec/pgit/pivotal/iterations_spec.rb +37 -0
  77. data/spec/pgit/pivotal/project_spec.rb +9 -0
  78. data/spec/pgit/pivotal/projects_spec.rb +48 -0
  79. data/spec/pgit/pivotal/request/query_spec.rb +24 -0
  80. data/spec/pgit/pivotal/story_spec.rb +113 -0
  81. data/spec/pgit/pivotal_request_validator_spec.rb +3 -3
  82. data/spec/pgit/project/add_spec.rb +52 -0
  83. data/spec/pgit/project/application_spec.rb +69 -0
  84. data/spec/pgit/project/interactive_adder_spec.rb +45 -0
  85. data/spec/pgit/project/remove_spec.rb +86 -0
  86. data/spec/pgit/project/reuse_api_token_adder_spec.rb +41 -0
  87. data/spec/pgit/project_spec.rb +513 -0
  88. data/spec/pgit/status_spec.rb +40 -0
  89. data/spec/pgit/story_branch/application_spec.rb +5 -8
  90. data/spec/pgit/story_branch/name_parser_spec.rb +3 -3
  91. data/spec/pgit/story_branch/story_id_parser_spec.rb +17 -0
  92. data/spec/pgit/validators/project_validator_spec.rb +39 -0
  93. metadata +146 -21
  94. data/lib/pgit/configuration/layout_error.rb +0 -9
  95. data/lib/pgit/configuration/missing_attributes_error.rb +0 -10
  96. data/lib/pgit/configuration/not_found_error.rb +0 -10
  97. data/lib/pgit/configuration/project_missing_error.rb +0 -10
  98. data/lib/pgit/configuration/validator.rb +0 -41
  99. data/lib/pgit/current_project/no_paths_match_working_dir_error.rb +0 -10
  100. data/lib/pgit/external_error.rb +0 -9
  101. data/lib/pgit/installer/configuration.rb +0 -34
  102. data/lib/pgit/story.rb +0 -44
  103. data/spec/pgit/configuration/missing_attributes_error_spec.rb +0 -30
  104. data/spec/pgit/configuration/not_found_error_spec.rb +0 -17
  105. data/spec/pgit/configuration/project_missing_error_spec.rb +0 -30
  106. data/spec/pgit/configuration/validator_spec.rb +0 -79
  107. data/spec/pgit/current_project/no_paths_match_working_dir_error_spec.rb +0 -17
  108. data/spec/pgit/installer/configuration_spec.rb +0 -162
  109. data/spec/pgit/story_spec.rb +0 -35
@@ -3,9 +3,10 @@ require 'spec_helper'
3
3
  describe 'PGit::CurrentProject::Validator' do
4
4
  it 'should raise an error if there are no matching projects' do
5
5
  matching_projects = []
6
+ message = "None of the project paths matches the working directory"
6
7
 
7
8
  expect do
8
9
  PGit::CurrentProject::Validator.new(matching_projects)
9
- end.to raise_error PGit::CurrentProject::NoPathsMatchWorkingDirError
10
+ end.to raise_error(PGit::Error::User, message)
10
11
  end
11
12
  end
@@ -1,79 +1,28 @@
1
1
  require 'spec_helper'
2
- # .edderic-dotfiles/config.yml
3
- # projects
4
- # - path: ~/Therapy-Exercises-Online
5
- # id: 12345
6
- # api_token: asoeuhot
7
- #
8
- def successful_setup
9
- fake_project_1 = { "path" => "/Therapy-Exercises-Online/some_other_project",
10
- "id" => 12345,
11
- "api_token" => "astoeuh" }
12
- fake_project_2 = { "path" => "~/Therapy-Exercises-Online",
13
- "id" => 19191,
14
- "api_token" => "astoeuh" }
15
- fake_project_list = [ fake_project_1, fake_project_2 ]
16
- fake_yaml = { "projects" => fake_project_list }
17
- fake_pwd = "/Therapy-Exercises-Online/some_other_project/some_subdirectory"
18
- allow(Dir).to receive(:pwd).and_return(fake_pwd)
19
-
20
- fake_configuration = double('configuration', to_yaml: fake_yaml)
21
- end
22
2
 
23
3
  describe 'PGit::CurrentProject' do
24
- describe '#new(config_yaml)' do
25
- it 'should delegate to PGit::CurrentProject::Validator' do
26
- fake_project_1 = { "path" => "~/some-non-matching-path",
27
- "id" => 12345,
28
- "api_token" => "astoeuh" }
29
- fake_project_2 = { "path" => "~/some-other-non-matching-path",
30
- "id" => 19191,
31
- "api_token" => "astoeuh" }
32
- fake_project_list = [ fake_project_1, fake_project_2 ]
33
- fake_yaml = { "projects" => fake_project_list }
34
- fake_pwd = "/Therapy-Exercises-Online/some_other_project/some_subdirectory"
35
- fake_configuration = double('configuration', to_yaml: fake_yaml)
36
- allow(Dir).to receive(:pwd).and_return(fake_pwd)
37
- allow(PGit::CurrentProject::Validator).to receive(:new).with []
38
-
39
- PGit::CurrentProject.new(fake_configuration.to_yaml)
40
-
41
- expect(PGit::CurrentProject::Validator).to have_received(:new).with []
42
- end
4
+ it 'instantiates the PGit::Project that exists in the config file and whose path matches the working directory' do
5
+ matching_path = '/some/matching_path'
6
+ matching_project = instance_double('PGit::Project',
7
+ path: matching_path)
8
+ projects = [matching_project]
9
+ configuration = instance_double('PGit::Configuration',
10
+ projects: projects)
11
+ allow(Dir).to receive(:pwd).and_return(matching_path)
12
+ proj = PGit::CurrentProject.new(configuration)
13
+
14
+ expect(proj.path).to eq matching_path
43
15
  end
44
16
 
45
- describe '#pwd' do
46
- describe 'more than one of the projects listed matches the working directory' do
47
- it "should return the more specific directory" do
48
- fake_configuration = successful_setup
49
-
50
- current_project = PGit::CurrentProject.new(fake_configuration.to_yaml)
51
- working_directory = current_project.pwd
52
-
53
- expect(working_directory).to eq "/Therapy-Exercises-Online/some_other_project"
54
- end
55
- end
56
- end
57
-
58
- describe '#id' do
59
- it 'should return the correct pivotal tracker project_id' do
60
- fake_configuration = successful_setup
61
-
62
- current_project = PGit::CurrentProject.new(fake_configuration.to_yaml)
63
- project_id = current_project.id
64
-
65
- expect(project_id).to eq 12345
66
- end
67
- end
68
-
69
- describe '#api_token' do
70
- it 'should return the api_token associated to the current project' do
71
- fake_configuration = successful_setup
72
-
73
- current_project = PGit::CurrentProject.new(fake_configuration.to_yaml)
74
- api_token = current_project.api_token
17
+ it 'raises an error if the project does not exist' do
18
+ matching_path = '/some/matching_path'
19
+ matching_project = instance_double('PGit::Project',
20
+ path: matching_path)
21
+ projects = [matching_project]
22
+ configuration = instance_double('PGit::Configuration',
23
+ projects: projects)
24
+ allow(Dir).to receive(:pwd).and_return('/some/non-matching-path')
75
25
 
76
- expect(api_token).to eq 'astoeuh'
77
- end
26
+ expect{ PGit::CurrentProject.new(configuration) }.to raise_error(PGit::Error::User, "Current Project does not exist. See `pgit proj add -h`")
78
27
  end
79
28
  end
@@ -1,20 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'PGit::ExternalError' do
3
+ describe 'PGit::Error::External' do
4
4
  it 'should take in the response' do
5
5
  response = '{
6
6
  "code": "unfound_resource",
7
7
  "kind": "error",
8
8
  "error": "The object you tried to access could not be found. It may have been removed by another user, you may be using the ID of another object type, or you may be trying to access a sub-resource at the wrong point in a tree."
9
9
  }'
10
- external_error = PGit::ExternalError.new(response)
10
+ external_error = PGit::Error::External.new(response)
11
11
  message = external_error.instance_eval { @message }
12
12
 
13
13
  expect(message).to eq(response)
14
14
  end
15
15
 
16
16
  it 'should inherit from PGit::Error' do
17
- ancestors = PGit::ExternalError.ancestors
17
+ ancestors = PGit::Error::External.ancestors
18
18
 
19
19
  expect(ancestors).to include PGit::Error
20
20
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Error::User' do
4
+ it 'should save the error' do
5
+ message = "You did something dumb..."
6
+ user_error = PGit::Error::User.new(message)
7
+
8
+ expect(user_error.message).to eq message
9
+ end
10
+
11
+ it 'should be a PGit::Error' do
12
+ message = "You did something dumb..."
13
+ ancestors = PGit::Error::User.ancestors
14
+
15
+ expect(ancestors).to include(PGit::Error)
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Helpers::Heredoc' do
4
+ describe '.remove_front_spaces' do
5
+ it 'should return the script, formatted nicely' do
6
+ unprocessed = <<-HEREDOC
7
+ function get_pgit_commands
8
+ {
9
+ if [ -z $2 ]; then
10
+ COMPREPLY=(`pgit help -c`)
11
+ else
12
+ COMPREPLY=(`pgit help -c $2`)
13
+ fi
14
+ }
15
+ complete -F get_pgit_commands pgit
16
+ HEREDOC
17
+
18
+ expected_script =
19
+ "function get_pgit_commands\n" +
20
+ "{\n" +
21
+ " if [ -z $2 ]; then\n" +
22
+ " COMPREPLY=(`pgit help -c`)\n" +
23
+ " else\n" +
24
+ " COMPREPLY=(`pgit help -c $2`)\n" +
25
+ " fi\n" +
26
+ "}\n" +
27
+ "complete -F get_pgit_commands pgit\n"
28
+ script = PGit::Helpers::Heredoc.remove_front_spaces(unprocessed)
29
+
30
+ expect(script).to eq expected_script
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Helpers::QueryMethods' do
4
+ describe '#defaulted_attrs' do
5
+ it 'should ensure that the class has the given attributes' do
6
+ class SomeFakeClass
7
+ include PGit::Helpers::QueryMethods
8
+ extend PGit::Helpers::QueryMethods
9
+
10
+ attr_accessor :some_query, :some_other_query
11
+ attr_query :some_query, :some_other_query
12
+
13
+ def initialize
14
+ @some_query = :no_some_query_given
15
+ end
16
+ end
17
+
18
+ fake = SomeFakeClass.new
19
+ fake.some_other_query = 'set to non default'
20
+
21
+ expect(fake.defaulted_attrs).to include(:some_query.to_s)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Helpers::StringExtensions' do
4
+ describe '#letter?' do
5
+ it 'should be case insensitive' do
6
+ expect('h').to be_letter('h')
7
+ expect('h').to be_letter('H')
8
+ end
9
+
10
+ it 'should not match when length is greater than 1' do
11
+ expect('hh').not_to be_letter('h')
12
+ end
13
+ end
14
+
15
+ describe '#index?' do
16
+ describe 'without passing an arg' do
17
+ it 'should tell us if the argument is a (normal person) index' do
18
+ expect('1').to be_index
19
+ expect('100').to be_index
20
+ expect('0').not_to be_index
21
+ expect('1.1').not_to be_index
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#yes?' do
27
+ it 'returns true if letter is y and false if not' do
28
+ expect('y').to be_yes
29
+ expect('Y').to be_yes
30
+ expect('2').not_to be_yes
31
+ end
32
+ end
33
+
34
+ describe '#no?' do
35
+ it 'returns false if letter is not and false if not' do
36
+ expect('n').to be_no
37
+ expect('N').to be_no
38
+ expect('y').not_to be_no
39
+ end
40
+ end
41
+
42
+ describe '#cancel?' do
43
+ it 'returns true if letter is c and false if not' do
44
+ expect('c').to be_cancel
45
+ expect('C').to be_cancel
46
+ expect('y').not_to be_cancel
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Installer::BashAutoCompletion' do
4
+ describe 'FILENAME' do
5
+ it 'should be ~/.pgit_auto_completion' do
6
+ expect(PGit::Installer::BashAutoCompletion::FILENAME).to eq "~/.pgit_auto_completion"
7
+ end
8
+ end
9
+
10
+ describe '.script' do
11
+ it 'should return the script, formatted nicely' do
12
+ unprocessed = <<-UNPROCESSED
13
+ function get_pgit_commands
14
+ {
15
+ if [ -z $2 ]; then
16
+ COMPREPLY=(`pgit help -c`)
17
+ else
18
+ COMPREPLY=(`pgit help -c $2`)
19
+ fi
20
+ }
21
+ complete -F get_pgit_commands pgit
22
+ UNPROCESSED
23
+
24
+ expected_script = PGit::Helpers::Heredoc.remove_front_spaces(unprocessed)
25
+ script = PGit::Installer::BashAutoCompletion.script
26
+
27
+ expect(script).to eq expected_script
28
+ end
29
+ end
30
+
31
+ describe '#write_completer_file' do
32
+ it "should write the auto completion script to #{PGit::Installer::BashAutoCompletion::FILENAME}" do
33
+ global_opts = {}
34
+ global_opts = {}
35
+ opts = {}
36
+ args = {}
37
+ fake_file = instance_double('File')
38
+ allow(fake_file).to receive(:puts).with(PGit::Installer::BashAutoCompletion.script).and_return(fake_file)
39
+ allow(fake_file).to receive(:close)
40
+ short_path = PGit::Installer::BashAutoCompletion::FILENAME
41
+ short_bashrc_path = "~/.bashrc"
42
+ expanded_path = "/Users/Edderic/#{PGit::Installer::BashAutoCompletion::FILENAME}"
43
+ expanded_bashrc_path = "/Users/Edderic/.bashrc"
44
+ bashrc_lines = [
45
+ "# some more ls aliases\n",
46
+ "alias ll='ls -alF'\n",
47
+ "alias la='ls -A'\n",
48
+ "alias l='ls -CF'\n" ]
49
+ message = "Wrote autocompletion script under #{PGit::Installer::BashAutoCompletion::FILENAME}"
50
+
51
+ allow(File).to receive(:expand_path).with(short_path).and_return(expanded_path)
52
+ allow(File).to receive(:open).with(expanded_path, 'w').and_return(fake_file)
53
+ allow(File).to receive(:readlines).with(expanded_bashrc_path).and_return(bashrc_lines)
54
+
55
+ installer = PGit::Installer::BashAutoCompletion.new(global_opts, opts, args)
56
+ allow(installer).to receive(:puts).with(message)
57
+
58
+ installer.write_completer_file
59
+
60
+ expect(fake_file).to have_received(:puts).with(PGit::Installer::BashAutoCompletion.script)
61
+ expect(fake_file).to have_received(:close)
62
+ expect(installer).to have_received(:puts).with(message)
63
+ end
64
+ end
65
+
66
+ describe '#source_completer_from_bashrc' do
67
+ describe '~/.bashrc does have "source ~#{PGit::Installer::BashAutoCompletion::FILENAME}"' do
68
+ it 'should NOT source it' do
69
+ global_opts = {}
70
+ opts = {}
71
+ args = {}
72
+ fake_file = instance_double('File')
73
+ fake_bashrc_file = instance_double('File')
74
+ allow(fake_bashrc_file).to receive(:puts).with("source #{PGit::Installer::BashAutoCompletion::FILENAME}").and_return(fake_file)
75
+ allow(fake_bashrc_file).to receive(:close)
76
+ short_bashrc_path = "~/.bashrc"
77
+ expanded_bashrc_path = "/Users/Edderic/.bashrc"
78
+ bashrc_lines = [
79
+ "# some more ls aliases\n",
80
+ "alias ll='ls -alF'\n",
81
+ "alias la='ls -A'\n",
82
+ "source #{PGit::Installer::BashAutoCompletion::FILENAME}",
83
+ "alias l='ls -CF'\n" ]
84
+ message = "Already sourcing #{PGit::Installer::BashAutoCompletion::FILENAME} in ~/.bashrc"
85
+
86
+ allow(File).to receive(:expand_path).with(short_bashrc_path).and_return(expanded_bashrc_path)
87
+ allow(File).to receive(:open).with(expanded_bashrc_path, 'a').and_return(fake_bashrc_file)
88
+ allow(File).to receive(:readlines).with(expanded_bashrc_path).and_return(bashrc_lines)
89
+
90
+ installer = PGit::Installer::BashAutoCompletion.new(global_opts, opts, args)
91
+ allow(installer).to receive(:puts).with(message)
92
+
93
+ installer.source_completer_from_bashrc
94
+
95
+ expect(fake_bashrc_file).not_to have_received(:puts).with "source #{PGit::Installer::BashAutoCompletion::FILENAME}"
96
+ expect(fake_bashrc_file).not_to have_received(:close)
97
+ expect(installer).to have_received(:puts).with(message)
98
+ end
99
+ end
100
+
101
+ describe '~/.bashrc does not have the "source ~#{PGit::Installer::BashAutoCompletion::FILENAME}"' do
102
+ it 'should source ~#{PGit::Installer::BashAutoCompletion::FILENAME}' do
103
+ global_opts = {}
104
+ opts = {}
105
+ args = {}
106
+ fake_file = instance_double('File')
107
+ fake_bashrc_file = instance_double('File')
108
+ allow(fake_bashrc_file).to receive(:puts).with("source #{PGit::Installer::BashAutoCompletion::FILENAME}").and_return(fake_file)
109
+ allow(fake_bashrc_file).to receive(:close)
110
+ short_bashrc_path = "~/.bashrc"
111
+ expanded_bashrc_path = "/Users/Edderic/.bashrc"
112
+ bashrc_lines = [
113
+ "# some more ls aliases\n",
114
+ "alias ll='ls -alF'\n",
115
+ "alias la='ls -A'\n",
116
+ "alias l='ls -CF'\n" ]
117
+ installation_message = "~/.bashrc will now source #{PGit::Installer::BashAutoCompletion::FILENAME}"
118
+
119
+ allow(File).to receive(:expand_path).with(short_bashrc_path).and_return(expanded_bashrc_path)
120
+ allow(File).to receive(:open).with(expanded_bashrc_path, 'a').and_return(fake_bashrc_file)
121
+ allow(File).to receive(:readlines).with(expanded_bashrc_path).and_return(bashrc_lines)
122
+
123
+ installer = PGit::Installer::BashAutoCompletion.new(global_opts, opts, args)
124
+ allow(installer).to receive(:puts).with(installation_message)
125
+
126
+ installer.source_completer_from_bashrc
127
+
128
+ expect(fake_bashrc_file).to have_received(:puts).with "source #{PGit::Installer::BashAutoCompletion::FILENAME}"
129
+ expect(fake_bashrc_file).to have_received(:close)
130
+ expect(installer).to have_received(:puts).with(installation_message)
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PGit::Pivotal::IndividualRequest' do
4
+ describe '#get!' do
5
+ it 'does a cURL request' do
6
+ class SomeSubclass < PGit::Pivotal::IndividualRequest
7
+ attr_reader :api_token, :someattr
8
+ def initialize
9
+ @api_token
10
+ end
11
+
12
+ def sublink
13
+ 'some/link'
14
+ end
15
+ end
16
+
17
+ json = double('JSON')
18
+ some_subclass = SomeSubclass.new
19
+ some_other_subclass = SomeSubclass.new
20
+
21
+ api_token = some_subclass.api_token
22
+ link = "https://www.pivotaltracker.com/services/v5/some/link"
23
+ get_request = "curl -X GET -H 'X-TrackerToken: #{api_token}' #{link}"
24
+ allow(JSON).to receive(:parse).with(json).and_return({ 'kind' => 'project', 'someattr' => '123'})
25
+ allow(some_subclass).to receive(:`).with(get_request).and_return(json)
26
+
27
+ some_subclass.get!
28
+
29
+ expect(some_subclass).to have_received(:`).with(get_request)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe PGit::Pivotal::Iteration do
4
+ describe '#new with hash' do
5
+ it 'should instantiate stories' do
6
+ iterations_string = File.read(File.join(PGit.root, 'spec', 'fixtures', 'iterations'))
7
+ iteration_hashes = JSON.parse(iterations_string)
8
+ first_iteration_hash = iteration_hashes.first
9
+ current_project = instance_double('PGit::CurrentProject', id: 123, api_token: 'haba')
10
+ allow(PGit::CurrentProject).to receive(:new).and_return(current_project)
11
+ iteration = PGit::Pivotal::Iteration.new do |iteration|
12
+ iteration.hash = first_iteration_hash
13
+ end
14
+
15
+ first_story = iteration.stories.first
16
+ expect(first_story.id).to eq 90501214
17
+ end
18
+ end
19
+ end