From 2f15c696fa9d1dfbe3c1a8cd8284619b2c5bec5e Mon Sep 17 00:00:00 2001 From: Damien White Date: Wed, 24 Aug 2011 23:42:05 -0400 Subject: [PATCH] - Fixed a bug where if you had a WCF service with lowercase entities (reported by Klaus Rohe) - Added a rake task for running RSpec and Cucumber tests. --- .rspec | 1 + Rakefile | 15 +++++++++++++++ lib/ruby_odata/class_builder.rb | 2 +- ruby_odata.gemspec | 11 +++++------ spec/class_builder_spec.rb | 13 +++++++++++++ spec/fixtures/edmx_lowercase.xml | 20 ++++++++++++++++++++ spec/service_spec.rb | 27 +++++++++++++++++++++++++++ 7 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 .rspec create mode 100644 spec/class_builder_spec.rb create mode 100644 spec/fixtures/edmx_lowercase.xml diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..5052887 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color \ No newline at end of file diff --git a/Rakefile b/Rakefile index af8736b..b7d12d2 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,7 @@ require 'rake/rdoctask' require 'bundler' +require 'rspec/core/rake_task' +require 'cucumber/rake/task' Rake::RDocTask.new do |rd| rd.main = "README.rdoc" @@ -7,4 +9,17 @@ Rake::RDocTask.new do |rd| rd.rdoc_dir = 'doc' end +desc "Run specs" +RSpec::Core::RakeTask.new do |t| + t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default. + # Put spec opts in a file named .rspec in root +end + +desc "Run features" +Cucumber::Rake::Task.new(:features) do |t| + t.cucumber_opts = "features --format progress" +end + + Bundler::GemHelper.install_tasks +task :default => [:spec, :features] \ No newline at end of file diff --git a/lib/ruby_odata/class_builder.rb b/lib/ruby_odata/class_builder.rb index 3dde49e..18f369c 100644 --- a/lib/ruby_odata/class_builder.rb +++ b/lib/ruby_odata/class_builder.rb @@ -8,7 +8,7 @@ class ClassBuilder # - methods: The accessor methods to add to the class # - nav_props: The accessor methods to add for navigation properties def initialize(klass_name, methods, nav_props) - @klass_name = klass_name + @klass_name = klass_name.camelcase @methods = methods @nav_props = nav_props end diff --git a/ruby_odata.gemspec b/ruby_odata.gemspec index 3993a5e..7fec482 100644 --- a/ruby_odata.gemspec +++ b/ruby_odata.gemspec @@ -18,12 +18,11 @@ Gem::Specification.new do |s| s.add_dependency('rest-client', '>= 1.5.1') s.add_dependency('nokogiri', '>= 1.4.2') - s.add_development_dependency('rspec') - s.add_development_dependency('cucumber') - s.add_development_dependency('sham') - s.add_development_dependency('faker') - s.add_development_dependency('machinist') - s.add_development_dependency('webmock') + s.add_development_dependency('rspec', '~> 2.5.0') + s.add_development_dependency('cucumber', '~> 0.10.2') + s.add_development_dependency('faker', '~> 0.9.5') + s.add_development_dependency('machinist', '~> 1.0.6') + s.add_development_dependency('webmock', '~> 1.6.2') s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") diff --git a/spec/class_builder_spec.rb b/spec/class_builder_spec.rb new file mode 100644 index 0000000..dcbdfec --- /dev/null +++ b/spec/class_builder_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' + +module OData + describe ClassBuilder do + describe "#initialize" do + it "handles lowercase entities" do + klass = ClassBuilder.new 'product', [], [] + result = klass.build + result.should == Product + end + end + end +end \ No newline at end of file diff --git a/spec/fixtures/edmx_lowercase.xml b/spec/fixtures/edmx_lowercase.xml new file mode 100644 index 0000000..04d7b93 --- /dev/null +++ b/spec/fixtures/edmx_lowercase.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spec/service_spec.rb b/spec/service_spec.rb index ff4001f..46be980 100644 --- a/spec/service_spec.rb +++ b/spec/service_spec.rb @@ -11,6 +11,33 @@ module OData svc = OData::Service.new "http://test.com/test.svc/" end + it "doesn't error with lowercase entities" do + # Required for the build_classes method + stub_request(:get, "http://test.com/test.svc/$metadata"). + with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate'}). + to_return(:status => 200, :body => File.new(File.expand_path("../fixtures/edmx_lowercase.xml", __FILE__)), :headers => {}) + + lambda { OData::Service.new "http://test.com/test.svc" }.should_not raise_error + end + end + + describe "lowercase collections" do + before(:each) do + # Required for the build_classes method + stub_request(:get, "http://test.com/test.svc/$metadata"). + with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate'}). + to_return(:status => 200, :body => File.new(File.expand_path("../fixtures/edmx_lowercase.xml", __FILE__)), :headers => {}) + end + + it "should respond_to a lowercase collection" do + svc = OData::Service.new "http://test.com/test.svc" + svc.respond_to?('acronyms').should be_true + end + + it "should allow a lowercase collections to be queried" do + svc = OData::Service.new "http://test.com/test.svc" + lambda { svc.send('acronyms') }.should_not raise_error + end end end end \ No newline at end of file