diff --git a/lib/kosapi_client/resource.rb b/lib/kosapi_client/resource.rb index 6f395de..786299c 100644 --- a/lib/kosapi_client/resource.rb +++ b/lib/kosapi_client/resource.rb @@ -4,6 +4,7 @@ require 'kosapi_client/resource/exams_builder' require 'kosapi_client/resource/course_events_builder' require 'kosapi_client/resource/teachers_builder' +require 'kosapi_client/resource/divisions_builder' module KOSapiClient module Resource diff --git a/lib/kosapi_client/resource/divisions_builder.rb b/lib/kosapi_client/resource/divisions_builder.rb new file mode 100644 index 0000000..59e3e17 --- /dev/null +++ b/lib/kosapi_client/resource/divisions_builder.rb @@ -0,0 +1,24 @@ +module KOSapiClient + module Resource + class DivisionsBuilder < RequestBuilder + + def courses + raise 'Call #find({division_id}) before asking for courses' unless id_set? + url_builder.set_path(id, 'courses') + self + end + + def subdivisions + raise 'Call #find({division_id}) before asking for subdivisions' unless id_set? + url_builder.set_path(id, 'subdivisions') + self + end + + def teachers + raise 'Call #find({division_id}) before asking for teachers' unless id_set? + url_builder.set_path(id, 'teachers') + self + end + end + end +end diff --git a/spec/kosapi_client/resource/divisions_builder_spec.rb b/spec/kosapi_client/resource/divisions_builder_spec.rb new file mode 100644 index 0000000..d75c079 --- /dev/null +++ b/spec/kosapi_client/resource/divisions_builder_spec.rb @@ -0,0 +1,66 @@ +require 'spec_helper' + +describe KOSapiClient::Resource::DivisionsBuilder do + + let(:url_builder) { instance_double(KOSapiClient::URLBuilder, url: 'http://example.com') } + let(:response) { double(foo: :bar) } + let(:http_client) { double(send_request: response) } + subject(:builder) { KOSapiClient::Resource::DivisionsBuilder.new('http://example.com', http_client, url_builder) } + + describe '#courses' do + + before { allow(url_builder).to receive(:set_path) } + + it 'throws error when division id is not set' do + expect { builder.courses }.to raise_error(RuntimeError) + end + + it 'return self' do + builder.find(69) + expect(builder.courses).to eq builder + end + + it 'adds courses to URL' do + expect(url_builder).to receive(:set_path).with(69, 'courses') + builder.find(69).courses + end + end + + describe '#subdivisions' do + + before { allow(url_builder).to receive(:set_path) } + + it 'throws error when division id is not set' do + expect { builder.subdivisions }.to raise_error(RuntimeError) + end + + it 'return self' do + builder.find(69) + expect(builder.subdivisions).to eq builder + end + + it 'adds subdivisions to URL' do + expect(url_builder).to receive(:set_path).with(69, 'subdivisions') + builder.find(69).subdivisions + end + end + + describe '#teachers' do + + before { allow(url_builder).to receive(:set_path) } + + it 'throws error when division id is not set' do + expect { builder.teachers }.to raise_error(RuntimeError) + end + + it 'return self' do + builder.find(69) + expect(builder.teachers).to eq builder + end + + it 'adds teachers to URL' do + expect(url_builder).to receive(:set_path).with(69, 'teachers') + builder.find(69).teachers + end + end +end