peterosullivan-highrise 3.0.2
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.
- data/.gitignore +2 -0
- data/.travis.yml +9 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +46 -0
- data/MIT-LICENSE +20 -0
- data/README.md +89 -0
- data/Rakefile +14 -0
- data/autotest/discover.rb +1 -0
- data/examples/config_initializers_highrise.rb +4 -0
- data/examples/extending.rb +31 -0
- data/examples/sample.rb +9 -0
- data/highrise.gemspec +33 -0
- data/lib/highrise/account.rb +7 -0
- data/lib/highrise/base.rb +25 -0
- data/lib/highrise/comment.rb +3 -0
- data/lib/highrise/company.rb +15 -0
- data/lib/highrise/deal.rb +8 -0
- data/lib/highrise/deal_category.rb +3 -0
- data/lib/highrise/email.rb +9 -0
- data/lib/highrise/group.rb +3 -0
- data/lib/highrise/kase.rb +19 -0
- data/lib/highrise/membership.rb +3 -0
- data/lib/highrise/note.rb +9 -0
- data/lib/highrise/pagination.rb +72 -0
- data/lib/highrise/party.rb +11 -0
- data/lib/highrise/person.rb +45 -0
- data/lib/highrise/recording.rb +5 -0
- data/lib/highrise/rfc822.rb +30 -0
- data/lib/highrise/searchable.rb +23 -0
- data/lib/highrise/subject.rb +31 -0
- data/lib/highrise/tag.rb +12 -0
- data/lib/highrise/taggable.rb +20 -0
- data/lib/highrise/task.rb +11 -0
- data/lib/highrise/task_category.rb +3 -0
- data/lib/highrise/user.rb +17 -0
- data/lib/highrise/version.rb +3 -0
- data/lib/highrise.rb +22 -0
- data/spec/highrise/account_spec.rb +10 -0
- data/spec/highrise/base_spec.rb +48 -0
- data/spec/highrise/comment_spec.rb +5 -0
- data/spec/highrise/company_spec.rb +17 -0
- data/spec/highrise/deal_category_spec.rb +13 -0
- data/spec/highrise/deal_spec.rb +23 -0
- data/spec/highrise/email_spec.rb +13 -0
- data/spec/highrise/group_spec.rb +5 -0
- data/spec/highrise/kase_spec.rb +17 -0
- data/spec/highrise/membership_spec.rb +5 -0
- data/spec/highrise/note_spec.rb +14 -0
- data/spec/highrise/pagination_behavior.rb +50 -0
- data/spec/highrise/pagination_spec.rb +8 -0
- data/spec/highrise/party_spec.rb +16 -0
- data/spec/highrise/person_spec.rb +33 -0
- data/spec/highrise/recording_spec.rb +7 -0
- data/spec/highrise/searchable_behavior.rb +13 -0
- data/spec/highrise/searchable_spec.rb +8 -0
- data/spec/highrise/subject_spec.rb +34 -0
- data/spec/highrise/tag_spec.rb +18 -0
- data/spec/highrise/taggable_behavior.rb +27 -0
- data/spec/highrise/taggable_spec.rb +9 -0
- data/spec/highrise/task_category_spec.rb +13 -0
- data/spec/highrise/task_spec.rb +11 -0
- data/spec/highrise/user_spec.rb +18 -0
- data/spec/spec_helper.rb +11 -0
- metadata +182 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
module Highrise
|
2
|
+
class User < Base
|
3
|
+
def join(group)
|
4
|
+
Membership.create(:user_id => id, :group_id => group.id)
|
5
|
+
end
|
6
|
+
|
7
|
+
# Permits API-key retrieval using name and password.
|
8
|
+
# Highrise::User.site = "https://yourcompany.highrise.com"
|
9
|
+
# Highrise::User.user = "your_user_name"
|
10
|
+
# Highrise::User.password = "s3kr3t"
|
11
|
+
# Highrise::User.me.token # contains the API token for "your_user_name"
|
12
|
+
def self.me
|
13
|
+
user = User.new()
|
14
|
+
find(:one, :from => "/me.xml")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/highrise.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'highrise/base'
|
2
|
+
require 'highrise/pagination'
|
3
|
+
require 'highrise/taggable'
|
4
|
+
require 'highrise/searchable'
|
5
|
+
require 'highrise/subject'
|
6
|
+
require 'highrise/comment'
|
7
|
+
require 'highrise/company'
|
8
|
+
require 'highrise/email'
|
9
|
+
require 'highrise/group'
|
10
|
+
require 'highrise/kase'
|
11
|
+
require 'highrise/membership'
|
12
|
+
require 'highrise/note'
|
13
|
+
require 'highrise/person'
|
14
|
+
require 'highrise/task'
|
15
|
+
require 'highrise/user'
|
16
|
+
require 'highrise/tag'
|
17
|
+
require 'highrise/deal'
|
18
|
+
require 'highrise/account'
|
19
|
+
require 'highrise/deal_category'
|
20
|
+
require 'highrise/task_category'
|
21
|
+
require 'highrise/party'
|
22
|
+
require 'highrise/recording'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Account do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it ".me" do
|
7
|
+
Highrise::Account.should_receive(:find).with(:one, {:from => "/account.xml"}).and_return(subject)
|
8
|
+
Highrise::Account.me.should == subject
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Base do
|
4
|
+
it { subject.should be_a_kind_of ActiveResource::Base }
|
5
|
+
|
6
|
+
describe "dynamic finder methods" do
|
7
|
+
context "without pagination" do
|
8
|
+
before do
|
9
|
+
@deal_one = Highrise::Base.new(:id => 1, :name => "A deal")
|
10
|
+
@deal_two = Highrise::Base.new(:id => 2, :name => "A deal")
|
11
|
+
@deal_three = Highrise::Base.new(:id => 3, :name => "Another deal")
|
12
|
+
Highrise::Base.should_receive(:find).with(:all).and_return([@deal_one, @deal_two, @deal_three])
|
13
|
+
end
|
14
|
+
it ".find_by_(attribute) finds one" do
|
15
|
+
Highrise::Base.find_by_name("A deal").should == @deal_one
|
16
|
+
end
|
17
|
+
|
18
|
+
it ".find_all_by_(attribute) finds all" do
|
19
|
+
Highrise::Base.find_all_by_name("A deal").should == [@deal_one, @deal_two]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with pagination" do
|
24
|
+
before do
|
25
|
+
class PaginatedBaseClass < Highrise::Base; include Highrise::Pagination; end
|
26
|
+
@john_doe = PaginatedBaseClass.new(:id => 1, :first_name => "John")
|
27
|
+
@john_baker = PaginatedBaseClass.new(:id => 2, :first_name => "John")
|
28
|
+
@joe_smith = PaginatedBaseClass.new(:id => 3, :first_name => "Joe")
|
29
|
+
PaginatedBaseClass.should_receive(:find_all_across_pages).and_return([@john_doe, @john_baker, @joe_smith])
|
30
|
+
end
|
31
|
+
it ".find_by_(attribute) finds one" do
|
32
|
+
PaginatedBaseClass.find_by_first_name("John").should == @john_doe
|
33
|
+
end
|
34
|
+
|
35
|
+
it ".find_all_by_(attribute) finds all" do
|
36
|
+
PaginatedBaseClass.find_all_by_first_name("John").should == [@john_doe, @john_baker]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "expects arguments to the finder" do
|
41
|
+
expect { Highrise::Base.find_all_by_first_name }.to raise_error(ArgumentError)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "falls back to regular method missing" do
|
45
|
+
expect { Highrise::Base.any_other_method }.to raise_error(NoMethodError)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Company do
|
4
|
+
subject { Highrise::Company.new(:id => 1) }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
it_should_behave_like "a paginated class"
|
8
|
+
it_should_behave_like "a taggable class"
|
9
|
+
it_should_behave_like "a searchable class"
|
10
|
+
|
11
|
+
it "#people" do
|
12
|
+
Highrise::Person.should_receive(:find_all_across_pages).with(:from=>"/companies/1/people.xml").and_return("people")
|
13
|
+
subject.people.should == "people"
|
14
|
+
end
|
15
|
+
|
16
|
+
it { subject.label.should == 'Party' }
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::DealCategory do
|
4
|
+
subject { Highrise::DealCategory.new(:id => 1, :name => "Deal Category") }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
|
8
|
+
it ".find_by_name" do
|
9
|
+
deal_category = Highrise::DealCategory.new(:id => 2, :name => "Another Deal Category")
|
10
|
+
Highrise::DealCategory.should_receive(:find).with(:all).and_return([deal_category, subject])
|
11
|
+
Highrise::DealCategory.find_by_name("Deal Category").should == subject
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Deal do
|
4
|
+
subject { Highrise::Deal.new(:id => 1) }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Subject }
|
7
|
+
|
8
|
+
it ".add_note" do
|
9
|
+
Highrise::Note.should_receive(:create).with({:body=>"body", :subject_id=>1, :subject_type=>'Deal'}).and_return(mock('note'))
|
10
|
+
subject.add_note :body=>'body'
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".update_status" do
|
14
|
+
it { expect { subject.update_status("invalid") }.to raise_error(ArgumentError) }
|
15
|
+
|
16
|
+
%w[pending won lost].each do |status|
|
17
|
+
it "updates status to #{status}" do
|
18
|
+
subject.should_receive(:put).with(:status, :status => {:name => status})
|
19
|
+
subject.update_status(status)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Email do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it_should_behave_like "a paginated class"
|
7
|
+
|
8
|
+
it "#comments" do
|
9
|
+
subject.should_receive(:email_id).and_return(1)
|
10
|
+
Highrise::Comment.should_receive(:find).with(:all, {:from=>"/emails/1/comments.xml"}).and_return("comments")
|
11
|
+
subject.comments.should == "comments"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Kase do
|
4
|
+
it { should be_a_kind_of Highrise::Subject }
|
5
|
+
|
6
|
+
it "#close!" do
|
7
|
+
mocked_now = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
8
|
+
Time.should_receive(:now).and_return(mocked_now)
|
9
|
+
subject.should_receive(:update_attribute).with(:closed_at, mocked_now.utc)
|
10
|
+
subject.close!
|
11
|
+
end
|
12
|
+
|
13
|
+
it "#open!" do
|
14
|
+
subject.should_receive(:update_attribute).with(:closed_at, nil)
|
15
|
+
subject.open!
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Note do
|
4
|
+
subject { Highrise::Note.new(:id => 1) }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
|
8
|
+
it_should_behave_like "a paginated class"
|
9
|
+
|
10
|
+
it "#comments" do
|
11
|
+
Highrise::Comment.should_receive(:find).with(:all, {:from=>"/notes/1/comments.xml"}).and_return("comments")
|
12
|
+
subject.comments.should == "comments"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
shared_examples_for "a paginated class" do
|
2
|
+
it { subject.class.included_modules.should include(Highrise::Pagination) }
|
3
|
+
|
4
|
+
it ".find_all_across_pages" do
|
5
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>0}}).and_return(["things"])
|
6
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>1}}).and_return([])
|
7
|
+
subject.class.find_all_across_pages.should == ["things"]
|
8
|
+
end
|
9
|
+
|
10
|
+
it ".find_all_across_pages with zero results" do
|
11
|
+
subject.class.should_receive(:find).with(:all,{:params=>{:n=>0}}).and_return(nil)
|
12
|
+
subject.class.find_all_across_pages.should == []
|
13
|
+
end
|
14
|
+
|
15
|
+
it ".find_all_across_pages_since" do
|
16
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
17
|
+
subject.class.should_receive(:find_all_across_pages).with({:params=>{:since=>"20090114174311"}}).and_return("result")
|
18
|
+
subject.class.find_all_across_pages_since(time).should == "result"
|
19
|
+
end
|
20
|
+
|
21
|
+
it ".find_all_deletions_across_pages" do
|
22
|
+
class TestClass2 < Highrise::Base; include Highrise::Pagination; end
|
23
|
+
subject_type = subject.class.to_s.split('::').last
|
24
|
+
deleted_resource_1 = subject.class.new(:id => 12, :type => subject_type)
|
25
|
+
deleted_resource_2 = TestClass2.new(:id => 34, :type => 'TestClass2')
|
26
|
+
deleted_resource_3 = subject.class.new(:id => 45, :type => subject_type)
|
27
|
+
|
28
|
+
subject.class.should_receive(:find).with(:all,{:from => '/deletions.xml', :params=>{:n=>1}}).and_return([deleted_resource_1, deleted_resource_2, deleted_resource_3])
|
29
|
+
subject.class.should_receive(:find).with(:all,{:from => '/deletions.xml', :params=>{:n=>2}}).and_return([])
|
30
|
+
subject.class.find_all_deletions_across_pages.should == [deleted_resource_1, deleted_resource_3]
|
31
|
+
end
|
32
|
+
|
33
|
+
it ".find_all_deletions_across_pages with zero results" do
|
34
|
+
subject.class.should_receive(:find).with(:all,{:from => '/deletions.xml', :params=>{:n=>1}}).and_return(nil)
|
35
|
+
subject.class.find_all_deletions_across_pages.should == []
|
36
|
+
end
|
37
|
+
|
38
|
+
it ".find_all_deletions_across_pages_since" do
|
39
|
+
class TestClass2 < Highrise::Base; include Highrise::Pagination; end
|
40
|
+
subject_type = subject.class.to_s.split('::').last
|
41
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
42
|
+
deleted_resource_1 = subject.class.new(:id => 12, :type => subject_type)
|
43
|
+
deleted_resource_2 = TestClass2.new(:id => 34, :type => 'TestClass2')
|
44
|
+
deleted_resource_3 = subject.class.new(:id => 45, :type => subject_type)
|
45
|
+
|
46
|
+
subject.class.should_receive(:find).with(:all,{:from => '/deletions.xml', :params=>{:n=>1, :since=>"20090114174311"}}).and_return([deleted_resource_1, deleted_resource_2, deleted_resource_3])
|
47
|
+
subject.class.should_receive(:find).with(:all,{:from => '/deletions.xml', :params=>{:n=>2, :since=>"20090114174311"}}).and_return([])
|
48
|
+
subject.class.find_all_deletions_across_pages_since(time).should == [deleted_resource_1, deleted_resource_3]
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Party do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it ".recently_viewed" do
|
7
|
+
Highrise::Party.should_receive(:find).with(:all, {:from => '/parties/recently_viewed.xml'})
|
8
|
+
Highrise::Party.recently_viewed
|
9
|
+
end
|
10
|
+
|
11
|
+
it ".deletions_since" do
|
12
|
+
time = Time.parse("Wed Jan 14 15:43:11 -0200 2009")
|
13
|
+
Highrise::Party.should_receive(:find).with(:all, {:from => '/parties/deletions.xml', :params=>{:since=>"20090114174311"}}).and_return("result")
|
14
|
+
Highrise::Party.deletions_since(time).should == "result"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Highrise::Person do
|
5
|
+
subject { Highrise::Person.new(:id => 1) }
|
6
|
+
|
7
|
+
it { should be_a_kind_of Highrise::Subject }
|
8
|
+
|
9
|
+
it_should_behave_like "a paginated class"
|
10
|
+
it_should_behave_like "a taggable class"
|
11
|
+
it_should_behave_like "a searchable class"
|
12
|
+
|
13
|
+
describe "#company" do
|
14
|
+
it "returns nil when it doesn't have a company" do
|
15
|
+
subject.should_receive(:company_id).and_return(nil)
|
16
|
+
subject.company.should be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "delegate to Highrise::Company when have company_id" do
|
20
|
+
subject.should_receive(:company_id).at_least(2).times.and_return(1)
|
21
|
+
Highrise::Company.should_receive(:find).with(1).and_return("company")
|
22
|
+
subject.company.should == "company"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "#name" do
|
27
|
+
subject.should_receive(:first_name).and_return("Marcos")
|
28
|
+
subject.should_receive(:last_name).and_return("Tapajós ")
|
29
|
+
subject.name.should == "Marcos Tapajós"
|
30
|
+
end
|
31
|
+
|
32
|
+
it { subject.label.should == 'Party' }
|
33
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
shared_examples_for "a searchable class" do
|
2
|
+
it { subject.class.included_modules.should include(Highrise::Searchable) }
|
3
|
+
|
4
|
+
it ".search" do
|
5
|
+
find_args = {:from => "/#{subject.class.collection_name}/search.xml", :params => {"criteria[email]" => "john.doe@example.com", "criteria[zip]" => "90210"}}
|
6
|
+
if subject.class.respond_to?(:find_all_across_pages)
|
7
|
+
subject.class.should_receive(:find_all_across_pages).with(find_args)
|
8
|
+
else
|
9
|
+
subject.class.should_receive(:find).with(:all, find_args)
|
10
|
+
end
|
11
|
+
subject.class.search(:email => "john.doe@example.com", :zip => "90210")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Subject do
|
4
|
+
subject { Highrise::Subject.new(:id => 1) }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
|
8
|
+
it "#notes" do
|
9
|
+
Highrise::Note.should_receive(:find_all_across_pages).with({:from=>"/subjects/1/notes.xml"}).and_return("notes")
|
10
|
+
subject.notes.should == "notes"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "#add_note" do
|
14
|
+
Highrise::Note.should_receive(:create).with({:body=>"body", :subject_id=>1, :subject_type=>'Subject'}).and_return(mock('note'))
|
15
|
+
subject.add_note :body=>'body'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "#add_task" do
|
19
|
+
Highrise::Task.should_receive(:create).with({:body=>"body", :subject_id=>1, :subject_type=>'Subject'}).and_return(mock('task'))
|
20
|
+
subject.add_task :body=>'body'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "#emails" do
|
24
|
+
Highrise::Email.should_receive(:find_all_across_pages).with({:from=>"/subjects/1/emails.xml"}).and_return("emails")
|
25
|
+
subject.emails.should == "emails"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "#upcoming_tasks" do
|
29
|
+
Highrise::Task.should_receive(:find).with(:all, {:from=>"/subjects/1/tasks.xml"}).and_return("tasks")
|
30
|
+
subject.upcoming_tasks.should == "tasks"
|
31
|
+
end
|
32
|
+
|
33
|
+
it { subject.label.should == "Subject" }
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Tag do
|
4
|
+
subject { Highrise::Tag.new(:id => 1, :name => "Name") }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
|
8
|
+
it "supports equality" do
|
9
|
+
tag = Highrise::Tag.new(:id => 1, :name => "Name")
|
10
|
+
subject.should == tag
|
11
|
+
end
|
12
|
+
|
13
|
+
it ".find_by_name" do
|
14
|
+
tag = Highrise::Tag.new(:id => 2, :name => "Next")
|
15
|
+
Highrise::Tag.should_receive(:find).with(:all).and_return([tag, subject])
|
16
|
+
Highrise::Tag.find_by_name("Name").should == subject
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
shared_examples_for "a taggable class" do
|
2
|
+
before(:each) do
|
3
|
+
(@tags = []).tap do
|
4
|
+
@tags << {'id' => "414578", 'name' => "cliente"}
|
5
|
+
@tags << {'id' => "414580", 'name' => "ged"}
|
6
|
+
@tags << {'id' => "414579", 'name' => "iepc"}
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it { subject.class.included_modules.should include(Highrise::Taggable) }
|
11
|
+
|
12
|
+
it "#tags" do
|
13
|
+
subject.should_receive(:get).with(:tags).and_return(@tags)
|
14
|
+
subject.tags.should == @tags
|
15
|
+
end
|
16
|
+
|
17
|
+
it "#tag!(tag_name)" do
|
18
|
+
subject.should_receive(:post).with(:tags, :name => "client" ).and_return(true)
|
19
|
+
subject.tag!("client").should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "#untag!(tag_name)" do
|
23
|
+
subject.should_receive(:get).with(:tags).and_return(@tags)
|
24
|
+
subject.should_receive(:delete).with("tags/414578").and_return(true)
|
25
|
+
subject.untag!("cliente").should be_true
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::TaskCategory do
|
4
|
+
subject { Highrise::TaskCategory.new(:id => 1, :name => "Task Category") }
|
5
|
+
|
6
|
+
it { should be_a_kind_of Highrise::Base }
|
7
|
+
|
8
|
+
it ".find_by_name" do
|
9
|
+
task_category = Highrise::TaskCategory.new(:id => 2, :name => "Another Task Category")
|
10
|
+
Highrise::TaskCategory.should_receive(:find).with(:all).and_return([task_category, subject])
|
11
|
+
Highrise::TaskCategory.find_by_name("Task Category").should == subject
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::Task do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it "#complete!" do
|
7
|
+
subject.should_receive(:load_attributes_from_response).with("post")
|
8
|
+
subject.should_receive(:post).with(:complete).and_return("post")
|
9
|
+
subject.complete!
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Highrise::User do
|
4
|
+
it { should be_a_kind_of Highrise::Base }
|
5
|
+
|
6
|
+
it ".me" do
|
7
|
+
Highrise::User.should_receive(:find).with(:one, {:from => "/me.xml"}).and_return(subject)
|
8
|
+
Highrise::User.me.should == subject
|
9
|
+
end
|
10
|
+
|
11
|
+
it "#join" do
|
12
|
+
group_mock = mock("group")
|
13
|
+
group_mock.should_receive(:id).and_return(2)
|
14
|
+
subject.should_receive(:id).and_return(1)
|
15
|
+
Highrise::Membership.should_receive(:create).with({:user_id=>1, :group_id=>2})
|
16
|
+
subject.join(group_mock)
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '/../lib/highrise')
|
5
|
+
|
6
|
+
Highrise::Base.user = ENV['HIGHRISE_USER'] || 'x'
|
7
|
+
Highrise::Base.site = ENV['HIGHRISE_SITE'] || 'https://www.example.com'
|
8
|
+
|
9
|
+
require 'highrise/pagination_behavior'
|
10
|
+
require 'highrise/searchable_behavior'
|
11
|
+
require 'highrise/taggable_behavior'
|