teamwork_api 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +11 -1
- data/.travis.yml +14 -1
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +65 -10
- data/Guardfile +12 -0
- data/README.md +5 -5
- data/Rakefile +2 -0
- data/lib/teamwork_api.rb +3 -0
- data/lib/teamwork_api/api/companies.rb +4 -0
- data/lib/teamwork_api/api/params.rb +18 -11
- data/lib/teamwork_api/api/people.rb +52 -29
- data/lib/teamwork_api/api/project_owner.rb +6 -1
- data/lib/teamwork_api/api/projects.rb +70 -47
- data/lib/teamwork_api/api/task_lists.rb +8 -4
- data/lib/teamwork_api/client.rb +24 -20
- data/lib/teamwork_api/error.rb +7 -1
- data/lib/teamwork_api/version.rb +3 -1
- data/spec/fixtures/companies.json +64 -0
- data/spec/fixtures/company.json +32 -0
- data/spec/fixtures/create_project.json +4 -0
- data/spec/fixtures/create_task_list.json +4 -0
- data/spec/fixtures/delete.json +3 -0
- data/spec/fixtures/people.json +80 -0
- data/spec/fixtures/person.json +77 -0
- data/spec/fixtures/project.json +68 -0
- data/spec/fixtures/project_owner.json +91 -0
- data/spec/fixtures/projects.json +135 -0
- data/spec/fixtures/task_list.json +18 -0
- data/spec/fixtures/task_lists.json +22 -0
- data/spec/fixtures/update.json +3 -0
- data/spec/spec_helper.rb +60 -7
- data/spec/teamwork_api/api/companies_spec.rb +69 -0
- data/spec/teamwork_api/api/people_spec.rb +78 -0
- data/spec/teamwork_api/api/project_owner_spec.rb +35 -0
- data/spec/teamwork_api/api/projects_spec.rb +117 -0
- data/spec/teamwork_api/api/task_lists_spec.rb +98 -0
- data/spec/teamwork_api/client_spec.rb +202 -0
- data/teamwork_api.gemspec +10 -2
- metadata +116 -8
- data/spec/teamwork_api_spec.rb +0 -9
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::API::Companies do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000', 'xxx') }
|
7
|
+
|
8
|
+
describe '#companies' do
|
9
|
+
before do
|
10
|
+
stub_get(
|
11
|
+
'http://localhost:3000/companies.json'
|
12
|
+
).to_return(
|
13
|
+
body: fixture('companies.json'),
|
14
|
+
headers: { content_type: 'application/json' }
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'requests the correct resource' do
|
19
|
+
subject.companies
|
20
|
+
expect(a_get('http://localhost:3000/companies.json')).to have_been_made
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns companies' do
|
24
|
+
companies = subject.companies
|
25
|
+
expect(companies).to be_an Array
|
26
|
+
expect(companies.first).to be_a Hash
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#company' do
|
31
|
+
before do
|
32
|
+
stub_get(
|
33
|
+
'http://localhost:3000/companies/999.json'
|
34
|
+
).to_return(
|
35
|
+
body: fixture('company.json'),
|
36
|
+
headers: { content_type: 'application/json' }
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'requests the correct resource' do
|
41
|
+
subject.company(999)
|
42
|
+
expect(
|
43
|
+
a_get('http://localhost:3000/companies/999.json')
|
44
|
+
).to have_been_made
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns a single company' do
|
48
|
+
company = subject.company(999)
|
49
|
+
expect(company).to be_a Hash
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#company_by_name' do
|
54
|
+
before do
|
55
|
+
stub_get(
|
56
|
+
'http://localhost:3000/companies.json'
|
57
|
+
).to_return(
|
58
|
+
body: fixture('companies.json'),
|
59
|
+
headers: { content_type: 'application/json' }
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns the named company' do
|
64
|
+
company = subject.company_by_name('Company One')
|
65
|
+
expect(company).to be_a Hash
|
66
|
+
expect(company['name']).to eq 'Company One'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::API::People do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000', 'xxx') }
|
7
|
+
|
8
|
+
describe '#people' do
|
9
|
+
before do
|
10
|
+
stub_get(
|
11
|
+
'http://localhost:3000/people.json'
|
12
|
+
).to_return(
|
13
|
+
body: fixture('people.json'),
|
14
|
+
headers: { content_type: 'application/json' }
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'requests the correct resource' do
|
19
|
+
subject.people
|
20
|
+
expect(a_get('http://localhost:3000/people.json')).to have_been_made
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns the requested people' do
|
24
|
+
people = subject.people
|
25
|
+
expect(people).to be_an Array
|
26
|
+
people.each { |g| expect(g).to be_a Hash }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#person' do
|
31
|
+
before do
|
32
|
+
stub_get(
|
33
|
+
'http://localhost:3000/people/1.json'
|
34
|
+
).to_return(
|
35
|
+
body: fixture('person.json'),
|
36
|
+
headers: { content_type: 'application/json' }
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'requests the correct resource' do
|
41
|
+
subject.person(1)
|
42
|
+
expect(
|
43
|
+
a_get('http://localhost:3000/people/1.json')
|
44
|
+
).to have_been_made
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns a single person' do
|
48
|
+
person = subject.person(1)
|
49
|
+
expect(person).to be_a Hash
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'add_person_to_project' do
|
54
|
+
it 'adds person to project' do
|
55
|
+
stub_put('http://localhost:3000/projects/999/people.json')
|
56
|
+
subject.add_person_to_project(999, 1)
|
57
|
+
|
58
|
+
expect(
|
59
|
+
a_put(
|
60
|
+
'http://localhost:3000/projects/999/people.json'
|
61
|
+
).with(body: { add: { userIdList: 1 } })
|
62
|
+
).to have_been_made
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#set_permissions' do
|
67
|
+
it 'sets permissions for person on project' do
|
68
|
+
stub_put('http://localhost:3000/projects/999/people/1.json')
|
69
|
+
subject.set_permissions(999, 1, 'project-administrator': true)
|
70
|
+
|
71
|
+
expect(
|
72
|
+
a_put(
|
73
|
+
'http://localhost:3000/projects/999/people/1.json'
|
74
|
+
).with(body: { permissions: { 'project-administrator': true } })
|
75
|
+
).to have_been_made
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::API::ProjectOwner do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000', 'xxx') }
|
7
|
+
|
8
|
+
describe '#project_owner' do
|
9
|
+
before do
|
10
|
+
stub_get(
|
11
|
+
'http://localhost:3000/projects/1.json?project%5B' \
|
12
|
+
'include_project_owner%5D=true'
|
13
|
+
).to_return(
|
14
|
+
body: fixture('project_owner.json'),
|
15
|
+
headers: { content_type: 'application/json' }
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'requests the correct resource' do
|
20
|
+
subject.project_owner(1)
|
21
|
+
expect(
|
22
|
+
a_get(
|
23
|
+
'http://localhost:3000/projects/1.json'
|
24
|
+
).with(
|
25
|
+
query: { project: { include_project_owner: true } }
|
26
|
+
)
|
27
|
+
).to have_been_made
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns the project owner' do
|
31
|
+
owner = subject.project_owner(1)
|
32
|
+
expect(owner).to be_a Hash
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::API::Projects do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000', 'xxx') }
|
7
|
+
|
8
|
+
describe '#create_project' do
|
9
|
+
before do
|
10
|
+
stub_post(
|
11
|
+
'http://localhost:3000/projects.json'
|
12
|
+
).to_return(
|
13
|
+
body: fixture('create_project.json'),
|
14
|
+
headers: { content_type: 'application/json' }
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'requests the correct resource' do
|
19
|
+
subject.create_project(name: 'My Project')
|
20
|
+
expect(a_post('http://localhost:3000/projects.json')).to have_been_made
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns the project id' do
|
24
|
+
id = subject.create_project(name: 'My Project')
|
25
|
+
expect(id).to eq 323_605
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#update_project' do
|
30
|
+
before do
|
31
|
+
stub_put(
|
32
|
+
'http://localhost:3000/projects/1.json'
|
33
|
+
).to_return(
|
34
|
+
body: fixture('update.json'),
|
35
|
+
headers: { content_type: 'application/json' }
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'requests the correct resource' do
|
40
|
+
subject.update_project(1, name: 'My renamed Project')
|
41
|
+
expect(a_put('http://localhost:3000/projects/1.json')).to have_been_made
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns ok' do
|
45
|
+
response = subject.update_project(1, name: 'My renamed Project')
|
46
|
+
expect(response.body).to eq('STATUS' => 'OK')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#projects' do
|
51
|
+
before do
|
52
|
+
stub_get(
|
53
|
+
'http://localhost:3000/projects.json'
|
54
|
+
).to_return(
|
55
|
+
body: fixture('projects.json'),
|
56
|
+
headers: { content_type: 'application/json' }
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'requests the correct resource' do
|
61
|
+
subject.projects
|
62
|
+
expect(a_get('http://localhost:3000/projects.json')).to have_been_made
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'returns the requested projects' do
|
66
|
+
projects = subject.projects
|
67
|
+
expect(projects).to be_an Array
|
68
|
+
projects.each { |g| expect(g).to be_a Hash }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#project' do
|
73
|
+
before do
|
74
|
+
stub_get(
|
75
|
+
'http://localhost:3000/projects/1.json'
|
76
|
+
).to_return(
|
77
|
+
body: fixture('project.json'),
|
78
|
+
headers: { content_type: 'application/json' }
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'requests the correct resource' do
|
83
|
+
subject.project(1)
|
84
|
+
expect(
|
85
|
+
a_get('http://localhost:3000/projects/1.json')
|
86
|
+
).to have_been_made
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'returns a single project' do
|
90
|
+
project = subject.project(1)
|
91
|
+
expect(project).to be_a Hash
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '#delete_project' do
|
96
|
+
before do
|
97
|
+
stub_delete(
|
98
|
+
'http://localhost:3000/projects/1.json'
|
99
|
+
).to_return(
|
100
|
+
body: fixture('delete.json'),
|
101
|
+
headers: { content_type: 'application/json' }
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'requests the correct resource' do
|
106
|
+
subject.delete_project(1)
|
107
|
+
expect(
|
108
|
+
a_delete('http://localhost:3000/projects/1.json')
|
109
|
+
).to have_been_made
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'returns ok' do
|
113
|
+
response = subject.delete_project(1)
|
114
|
+
expect(response.body).to eq('STATUS' => 'OK')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::API::TaskLists do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000', 'xxx') }
|
7
|
+
|
8
|
+
describe '#create_task_list' do
|
9
|
+
before do
|
10
|
+
stub_post(
|
11
|
+
'http://localhost:3000/projects/1/tasklists.json'
|
12
|
+
).to_return(
|
13
|
+
body: fixture('create_task_list.json'),
|
14
|
+
headers: { content_type: 'application/json' }
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'requests the correct resource' do
|
19
|
+
subject.create_task_list(1, name: 'My list')
|
20
|
+
expect(
|
21
|
+
a_post('http://localhost:3000/projects/1/tasklists.json')
|
22
|
+
).to have_been_made
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns the task list id' do
|
26
|
+
id = subject.create_task_list(1, name: 'My list')
|
27
|
+
expect(id).to eq 1_234
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#task_lists' do
|
32
|
+
before do
|
33
|
+
stub_get(
|
34
|
+
'http://localhost:3000/tasklists.json'
|
35
|
+
).to_return(
|
36
|
+
body: fixture('task_lists.json'),
|
37
|
+
headers: { content_type: 'application/json' }
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'requests the correct resource' do
|
42
|
+
subject.task_lists
|
43
|
+
expect(a_get('http://localhost:3000/tasklists.json')).to have_been_made
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'returns the requested task lists' do
|
47
|
+
task_lists = subject.task_lists
|
48
|
+
expect(task_lists).to be_an Array
|
49
|
+
task_lists.each { |tl| expect(tl).to be_a Hash }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#task_list' do
|
54
|
+
before do
|
55
|
+
stub_get(
|
56
|
+
'http://localhost:3000/tasklists/1.json'
|
57
|
+
).to_return(
|
58
|
+
body: fixture('task_list.json'),
|
59
|
+
headers: { content_type: 'application/json' }
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'requests the correct resource' do
|
64
|
+
subject.task_list(1)
|
65
|
+
expect(
|
66
|
+
a_get('http://localhost:3000/tasklists/1.json')
|
67
|
+
).to have_been_made
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns a single task list' do
|
71
|
+
task_list = subject.task_list(1)
|
72
|
+
expect(task_list).to be_a Hash
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#delete_task_list' do
|
77
|
+
before do
|
78
|
+
stub_delete(
|
79
|
+
'http://localhost:3000/tasklists/1.json'
|
80
|
+
).to_return(
|
81
|
+
body: fixture('delete.json'),
|
82
|
+
headers: { content_type: 'application/json' }
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'requests the correct resource' do
|
87
|
+
subject.delete_task_list(1)
|
88
|
+
expect(
|
89
|
+
a_delete('http://localhost:3000/tasklists/1.json')
|
90
|
+
).to have_been_made
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'returns ok' do
|
94
|
+
response = subject.delete_task_list(1)
|
95
|
+
expect(response.body).to eq('STATUS' => 'OK')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe TeamworkApi::Client do
|
6
|
+
subject { TeamworkApi::Client.new('http://localhost:3000') }
|
7
|
+
|
8
|
+
describe '.new' do
|
9
|
+
it 'requires a host argument' do
|
10
|
+
expect { TeamworkApi::Client.new }.to raise_error ArgumentError
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'defaults api key to nil' do
|
14
|
+
expect(subject.api_key).to be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'accepts an api key argument' do
|
18
|
+
client = TeamworkApi::Client.new('http://localhost:3000', 'test')
|
19
|
+
expect(client.api_key).to eq('test')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#api_key' do
|
24
|
+
it 'is publically accessible' do
|
25
|
+
subject.api_key = 'test_d7fd0429940'
|
26
|
+
expect(subject.api_key).to eq('test_d7fd0429940')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#host' do
|
31
|
+
it 'is publically readable' do
|
32
|
+
expect(subject.host).to eq('http://localhost:3000')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'is not publically writeable' do
|
36
|
+
expect(subject).not_to respond_to(:host=)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#connection' do
|
41
|
+
it 'looks like a Faraday connection' do
|
42
|
+
expect(subject.send(:connection)).to respond_to :run_request
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'memorizes the connection' do
|
46
|
+
c1 = subject.send(:connection)
|
47
|
+
c2 = subject.send(:connection)
|
48
|
+
expect(c1.object_id).to eq(c2.object_id)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#delete' do
|
53
|
+
before do
|
54
|
+
stub_delete(
|
55
|
+
'http://localhost:3000/test/delete'
|
56
|
+
).with(query: { deleted: 'object' })
|
57
|
+
subject.api_key = 'test_d7fd0429940'
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'allows custom delete requests' do
|
61
|
+
subject.delete('/test/delete', deleted: 'object')
|
62
|
+
expect(
|
63
|
+
a_delete(
|
64
|
+
'http://localhost:3000/test/delete'
|
65
|
+
).with(query: { deleted: 'object' })
|
66
|
+
).to have_been_made
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when using a host with a subdirectory' do
|
70
|
+
subject { TeamworkApi::Client.new('http://localhost:3000/forum') }
|
71
|
+
|
72
|
+
before do
|
73
|
+
stub_delete(
|
74
|
+
'http://localhost:3000/forum/test/delete'
|
75
|
+
).with(query: { deleted: 'object' })
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'allows custom delete requests' do
|
79
|
+
subject.delete('/test/delete', deleted: 'object')
|
80
|
+
expect(
|
81
|
+
a_delete(
|
82
|
+
'http://localhost:3000/forum/test/delete'
|
83
|
+
).with(query: { deleted: 'object' })
|
84
|
+
).to have_been_made
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#post' do
|
90
|
+
before do
|
91
|
+
stub_post(
|
92
|
+
'http://localhost:3000/test/post'
|
93
|
+
).with(body: { created: 'object' })
|
94
|
+
subject.api_key = 'test_d7fd0429940'
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'allows custom post requests' do
|
98
|
+
subject.post('/test/post', created: 'object')
|
99
|
+
expect(
|
100
|
+
a_post(
|
101
|
+
'http://localhost:3000/test/post'
|
102
|
+
).with(body: { created: 'object' })
|
103
|
+
).to have_been_made
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'when using a host with a subdirectory' do
|
107
|
+
subject { TeamworkApi::Client.new('http://localhost:3000/forum') }
|
108
|
+
|
109
|
+
before do
|
110
|
+
stub_post(
|
111
|
+
'http://localhost:3000/forum/test/post'
|
112
|
+
).with(body: { created: 'object' })
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'allows custom post requests' do
|
116
|
+
subject.post('/test/post', created: 'object')
|
117
|
+
expect(
|
118
|
+
a_post(
|
119
|
+
'http://localhost:3000/forum/test/post'
|
120
|
+
).with(body: { created: 'object' })
|
121
|
+
).to have_been_made
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe '#put' do
|
127
|
+
before do
|
128
|
+
stub_put(
|
129
|
+
'http://localhost:3000/test/put'
|
130
|
+
).with(body: { updated: 'object' })
|
131
|
+
subject.api_key = 'test_d7fd0429940'
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'allows custom put requests' do
|
135
|
+
subject.put('/test/put', updated: 'object')
|
136
|
+
expect(
|
137
|
+
a_put(
|
138
|
+
'http://localhost:3000/test/put'
|
139
|
+
).with(body: { updated: 'object' })
|
140
|
+
).to have_been_made
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when using a host with a subdirectory' do
|
144
|
+
subject { TeamworkApi::Client.new('http://localhost:3000/subd') }
|
145
|
+
|
146
|
+
before do
|
147
|
+
stub_put(
|
148
|
+
'http://localhost:3000/subd/test/put'
|
149
|
+
).with(body: { updated: 'object' })
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'allows custom post requests' do
|
153
|
+
subject.put('/test/put', updated: 'object')
|
154
|
+
expect(
|
155
|
+
a_put(
|
156
|
+
'http://localhost:3000/subd/test/put'
|
157
|
+
).with(body: { updated: 'object' })
|
158
|
+
).to have_been_made
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '#request' do
|
164
|
+
it 'catches 500 errors' do
|
165
|
+
connection =
|
166
|
+
instance_double(Faraday::Connection, headers: {}, basic_auth: '')
|
167
|
+
allow(
|
168
|
+
connection
|
169
|
+
).to receive(
|
170
|
+
:get
|
171
|
+
).and_return(
|
172
|
+
OpenStruct.new(env: { body: 'error page html' }, status: 500)
|
173
|
+
)
|
174
|
+
allow(subject).to receive(:connection).and_return(connection)
|
175
|
+
expect {
|
176
|
+
subject.send(:request, :get, '/test')
|
177
|
+
}.to raise_error TeamworkApi::Error
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'catches Faraday errors' do
|
181
|
+
allow(
|
182
|
+
subject
|
183
|
+
).to receive(
|
184
|
+
:connection
|
185
|
+
).and_raise(Faraday::Error::ClientError.new('BOOM!'))
|
186
|
+
expect {
|
187
|
+
subject.send(:request, :get, '/test')
|
188
|
+
}.to raise_error TeamworkApi::Error
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'catches JSON::ParserError errors' do
|
192
|
+
allow(
|
193
|
+
subject
|
194
|
+
).to receive(
|
195
|
+
:connection
|
196
|
+
).and_raise(JSON::ParserError.new('unexpected token'))
|
197
|
+
expect {
|
198
|
+
subject.send(:request, :get, '/test')
|
199
|
+
}.to raise_error TeamworkApi::Error
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|