kosapi_client 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +89 -0
  4. data/kosapi_client.gemspec +38 -0
  5. data/lib/kosapi_client/api_client.rb +1 -0
  6. data/lib/kosapi_client/entity/division.rb +13 -0
  7. data/lib/kosapi_client/entity/exam.rb +3 -1
  8. data/lib/kosapi_client/entity/id.rb +0 -1
  9. data/lib/kosapi_client/entity/parallel.rb +0 -1
  10. data/lib/kosapi_client/entity.rb +1 -0
  11. data/lib/kosapi_client/oauth2_http_adapter.rb +9 -4
  12. data/lib/kosapi_client/request_builder.rb +0 -1
  13. data/lib/kosapi_client/resource/course_events_builder.rb +1 -1
  14. data/lib/kosapi_client/resource/courses_builder.rb +7 -0
  15. data/lib/kosapi_client/resource/exams_builder.rb +1 -1
  16. data/lib/kosapi_client/resource/parallels_builder.rb +0 -1
  17. data/lib/kosapi_client/version.rb +1 -1
  18. metadata +25 -99
  19. data/bin/console +0 -15
  20. data/bin/setup +0 -23
  21. data/spec/integration/course_events_spec.rb +0 -13
  22. data/spec/integration/courses_spec.rb +0 -28
  23. data/spec/integration/exams_spec.rb +0 -20
  24. data/spec/integration/parallels_spec.rb +0 -68
  25. data/spec/kosapi_client/api_client_spec.rb +0 -22
  26. data/spec/kosapi_client/configuration_spec.rb +0 -30
  27. data/spec/kosapi_client/entity/base_entity_spec.rb +0 -20
  28. data/spec/kosapi_client/entity/base_person_spec.rb +0 -19
  29. data/spec/kosapi_client/entity/boolean_spec.rb +0 -23
  30. data/spec/kosapi_client/entity/course_event_spec.rb +0 -30
  31. data/spec/kosapi_client/entity/data_mappings_spec.rb +0 -154
  32. data/spec/kosapi_client/entity/enum_spec.rb +0 -20
  33. data/spec/kosapi_client/entity/id_spec.rb +0 -13
  34. data/spec/kosapi_client/entity/link_spec.rb +0 -89
  35. data/spec/kosapi_client/entity/ml_string_spec.rb +0 -52
  36. data/spec/kosapi_client/entity/parallel_spec.rb +0 -18
  37. data/spec/kosapi_client/entity/result_page_spec.rb +0 -42
  38. data/spec/kosapi_client/entity/teacher_timetable_slot_spec.rb +0 -19
  39. data/spec/kosapi_client/entity/timetable_slot_spec.rb +0 -22
  40. data/spec/kosapi_client/hash_utils_spec.rb +0 -20
  41. data/spec/kosapi_client/http_client_spec.rb +0 -30
  42. data/spec/kosapi_client/kosapi_client_spec.rb +0 -57
  43. data/spec/kosapi_client/kosapi_response_spec.rb +0 -96
  44. data/spec/kosapi_client/oauth2_http_adapter_spec.rb +0 -25
  45. data/spec/kosapi_client/request_builder_delegator_spec.rb +0 -72
  46. data/spec/kosapi_client/request_builder_spec.rb +0 -80
  47. data/spec/kosapi_client/resource/courses_builder_spec.rb +0 -20
  48. data/spec/kosapi_client/resource/parallels_builder_spec.rb +0 -49
  49. data/spec/kosapi_client/resource_mapper_spec.rb +0 -33
  50. data/spec/kosapi_client/response_converter_spec.rb +0 -58
  51. data/spec/kosapi_client/response_links_spec.rb +0 -52
  52. data/spec/kosapi_client/response_preprocessor_spec.rb +0 -51
  53. data/spec/kosapi_client/url_builder_spec.rb +0 -44
  54. data/spec/spec_helper.rb +0 -40
  55. data/spec/support/client_helpers.rb +0 -11
  56. data/spec/support/helpers.rb +0 -7
  57. data/spec/support/shared_examples_for_fluent_api.rb +0 -7
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::HTTPClient do
4
-
5
- let(:response) { double(parsed: {}) }
6
- let(:http_adapter) { instance_double(KOSapiClient::OAuth2HttpAdapter) }
7
- let(:preprocessed_hash) { {} }
8
- let(:preprocessor) { instance_double(KOSapiClient::ResponsePreprocessor, preprocess: preprocessed_hash) }
9
- let(:converter) { instance_double(KOSapiClient::ResponseConverter, convert: nil) }
10
- subject(:client) { KOSapiClient::HTTPClient.new(http_adapter, preprocessor, converter) }
11
-
12
- describe '#send_request' do
13
-
14
- it 'calls http adapter' do
15
- expect(http_adapter).to receive(:send_request).and_return(response)
16
- client.send_request(:get, 'http://example.com')
17
- end
18
-
19
- end
20
-
21
- describe '#process_response' do
22
-
23
- it 'converts items with converter' do
24
- expect(converter).to receive(:convert).and_return(:foo)
25
- expect(client.process_response(nil)).to eq(:foo)
26
- end
27
-
28
- end
29
-
30
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient do
4
-
5
- before do
6
- KOSapiClient.configure do |c|
7
- c.client_id = 'foo'
8
- c.client_secret = 'bar'
9
- end
10
- @client = KOSapiClient.client
11
- end
12
-
13
- describe '.configure' do
14
-
15
- it 'can be configured via block' do
16
- expect(@client).not_to be_nil
17
- end
18
-
19
- end
20
-
21
- describe '.reset' do
22
-
23
- it 'cleans stored ApiClient instance' do
24
- KOSapiClient.reset
25
- expect(KOSapiClient.client).not_to be @client
26
- end
27
-
28
- end
29
-
30
- describe '.client' do
31
-
32
- it 'provides client instance via reader' do
33
- expect(KOSapiClient.client).to eq @client
34
- end
35
-
36
- end
37
-
38
- it 'delegates missing methods to stored client instance' do
39
- expect(@client).to receive(:course_events)
40
- KOSapiClient.course_events
41
- end
42
-
43
- it 'handles missing methods not defined on client' do
44
- expect { KOSapiClient.foo }.to raise_error NoMethodError
45
- end
46
-
47
- it 'throws error when sending request with no configured credentials' do
48
- KOSapiClient.reset
49
- expect { KOSapiClient.course_events.items }.to raise_error(RuntimeError)
50
- end
51
-
52
- it 'responds to client methods' do
53
- allow(@client).to receive(:foo)
54
- expect(KOSapiClient).to respond_to(:foo)
55
- end
56
-
57
- end
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::KOSapiResponse do
4
-
5
- subject(:response) { KOSapiClient::KOSapiResponse.new(result) }
6
- let(:client) { instance_double(KOSapiClient::HTTPClient) }
7
-
8
- context 'with paginated response' do
9
- let(:result) { {atom_feed: {atom_entry: [:entry1, :entry2], atom_link: [{rel: 'prev', href: 'courses/?offset=0&limit=10'}, {rel: 'next', href: 'courses/?offset=20&limit=10'}]}} }
10
-
11
- describe '#is_paginated?' do
12
-
13
- it 'returns true when result contains atom feed' do
14
- expect(response.is_paginated?).to be
15
- end
16
-
17
- end
18
-
19
- describe '#items' do
20
-
21
- it 'returns all entries' do
22
- expect(response.items).to eq [:entry1, :entry2]
23
- end
24
-
25
- end
26
-
27
- describe '#item' do
28
-
29
- it 'returns first entry' do
30
- expect(response.item).to eq :entry1
31
- end
32
-
33
- end
34
-
35
- describe '#links_hash' do
36
-
37
- it 'extracts links from feed' do
38
- expect(response.links_hash).to eq [{rel: 'prev', href: 'courses/?offset=0&limit=10'}, {rel: 'next', href: 'courses/?offset=20&limit=10'}]
39
- end
40
-
41
-
42
- context 'with single link' do
43
- let(:result) { {atom_feed: {atom_link: {rel: 'next', href: 'courses/?offset=10&limit=10'}}} }
44
-
45
- it 'extracts next link from feed' do
46
- expect(response.links_hash).to eq({rel: 'next', href: 'courses/?offset=10&limit=10'})
47
- end
48
- end
49
-
50
- context 'with no links' do
51
- let(:result) { {atom_feed: {}} }
52
-
53
- it 'returns null' do
54
- expect(response.links_hash).not_to be
55
- end
56
- end
57
-
58
- end
59
-
60
- end
61
-
62
- context 'with not-paginated response' do
63
- let(:result) { { atom_entry: :entry} }
64
-
65
- describe '#is_paginated?' do
66
-
67
- it 'returns false when result contains atom feed' do
68
- expect(response.is_paginated?).not_to be
69
- end
70
-
71
- end
72
-
73
- describe '#items' do
74
-
75
- it 'returns single entry wrapped in array' do
76
- expect(response.items).to eq [:entry]
77
- end
78
-
79
- end
80
-
81
- describe '#item' do
82
-
83
- it 'returns first entry' do
84
- expect(response.item).to eq :entry
85
- end
86
-
87
- end
88
-
89
- describe '#links_hash' do
90
- it 'returns null' do
91
- expect(response.links_hash).not_to be
92
- end
93
- end
94
- end
95
-
96
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::OAuth2HttpAdapter, :vcr do
4
- KOSAPI_ROOT_URL = 'https://kosapi.fit.cvut.cz/api/3/'
5
- subject(:client) { KOSapiClient::OAuth2HttpAdapter.new(credentials, KOSAPI_ROOT_URL) }
6
-
7
-
8
- context 'with invalid OAUTH credentials' do
9
- let(:credentials) { { client_id: 'invalid_client_id', client_secret: 'invalid_secret' } }
10
-
11
- it 'throws authentication error when fetching resource' do
12
- expect { client.send_request(:get, 'courses') }.to raise_error(OAuth2::Error)
13
- end
14
- end
15
-
16
- context 'with valid OAUTH credentials' do
17
- let(:credentials) { { client_id: ENV['KOSAPI_OAUTH_CLIENT_ID'], client_secret: ENV['KOSAPI_OAUTH_CLIENT_SECRET'] } }
18
-
19
- it 'fetches response from a REST resource' do
20
- response = client.send_request(:get, 'courses')
21
- expect(response).not_to be_nil
22
- end
23
-
24
- end
25
- end
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::RequestBuilderDelegator do
4
-
5
- let(:response) { double(:response) }
6
- let(:builder) { double(:builder, response: response, finalize: nil) }
7
- let(:block) { -> { 1 + 1 } }
8
- subject(:delegator) { KOSapiClient::RequestBuilderDelegator.new(builder) }
9
-
10
- describe '#method_missing' do
11
-
12
- it 'delegates methods which builder responds to, to the builder' do
13
- expect(builder).to receive(:foo)
14
- delegator.foo
15
- end
16
-
17
- it 'evaluates builder when builder is not responding to a delegated method' do
18
- expect(builder).to receive(:finalize)
19
- expect(response).to receive(:bar)
20
- delegator.bar
21
- end
22
-
23
- it 'delegates all methods to response once RequestBuilder is evaluated' do
24
- allow(response).to receive(:bar)
25
- expect(builder).not_to receive(:foo)
26
- delegator.bar
27
- expect { delegator.foo }.to raise_error(NoMethodError)
28
- end
29
-
30
- it 'throws error when method is not defined on builder or response' do
31
- expect { delegator.foo }.to raise_error(NoMethodError)
32
- end
33
-
34
- it 'replaces builder.self with self' do
35
- allow(builder).to receive(:foo).and_return(builder)
36
- expect(delegator.foo).to be delegator
37
- end
38
-
39
- it 'delegates call with block to builder' do
40
- allow(builder).to receive(:foo).with(:x) do |arg, &block|
41
- expect(block).not_to be_nil
42
- end
43
-
44
- delegator.foo(:x, &block)
45
- end
46
-
47
- it 'delegates call with block to response' do
48
- allow(response).to receive(:foo).with(:x) do |arg, &block|
49
- expect(block).not_to be_nil
50
- end
51
-
52
- delegator.foo(:x, &block)
53
- end
54
-
55
- end
56
-
57
- describe '#respond_to_missing?' do
58
-
59
- it 'responds to methods on builder' do
60
- allow(builder).to receive(:foo)
61
- expect(delegator).to respond_to(:foo)
62
- end
63
-
64
- it 'responds to methods on response when evaluated' do
65
- allow(response).to receive(:foo)
66
- delegator.foo
67
- expect(delegator).to respond_to(:foo)
68
- end
69
-
70
- end
71
-
72
- end
@@ -1,80 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::RequestBuilder do
4
-
5
- let(:url_builder) { instance_double(KOSapiClient::URLBuilder, url: 'http://example.com', set_path: nil, set_query_param: nil) }
6
- let(:response) { double(foo: :bar) }
7
- let(:http_client) { double(send_request: response) }
8
- subject(:builder) { KOSapiClient::RequestBuilder.new('http://example.com', http_client, url_builder) }
9
-
10
-
11
-
12
- describe '#finalize' do
13
-
14
- it 'sends http request' do
15
- expect(http_client).to receive(:send_request)
16
- builder.finalize
17
- end
18
-
19
- it 'stores response' do
20
- builder.finalize
21
- expect(builder.response).to eq response
22
- end
23
-
24
- end
25
-
26
- describe '#find' do
27
-
28
- it_behaves_like 'fluent api command', method_name, 10
29
-
30
- it 'sets path in URL' do
31
- expect(url_builder).to receive(:set_path).with(10)
32
- builder.find(10)
33
- end
34
-
35
- end
36
-
37
- describe '#offset' do
38
-
39
- it_behaves_like 'fluent api command', method_name, 10
40
-
41
- it 'sets query param' do
42
- expect(url_builder).to receive(:set_query_param).with(:offset, 10)
43
- builder.offset(10)
44
- end
45
-
46
- end
47
-
48
- describe '#limit' do
49
-
50
- it_behaves_like 'fluent api command', method_name, 10
51
-
52
- it 'sets query param' do
53
- expect(url_builder).to receive(:set_query_param).with(:limit, 10)
54
- builder.limit(10)
55
- end
56
-
57
- end
58
-
59
- describe '#query' do
60
-
61
- it_behaves_like 'fluent api command', method_name, foo: 10
62
-
63
- it 'sets query param' do
64
- expect(url_builder).to receive(:set_query_param).with(:query, 'foo==10;bar==20')
65
- builder.query(foo: 10, bar: 20)
66
- end
67
-
68
- it 'throws error when params are empty' do
69
- expect { builder.query({}) }.to raise_error(RuntimeError)
70
- end
71
-
72
- it 'accepts string instead of a hash' do
73
- expect(url_builder).to receive(:set_query_param).with(:query, 'foo==10;bar==20')
74
- builder.query('foo==10;bar==20')
75
- end
76
-
77
- end
78
-
79
-
80
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::Resource::CoursesBuilder do
4
-
5
- let(:url_builder) { instance_double(KOSapiClient::URLBuilder, url: 'http://example.com', set_query_param: nil) }
6
- let(:response) { double(foo: :bar) }
7
- let(:http_client) { double(send_request: response) }
8
- subject(:builder) { KOSapiClient::Resource::CoursesBuilder.new('http://example.com', http_client, url_builder) }
9
-
10
- describe '#detail' do
11
-
12
- it_behaves_like 'fluent api command', method_name, 10
13
-
14
- it 'sets detail query parameter' do
15
- expect(url_builder).to receive(:set_query_param).with(:detail, 1)
16
- builder.detail
17
- end
18
-
19
- end
20
- end
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::Resource::ParallelsBuilder do
4
-
5
- let(:url_builder) { instance_double(KOSapiClient::URLBuilder, url: 'http://example.com') }
6
- let(:response) { double(foo: :bar) }
7
- let(:http_client) { double(send_request: response) }
8
- subject(:builder) { KOSapiClient::Resource::ParallelsBuilder.new('http://example.com', http_client, url_builder) }
9
-
10
- describe '#related' do
11
-
12
- before { allow(url_builder).to receive(:set_path) }
13
-
14
- it 'throws error when parallel id not set' do
15
- expect { builder.related }.to raise_error(RuntimeError)
16
- end
17
-
18
- it 'returns self' do
19
- builder.find(42)
20
- expect(builder.related).to eq builder
21
- end
22
-
23
- it 'adds related to URL' do
24
- expect(url_builder).to receive(:set_path).with(42, 'related')
25
- builder.find(42).related
26
- end
27
-
28
- end
29
-
30
- describe '#students' do
31
-
32
- before { allow(url_builder).to receive(:set_path) }
33
-
34
- it 'throws error when parallel id not set' do
35
- expect { builder.students }.to raise_error(RuntimeError)
36
- end
37
-
38
- it 'returns self' do
39
- builder.find(42)
40
- expect(builder.students).to eq builder
41
- end
42
-
43
- it 'adds students to URL' do
44
- expect(url_builder).to receive(:set_path).with(42, 'students')
45
- builder.find(42).students
46
- end
47
-
48
- end
49
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::ResourceMapper do
4
-
5
- let(:dummy_class) { Class.new { include KOSapiClient::ResourceMapper } }
6
- let(:dummy_instance) { dummy_class.new }
7
-
8
- it 'defines class method .resource' do
9
- expect(dummy_class).to respond_to(:resource)
10
- end
11
-
12
- describe '.resource' do
13
-
14
- it 'creates instance method with the resource name' do
15
- dummy_class.resource(:foo)
16
- expect(dummy_instance).to respond_to(:foo)
17
- end
18
-
19
- it 'creates method which returns builder delegator' do
20
- dummy_class.resource(:foo)
21
- allow(dummy_instance).to receive(:create_builder)
22
- expect(dummy_instance.foo).to be_an_instance_of(KOSapiClient::RequestBuilderDelegator)
23
- end
24
-
25
- it 'calls #create_builder' do
26
- dummy_class.resource(:foo)
27
- expect(dummy_instance).to receive(:create_builder).with(:foo)
28
- dummy_instance.foo
29
- end
30
-
31
- end
32
-
33
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::ResponseConverter do
4
-
5
- let(:client) { instance_double(KOSapiClient::HTTPClient) }
6
- subject(:converter) { described_class.new(client) }
7
-
8
- describe '#convert' do
9
-
10
- context 'with paginated response' do
11
-
12
- let(:next_link) { instance_double(KOSapiClient::Entity::Link) }
13
- let(:prev_link) { instance_double(KOSapiClient::Entity::Link) }
14
- let(:links) { instance_double(KOSapiClient::ResponseLinks, next: next_link, prev: prev_link) }
15
- let(:api_response) { double(is_paginated?: true, items: [{xsi_type: 'courseEvent', capacity: 70}, {xsi_type: 'courseEvent', capacity: 40}], links_hash: links) }
16
-
17
- before(:each) { allow(converter).to receive(:create_links).and_return(links) }
18
-
19
- it 'processes paginated response' do
20
- result = converter.convert(api_response)
21
- expect(result).to be_an_instance_of(KOSapiClient::Entity::ResultPage)
22
- end
23
-
24
- it 'creates next link' do
25
- result = converter.convert(api_response)
26
- expect(result.next).to be next_link
27
- end
28
-
29
- it 'creates prev link' do
30
- result = converter.convert(api_response)
31
- expect(result.prev).to be prev_link
32
- end
33
- end
34
-
35
- context 'with single entry response' do
36
-
37
- let(:api_response) { double(is_paginated?: false, item: {xsi_type: 'courseEvent', capacity: 70}) }
38
-
39
- it 'processes non-paginated response' do
40
- result = converter.convert(api_response)
41
- expect(result).to be_an_instance_of(KOSapiClient::Entity::CourseEvent)
42
- end
43
-
44
- end
45
-
46
- context 'unknown type' do
47
-
48
- let(:api_response) { double(is_paginated?: false, item: {xsi_type: 'unknownType'}) }
49
-
50
- it 'raises error when type not found' do
51
- expect { converter.convert(api_response) }.to raise_error(RuntimeError)
52
- end
53
-
54
- end
55
-
56
- end
57
-
58
- end
@@ -1,52 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::ResponseLinks do
4
-
5
- let(:client) { instance_double(KOSapiClient::HTTPClient) }
6
- subject(:links) { described_class.new }
7
-
8
- describe '.parse' do
9
-
10
- context 'with no links' do
11
- it 'returns instance with no links set' do
12
- links = described_class.parse(nil, client)
13
- expect(links.next).not_to be
14
- expect(links.prev).not_to be
15
- end
16
- end
17
-
18
- context 'with both links' do
19
- it 'parses both links' do
20
- links = described_class.parse([{rel: 'prev', href: 'courses/?offset=0&limit=10'}, {rel: 'next', href: 'courses/?offset=20&limit=10'}], client)
21
- expect(links.next.link_href).to eq 'courses/?offset=20&limit=10'
22
- expect(links.prev.link_href).to eq 'courses/?offset=0&limit=10'
23
- end
24
- end
25
-
26
- context 'with next link' do
27
- it 'parses next link' do
28
- links = described_class.parse({rel: 'next', href: 'courses/?offset=20&limit=10'}, client)
29
- expect(links.next.link_href).to eq 'courses/?offset=20&limit=10'
30
- expect(links.next.link_rel).to eq 'next'
31
- expect(links.prev).not_to be
32
- end
33
- end
34
-
35
- context 'with prev link' do
36
- it 'parses prev link' do
37
- links = described_class.parse({rel: 'prev', href: 'courses/?offset=20&limit=10'}, client)
38
- expect(links.next).not_to be
39
- expect(links.prev.link_href).to eq 'courses/?offset=20&limit=10'
40
- expect(links.prev.link_rel).to eq 'prev'
41
- end
42
- end
43
-
44
- it 'injects http client' do
45
- links = described_class.parse({rel: 'next', href: 'courses/?offset=20&limit=10'}, client)
46
- expect(client).to receive(:send_request)
47
- links.next.follow
48
- end
49
-
50
- end
51
-
52
- end
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::ResponsePreprocessor do
4
- subject(:preprocessor) { KOSapiClient::ResponsePreprocessor.new }
5
- let(:response) { double(parsed: parsed_response) }
6
- let(:parsed_response) { {atom_entry: {}, 'sampleKey' => 'value', 'nestedHash' => ['stuff', {'foo'=>'bar'}]} }
7
-
8
- it 'stringifies hash keys and make then snakecase' do
9
- result = preprocessor.preprocess(response)
10
- expect(result).to eq({atom_entry: {}, sample_key: 'value', nested_hash: ['stuff', {foo: 'bar'}]})
11
- end
12
-
13
- it 'converts entries to array when required' do
14
- resp = {atom_feed: {
15
- atom_entry: {id: '1234'}
16
- }}
17
- result = preprocessor.preprocess(double(parsed: resp))
18
- expect(result).to eq({atom_feed: {atom_entry: [{id: '1234'}]}})
19
- end
20
-
21
- it 'merges contents to entries in feed' do
22
- resp = {atom_feed: {
23
- atom_entry: [{id: '1234', atom_content: {foo: :bar}}]
24
- }}
25
- result = preprocessor.preprocess(double(parsed: resp))
26
- expect(result).to eq({atom_feed: {atom_entry: [{id: '1234', foo: :bar}]}})
27
- end
28
-
29
- it 'merges content in single entry' do
30
- resp = {atom_entry: {id: '1234', atom_content: {foo: :bar}}}
31
- result = preprocessor.preprocess(double(parsed: resp))
32
- expect(result).to eq({atom_entry: {id: '1234', foo: :bar}})
33
- end
34
-
35
- it 'handles empty response' do
36
- resp = {atom_feed: {} }
37
- result = preprocessor.preprocess(double(parsed: resp))
38
- expect(result).to eq({atom_feed: {}})
39
- end
40
-
41
- context 'with invalid response' do
42
-
43
- let(:parsed_response) { 'foo' }
44
-
45
- it 'raises error when parsed type is not a hash' do
46
- expect { preprocessor.preprocess(response) }.to raise_error(RuntimeError)
47
- end
48
-
49
- end
50
-
51
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe KOSapiClient::URLBuilder do
4
-
5
- let(:root) { 'http://example.com' }
6
- subject(:builder) { KOSapiClient::URLBuilder.new(root) }
7
-
8
- describe '#set_query_param' do
9
-
10
- it 'adds new query parameters to ur' do
11
- builder.set_query_param('foo', 'bar')
12
- builder.set_query_param('boo', 'far')
13
- expect(builder.url).to eq 'http://example.com?foo=bar&boo=far'
14
- end
15
-
16
- it 'overwrites already used query parameters' do
17
- builder.set_query_param('foo', 'bar')
18
- builder.set_query_param('foo', 'far')
19
- expect(builder.url).to eq 'http://example.com?foo=far'
20
- end
21
-
22
- end
23
-
24
- describe '#set_path' do
25
-
26
- it 'sets path correctly' do
27
- builder.set_path('foo', 'bar')
28
- expect(builder.url).to eq 'http://example.com/foo/bar'
29
- end
30
-
31
- context 'with custom root' do
32
-
33
- let(:root) { 'https://kosapi.fit.cvut.cz/api/3' }
34
-
35
- it 'creates correct path' do
36
- builder.set_path('bar')
37
- expect(builder.url).to eq 'https://kosapi.fit.cvut.cz/api/3/bar'
38
- end
39
-
40
- end
41
-
42
- end
43
-
44
- end