spec/resource_spec.rb in wordnik-0.4.5 vs spec/resource_spec.rb in wordnik-0.4.6
- old
+ new
@@ -2,11 +2,11 @@
describe Wordnik::Resource do
before(:each) do
VCR.use_cassette('words', :record => :new_episodes) do
- @response = Typhoeus::Request.get("http://api.wordnik.com/v4/word.json")
+ @response = Typhoeus::Request.get("http://beta.wordnik.com/v4/word.json")
end
@default_params = {
:name => "word",
:raw_data => JSON.parse(@response.body)
@@ -20,12 +20,141 @@
it "successfully initializes" do
@resource.name.should == "word"
end
it "sets endpoints" do
- @resource.endpoints.size.should == 10
+ @resource.endpoints.size.should >= 10
@resource.endpoints.first.class.should == Wordnik::Endpoint
end
+
+ it "defines a method for each operation nickname" do
+ @resource.public_methods.should include(:get_word)
+ @resource.public_methods.should include(:get_definitions)
+ @resource.public_methods.should include(:contextual_lookup_post)
+ @resource.public_methods.should_not include(:get_busy)
+ end
end
+
+ describe "auto-generated methods" do
+
+ before(:each) do
+ configure_wordnik
+ Wordnik.authenticate
+ end
+ it "builds requests but doesn't run them if :request_only is passed" do
+ @request = Wordnik.word.get_word('dynamo', :request_only => true)
+ @request.class.should == Wordnik::Request
+ end
+
+ it "runs requests and returns their body if :request_only is absent" do
+ @response_body = Wordnik.word.get_word('dynamo')
+ @response_body.class.should == Hash
+ @response_body.keys.sort.should == %w(canonicalForm word)
+ end
+
+ it "allows the same auto-generated method to be called with different parameters" do
+ request1 = Wordnik.word_list.get_word_list_by_id('dog', :request_only => true)
+ request2 = Wordnik.word_list.get_word_list_by_id('cat', :request_only => true)
+ request1.path.should_not == request2.path
+ end
+
+ context "argument handling" do
+
+ before(:each) do
+ @request = Wordnik.word.get_examples('dynamo', :skip => 2, :limit => 10, :request_only => true)
+ end
+
+ it "injects required arguments into the path" do
+ @request.path.should == "/word/dynamo/examples"
+ end
+
+ it "passes optional key-value arguments to the query string" do
+ @request.query_string.should == "?limit=10&skip=2"
+ end
+
+ it "puts key-value arguments in the request body instead of the query params for POSTs and PUTs" do
+ body = {
+ :name => "Wordnik Ruby Test List #{RAND}",
+ :description => 'This is created by the test suite.',
+ :type => 'PUBLIC',
+ :user_id => Wordnik.configuration.user_id,
+ :request_only => true
+ }
+ @request = Wordnik.word_lists.create_word_list(body)
+ @request.body.should have_key(:name)
+ @request.body.should have_key(:description)
+ @request.body.should have_key(:type)
+ @request.body.should have_key(:userId)
+ end
+
+ end
+
+ context "response transmogrification" do
+
+ it "converts definitions response into an array of definition objects" # do
+ # defs = Wordnik.word.get_definitions('boogaloo')
+ # defs.should be_an(Array)
+ # defs.first.should be_a(Wordnik::Definition)
+ # end
+
+ end
+
+ end
+
+ context "wordlists" do
+
+ before do
+ configure_wordnik
+ Wordnik.authenticate
+ @permalink = "wordnik-ruby-test-list-#{RAND}"
+ end
+
+ it "creates a wordlist" do
+ body = {
+ :name => "Wordnik Ruby Test List #{RAND}",
+ :description => 'This is created by the test suite.',
+ :type => 'PUBLIC',
+ :user_id => Wordnik.configuration.user_id,
+ :request_only => true
+ }
+ request = Wordnik.word_lists.create_word_list(body)
+ response = request.response
+ response.body.should be_a_kind_of(Hash)
+ response.body.should have_key('permalink')
+ response.body['permalink'].should == @permalink
+ end
+
+ it "finds the new wordlist (method 1, using the wordList resource)" do
+ list = Wordnik.word_list.get_word_list_by_id(@permalink)
+ list.should have_key('permalink')
+ list['permalink'].should == @permalink
+ end
+
+ it "finds the new wordlist (method 2, among user's wordlists)" do
+ lists = Wordnik.account.get_word_lists_for_current_user
+ permalinks = lists.map { |list| list['permalink'] }
+ permalinks.should include(@permalink)
+ end
+
+ it "adds words to it" #do
+ # body = [
+ # {:word => 'foo'},
+ # {:word => 'bar'},
+ # {:word => 'metasyntactic'},
+ # ]
+ # request = Wordnik.word_list.post_words(@permalink, body)
+ # # raise request.response.inspect
+ #
+ # list = Wordnik.word_list.get(@permalink)
+ # # raise list.inspect
+ # end
+
+ it "updates words"
+
+ it "get all the words"
+
+ it "deletes a wordlist"
+
+ end
end
\ No newline at end of file