gradesfirst 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/Gemfile +1 -2
- data/Gemfile.lock +2 -6
- data/gradesfirst.gemspec +2 -2
- data/lib/gradesfirst.rb +1 -0
- data/lib/gradesfirst/cli.rb +7 -29
- data/lib/gradesfirst/cli_helper.rb +33 -0
- data/lib/gradesfirst/command.rb +7 -0
- data/lib/gradesfirst/commit_message_command.rb +1 -1
- data/lib/gradesfirst/task_add_command.rb +51 -0
- data/lib/gradesfirst/task_cli.rb +48 -0
- data/lib/gradesfirst/task_command.rb +38 -30
- data/lib/gradesfirst/task_delete_command.rb +64 -0
- data/lib/gradesfirst/task_list_command.rb +40 -0
- data/lib/gradesfirst/task_move_command.rb +64 -0
- data/lib/gradesfirst/task_toggle_command.rb +65 -0
- data/lib/http_magic.rb +2 -258
- data/lib/http_magic/api.rb +233 -0
- data/lib/http_magic/request.rb +93 -0
- data/lib/http_magic/uri.rb +74 -0
- data/lib/pivotal_tracker.rb +1 -1
- data/test/branch_command_test.rb +8 -21
- data/test/cli_test.rb +51 -34
- data/test/command_test.rb +5 -7
- data/test/commit_message_command_test.rb +37 -45
- data/test/fixtures/task.json +10 -0
- data/test/fixtures/task_added.txt +6 -0
- data/test/fixtures/task_deleted.txt +6 -0
- data/test/fixtures/task_moved.txt +6 -0
- data/test/fixtures/task_toggled.txt +6 -0
- data/test/fixtures/tasks.txt +2 -2
- data/test/http_magic/{get_test.rb → api/get_test.rb} +1 -1
- data/test/http_magic/api/post_test.rb +34 -0
- data/test/http_magic/request_test.rb +63 -0
- data/test/http_magic/uri_test.rb +28 -55
- data/test/support/pivotal_test_helper.rb +110 -0
- data/test/support/request_expectation.rb +33 -0
- data/test/task_add_command_test.rb +54 -0
- data/test/task_delete_command_test.rb +57 -0
- data/test/task_list_command_test.rb +18 -0
- data/test/task_move_command_test.rb +66 -0
- data/test/task_toggle_command_test.rb +58 -0
- data/test/test_helper.rb +35 -19
- metadata +29 -7
- data/test/pivotal_tracker_test.rb +0 -46
- data/test/task_command_test.rb +0 -52
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'gradesfirst/task_delete_command'
|
3
|
+
|
4
|
+
describe GradesFirst::TaskDeleteCommand do
|
5
|
+
before do
|
6
|
+
@task_position = '2'
|
7
|
+
@invalid_position = '8'
|
8
|
+
@task_id = 6
|
9
|
+
@command = GradesFirst::TaskDeleteCommand.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_bar_story_task_delete_request(task_id, response)
|
13
|
+
stub_pivotal_request(
|
14
|
+
:delete,
|
15
|
+
urn_for_bar_story_task(task_id),
|
16
|
+
response: response
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stub_failing_bar_story_task_delete_request(task_id)
|
21
|
+
stub_bar_story_task_delete_request(task_id, status: 500)
|
22
|
+
end
|
23
|
+
|
24
|
+
def stub_working_bar_story_task_delete_request(task_id)
|
25
|
+
stub_bar_story_task_delete_request(task_id, status: 204)
|
26
|
+
end
|
27
|
+
|
28
|
+
specify '#execute deletes the task' do
|
29
|
+
stubbed_requests = [
|
30
|
+
stub_bar_story_request,
|
31
|
+
stub_bar_story_tasks_request.times(2),
|
32
|
+
stub_working_bar_story_task_delete_request(@task_id)
|
33
|
+
]
|
34
|
+
|
35
|
+
response = nil
|
36
|
+
expect_requests stubbed_requests do
|
37
|
+
@command.stub :current_branch, bar_story_id do
|
38
|
+
@command.execute(@task_position)
|
39
|
+
end
|
40
|
+
response = @command.response
|
41
|
+
end
|
42
|
+
assert_equal fixture_file('task_deleted.txt'), response
|
43
|
+
end
|
44
|
+
|
45
|
+
specify '#response when deleting the task fails' do
|
46
|
+
stub_bar_story_request
|
47
|
+
stub_bar_story_tasks_request
|
48
|
+
stub_failing_bar_story_task_delete_request(@task_id)
|
49
|
+
@command.stub :current_branch, bar_story_id do
|
50
|
+
@command.execute(@task_position)
|
51
|
+
end
|
52
|
+
assert_equal @command.send(:task_error_message), @command.response
|
53
|
+
end
|
54
|
+
|
55
|
+
specify_response_for_invalid_task_position :delete, @invalid_position
|
56
|
+
specify_response_for_invalid_story @task_position
|
57
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'pivotal_tracker'
|
3
|
+
require 'gradesfirst/task_list_command'
|
4
|
+
|
5
|
+
describe GradesFirst::TaskListCommand do
|
6
|
+
before do
|
7
|
+
@command = GradesFirst::TaskListCommand.new
|
8
|
+
end
|
9
|
+
|
10
|
+
specify '#response responds with a task list with a valid story ' do
|
11
|
+
expect_requests stub_bar_story_request, stub_bar_story_tasks_request do
|
12
|
+
@command.stub :current_branch, bar_story_id, &call_execute
|
13
|
+
end
|
14
|
+
assert_equal fixture_file('tasks.txt'), @command.response
|
15
|
+
end
|
16
|
+
|
17
|
+
specify_response_for_invalid_story
|
18
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'gradesfirst/task_move_command'
|
3
|
+
|
4
|
+
describe GradesFirst::TaskMoveCommand do
|
5
|
+
before do
|
6
|
+
@task_id = 6
|
7
|
+
@from_position = '2'
|
8
|
+
@to_position = '1'
|
9
|
+
@command = GradesFirst::TaskMoveCommand.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_bar_story_task_move_request(task_id, to_position, response)
|
13
|
+
stub_pivotal_request(
|
14
|
+
:put,
|
15
|
+
urn_for_bar_story_task(task_id),
|
16
|
+
request: { body: "{\"position\":#{to_position}}" },
|
17
|
+
response: response
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def stub_failing_bar_story_task_move_request(task_id, to_position)
|
22
|
+
stub_bar_story_task_move_request(
|
23
|
+
task_id,
|
24
|
+
to_position,
|
25
|
+
status: 500
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_working_bar_story_task_move_request(task_id, to_position)
|
30
|
+
stub_bar_story_task_move_request(
|
31
|
+
task_id,
|
32
|
+
to_position,
|
33
|
+
body: fixture_file('task.json')
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
specify '#execute moves the task to a new position' do
|
38
|
+
stubbed_requests = [
|
39
|
+
stub_bar_story_request,
|
40
|
+
stub_bar_story_tasks_request.times(2),
|
41
|
+
stub_working_bar_story_task_move_request(@task_id, @to_position)
|
42
|
+
]
|
43
|
+
|
44
|
+
response = nil
|
45
|
+
expect_requests stubbed_requests do
|
46
|
+
@command.stub :current_branch, bar_story_id do
|
47
|
+
@command.execute(@from_position, @to_position)
|
48
|
+
end
|
49
|
+
response = @command.response
|
50
|
+
end
|
51
|
+
assert_equal fixture_file('task_moved.txt'), response
|
52
|
+
end
|
53
|
+
|
54
|
+
specify '#response when moving the task fails' do
|
55
|
+
stub_bar_story_request
|
56
|
+
stub_bar_story_tasks_request
|
57
|
+
stub_failing_bar_story_task_move_request(@task_id, @to_position)
|
58
|
+
@command.stub :current_branch, bar_story_id do
|
59
|
+
@command.execute(@from_position, @to_position)
|
60
|
+
end
|
61
|
+
assert_equal @command.send(:task_error_message), @command.response
|
62
|
+
end
|
63
|
+
|
64
|
+
specify_response_for_invalid_task_position :put, @from_position, @to_position
|
65
|
+
specify_response_for_invalid_story @from_position, @to_position
|
66
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'gradesfirst/task_toggle_command'
|
3
|
+
|
4
|
+
describe GradesFirst::TaskToggleCommand do
|
5
|
+
before do
|
6
|
+
@task_position = '2'
|
7
|
+
@invalid_position = '8'
|
8
|
+
@task_id = 6
|
9
|
+
@command = GradesFirst::TaskToggleCommand.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_bar_story_task_toggle_request(task_id, response)
|
13
|
+
stub_pivotal_request(
|
14
|
+
:put,
|
15
|
+
urn_for_bar_story_task(task_id),
|
16
|
+
request: { body: "{\"complete\":true}" },
|
17
|
+
response: response
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def stub_failing_bar_story_task_toggle_request(task_id)
|
22
|
+
stub_bar_story_task_toggle_request(task_id, status: 500)
|
23
|
+
end
|
24
|
+
|
25
|
+
def stub_working_bar_story_task_toggle_request(task_id)
|
26
|
+
stub_bar_story_task_toggle_request(task_id, body: fixture_file('task.json'))
|
27
|
+
end
|
28
|
+
|
29
|
+
specify '#execute toggles completion status of the task' do
|
30
|
+
stubbed_requests = [
|
31
|
+
stub_bar_story_request,
|
32
|
+
stub_bar_story_tasks_request.times(2),
|
33
|
+
stub_working_bar_story_task_toggle_request(@task_id)
|
34
|
+
]
|
35
|
+
|
36
|
+
response = nil
|
37
|
+
expect_requests stubbed_requests do
|
38
|
+
@command.stub :current_branch, bar_story_id do
|
39
|
+
@command.execute(@task_position)
|
40
|
+
end
|
41
|
+
response = @command.response
|
42
|
+
end
|
43
|
+
assert_equal fixture_file('task_toggled.txt'), response
|
44
|
+
end
|
45
|
+
|
46
|
+
specify '#response when toggling the task fails' do
|
47
|
+
stub_bar_story_request
|
48
|
+
stub_bar_story_tasks_request
|
49
|
+
stub_failing_bar_story_task_toggle_request(@task_id)
|
50
|
+
@command.stub :current_branch, bar_story_id do
|
51
|
+
@command.execute(@task_position)
|
52
|
+
end
|
53
|
+
assert_equal @command.send(:task_error_message), @command.response
|
54
|
+
end
|
55
|
+
|
56
|
+
specify_response_for_invalid_task_position :put, @invalid_position
|
57
|
+
specify_response_for_invalid_story @task_position
|
58
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -4,26 +4,42 @@ require 'rubygems'
|
|
4
4
|
gem 'minitest' if RUBY_VERSION > '1.9'
|
5
5
|
require 'minitest/autorun'
|
6
6
|
require 'webmock/minitest'
|
7
|
-
require 'mocha/setup'
|
8
7
|
require 'pry'
|
9
8
|
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
10
|
+
|
11
|
+
class MiniTest::Unit::TestCase
|
12
|
+
include GradesFirst::PivotalTestHelper
|
13
|
+
extend GradesFirst::PivotalTestHelper::ClassMethods
|
14
|
+
|
15
|
+
def setup
|
16
|
+
pivotal_tracker_setup
|
17
|
+
end
|
18
|
+
|
19
|
+
# Retreive the contents of fixture files to be used in tests. It is easier
|
20
|
+
# to view, modify and visualize text used in tests when it is stored in files.
|
21
|
+
# Also, it is much easier to reuse that text.
|
22
|
+
def fixture_file(file_name)
|
23
|
+
File.open(fixture_file_path(file_name), 'rb').read
|
24
|
+
end
|
25
|
+
|
26
|
+
def fixture_file_path(file_name)
|
27
|
+
File.join(File.dirname(__FILE__), 'fixtures', file_name)
|
28
|
+
end
|
29
|
+
|
30
|
+
# This returns a lambda for use as the block argument of #stub. The lambda
|
31
|
+
# returned calls #execute on the object being stubbed.
|
32
|
+
def call_execute
|
33
|
+
->(stubbed_object) { stubbed_object.execute }
|
34
|
+
end
|
16
35
|
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
stub_request(method, uri).
|
27
|
-
with(headers: { 'X-TrackerToken' => 'test_token' }).
|
28
|
-
to_return(default_options.merge(options))
|
36
|
+
# Verifies that stubbed out requests have actually been requested.
|
37
|
+
#
|
38
|
+
# expectations - A variable number of RequestExpectation objects.
|
39
|
+
def expect_requests(*expectations)
|
40
|
+
yield
|
41
|
+
expectations.
|
42
|
+
flatten.
|
43
|
+
each { |expectation| assert_requested(*expectation.to_args) }
|
44
|
+
end
|
29
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gradesfirst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.18.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.18.1
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: minitest
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,10 +62,20 @@ files:
|
|
62
62
|
- lib/gradesfirst.rb
|
63
63
|
- lib/gradesfirst/branch_command.rb
|
64
64
|
- lib/gradesfirst/cli.rb
|
65
|
+
- lib/gradesfirst/cli_helper.rb
|
65
66
|
- lib/gradesfirst/command.rb
|
66
67
|
- lib/gradesfirst/commit_message_command.rb
|
68
|
+
- lib/gradesfirst/task_add_command.rb
|
69
|
+
- lib/gradesfirst/task_cli.rb
|
67
70
|
- lib/gradesfirst/task_command.rb
|
71
|
+
- lib/gradesfirst/task_delete_command.rb
|
72
|
+
- lib/gradesfirst/task_list_command.rb
|
73
|
+
- lib/gradesfirst/task_move_command.rb
|
74
|
+
- lib/gradesfirst/task_toggle_command.rb
|
68
75
|
- lib/http_magic.rb
|
76
|
+
- lib/http_magic/api.rb
|
77
|
+
- lib/http_magic/request.rb
|
78
|
+
- lib/http_magic/uri.rb
|
69
79
|
- lib/pivotal_tracker.rb
|
70
80
|
- test/branch_command_test.rb
|
71
81
|
- test/cli_test.rb
|
@@ -77,12 +87,24 @@ files:
|
|
77
87
|
- test/fixtures/projects.json
|
78
88
|
- test/fixtures/story_bar.json
|
79
89
|
- test/fixtures/story_foo.json
|
90
|
+
- test/fixtures/task.json
|
91
|
+
- test/fixtures/task_added.txt
|
92
|
+
- test/fixtures/task_deleted.txt
|
93
|
+
- test/fixtures/task_moved.txt
|
94
|
+
- test/fixtures/task_toggled.txt
|
80
95
|
- test/fixtures/tasks.json
|
81
96
|
- test/fixtures/tasks.txt
|
82
|
-
- test/http_magic/get_test.rb
|
97
|
+
- test/http_magic/api/get_test.rb
|
98
|
+
- test/http_magic/api/post_test.rb
|
99
|
+
- test/http_magic/request_test.rb
|
83
100
|
- test/http_magic/uri_test.rb
|
84
|
-
- test/
|
85
|
-
- test/
|
101
|
+
- test/support/pivotal_test_helper.rb
|
102
|
+
- test/support/request_expectation.rb
|
103
|
+
- test/task_add_command_test.rb
|
104
|
+
- test/task_delete_command_test.rb
|
105
|
+
- test/task_list_command_test.rb
|
106
|
+
- test/task_move_command_test.rb
|
107
|
+
- test/task_toggle_command_test.rb
|
86
108
|
- test/test_helper.rb
|
87
109
|
homepage: http://www.gradesfirst.com
|
88
110
|
licenses:
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'pivotal_tracker'
|
3
|
-
|
4
|
-
describe 'PivotalTracker' do
|
5
|
-
it 'should make a good root uri' do
|
6
|
-
assert_equal(
|
7
|
-
'www.pivotaltracker.com/services/v5',
|
8
|
-
PivotalTracker.uri
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should make a good project list uri' do
|
13
|
-
assert_equal(
|
14
|
-
'www.pivotaltracker.com/services/v5/projects',
|
15
|
-
PivotalTracker.projects.uri
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should make a good project uri' do
|
20
|
-
assert_equal(
|
21
|
-
'www.pivotaltracker.com/services/v5/projects/99',
|
22
|
-
PivotalTracker.projects[99].uri
|
23
|
-
)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should make a good iterations uri' do
|
27
|
-
assert_equal(
|
28
|
-
'www.pivotaltracker.com/services/v5/projects/99/iterations',
|
29
|
-
PivotalTracker.projects[99].iterations.uri
|
30
|
-
)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should return a pivotal project' do
|
34
|
-
stub_pivotal_request(
|
35
|
-
:get,
|
36
|
-
'projects/99',
|
37
|
-
body: fixture_file('projects.json')
|
38
|
-
)
|
39
|
-
|
40
|
-
PivotalTracker.api_token = 'test_token'
|
41
|
-
assert_equal(
|
42
|
-
'GradesFirst',
|
43
|
-
PivotalTracker.projects[99].get.first['name']
|
44
|
-
)
|
45
|
-
end
|
46
|
-
end
|
data/test/task_command_test.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'gradesfirst/task_command'
|
3
|
-
|
4
|
-
describe GradesFirst::TaskCommand do
|
5
|
-
before do
|
6
|
-
stub_pivotal_request(
|
7
|
-
:get,
|
8
|
-
'stories/29384799',
|
9
|
-
status: 404
|
10
|
-
)
|
11
|
-
|
12
|
-
stub_pivotal_request(
|
13
|
-
:get,
|
14
|
-
'stories/29384793',
|
15
|
-
body: fixture_file('story_bar.json')
|
16
|
-
)
|
17
|
-
|
18
|
-
stub_pivotal_request(
|
19
|
-
:get,
|
20
|
-
'projects/10687/stories/29384793/tasks',
|
21
|
-
body: fixture_file('tasks.json')
|
22
|
-
)
|
23
|
-
|
24
|
-
PivotalTracker.api_token = 'test_token'
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#response with a valid story' do
|
28
|
-
before do
|
29
|
-
@command = GradesFirst::TaskCommand.new
|
30
|
-
@command.stub :current_branch, '29384793' do
|
31
|
-
@command.execute
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should respond with a task list' do
|
36
|
-
assert_equal fixture_file('tasks.txt'), @command.response
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe '#response with an invalid story' do
|
41
|
-
before do
|
42
|
-
@command = GradesFirst::TaskCommand.new
|
43
|
-
@command.stub :current_branch, '29384799' do
|
44
|
-
@command.execute
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should respond with error message' do
|
49
|
-
assert_equal @command.send(:error_message), @command.response
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|