sugarcrm 0.9.10 → 0.9.11
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/LICENSE +1 -1
- data/README.rdoc +38 -6
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/sugarcrm +26 -0
- data/lib/sugarcrm.rb +2 -2
- data/lib/sugarcrm/associations/association.rb +11 -8
- data/lib/sugarcrm/associations/association_collection.rb +1 -1
- data/lib/sugarcrm/associations/association_methods.rb +1 -1
- data/lib/sugarcrm/attributes/attribute_methods.rb +7 -2
- data/lib/sugarcrm/attributes/attribute_typecast.rb +2 -2
- data/lib/sugarcrm/base.rb +37 -236
- data/lib/sugarcrm/connection/api/get_available_modules.rb +2 -2
- data/lib/sugarcrm/connection/api/get_document_revision.rb +2 -2
- data/lib/sugarcrm/connection/api/get_entries.rb +2 -2
- data/lib/sugarcrm/connection/api/get_entries_count.rb +1 -1
- data/lib/sugarcrm/connection/api/get_entry.rb +2 -2
- data/lib/sugarcrm/connection/api/get_entry_list.rb +2 -2
- data/lib/sugarcrm/connection/api/get_module_fields.rb +2 -2
- data/lib/sugarcrm/connection/api/get_note_attachment.rb +1 -1
- data/lib/sugarcrm/connection/api/get_relationships.rb +2 -2
- data/lib/sugarcrm/connection/api/get_report_entries.rb +1 -1
- data/lib/sugarcrm/connection/api/get_server_info.rb +1 -1
- data/lib/sugarcrm/connection/api/get_user_id.rb +1 -1
- data/lib/sugarcrm/connection/api/get_user_team_id.rb +1 -1
- data/lib/sugarcrm/connection/api/logout.rb +1 -1
- data/lib/sugarcrm/connection/api/seamless_login.rb +1 -1
- data/lib/sugarcrm/connection/api/search_by_module.rb +1 -1
- data/lib/sugarcrm/connection/api/set_campaign_merge.rb +1 -1
- data/lib/sugarcrm/connection/api/set_document_revision.rb +1 -1
- data/lib/sugarcrm/connection/api/set_entries.rb +1 -1
- data/lib/sugarcrm/connection/api/set_entry.rb +1 -1
- data/lib/sugarcrm/connection/api/set_note_attachment.rb +1 -1
- data/lib/sugarcrm/connection/api/set_relationship.rb +1 -1
- data/lib/sugarcrm/connection/api/set_relationships.rb +1 -1
- data/lib/sugarcrm/connection/connection.rb +5 -10
- data/lib/sugarcrm/connection/helper.rb +3 -2
- data/lib/sugarcrm/connection/response.rb +8 -6
- data/lib/sugarcrm/exceptions.rb +3 -0
- data/lib/sugarcrm/finders.rb +2 -0
- data/lib/sugarcrm/{dynamic_finder_match.rb → finders/dynamic_finder_match.rb} +0 -0
- data/lib/sugarcrm/finders/finder_methods.rb +236 -0
- data/lib/sugarcrm/module.rb +35 -11
- data/lib/sugarcrm/module_methods.rb +68 -23
- data/lib/sugarcrm/session.rb +179 -0
- data/test/connection/test_get_available_modules.rb +1 -4
- data/test/connection/test_get_entries.rb +2 -8
- data/test/connection/test_get_entry.rb +1 -2
- data/test/connection/test_get_entry_list.rb +6 -12
- data/test/connection/test_get_module_fields.rb +1 -4
- data/test/connection/test_get_relationships.rb +1 -4
- data/test/connection/test_get_server_info.rb +1 -4
- data/test/connection/test_get_user_id.rb +1 -4
- data/test/connection/test_get_user_team_id.rb +1 -4
- data/test/connection/test_login.rb +3 -5
- data/test/connection/test_logout.rb +1 -4
- data/test/connection/test_set_note_attachment.rb +1 -2
- data/test/connection/test_set_relationship.rb +1 -2
- data/test/helper.rb +6 -8
- data/test/test_association_collection.rb +1 -2
- data/test/test_associations.rb +18 -1
- data/test/test_connection.rb +2 -6
- data/test/test_module.rb +34 -6
- data/test/test_response.rb +2 -3
- data/test/test_session.rb +109 -0
- data/test/test_sugarcrm.rb +58 -7
- metadata +14 -11
- data/lib/sugarcrm/environment.rb +0 -63
- data/test/test_environment.rb +0 -45
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestModuleFields <
|
3
|
+
class TestModuleFields < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:debug => false, :register_modules => false})
|
7
|
-
end
|
8
5
|
should "return a hash of module fields when #get_module_fields" do
|
9
6
|
fields = SugarCRM.connection.get_module_fields("Users")
|
10
7
|
assert_instance_of ActiveSupport::HashWithIndifferentAccess, fields
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestGetRelationships <
|
3
|
+
class TestGetRelationships < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false, :debug => false})
|
7
|
-
end
|
8
5
|
should "return a list of email_addresses when sent #get_relationship and a user_id" do
|
9
6
|
email_addresses = SugarCRM.connection.get_relationships(
|
10
7
|
"Users",1,"email_addresses"
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestGetServerInfo <
|
3
|
+
class TestGetServerInfo < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false})
|
7
|
-
end
|
8
5
|
should "get server info" do
|
9
6
|
assert_instance_of String, SugarCRM.connection.get_server_info["version"]
|
10
7
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestGetUserID <
|
3
|
+
class TestGetUserID < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false})
|
7
|
-
end
|
8
5
|
should "get the ID of the logged in user" do
|
9
6
|
assert true, SugarCRM.connection.get_user_id
|
10
7
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestGetUserTeamID <
|
3
|
+
class TestGetUserTeamID < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false})
|
7
|
-
end
|
8
5
|
should "get the team ID of the logged in user" do
|
9
6
|
assert true, SugarCRM.connection.get_user_team_id
|
10
7
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestLogin <
|
3
|
+
class TestLogin < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false})
|
7
|
-
end
|
8
5
|
should "login and set session id" do
|
9
|
-
assert (SugarCRM.connection.
|
6
|
+
assert (SugarCRM.connection.session_id.class == String)
|
7
|
+
assert_equal SugarCRM.connection.session.id, SugarCRM.connection.session_id
|
10
8
|
end
|
11
9
|
end
|
12
10
|
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestLogout <
|
3
|
+
class TestLogout < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
|
-
setup do
|
6
|
-
SugarCRM::Connection.new(URL, USER, PASS, {:register_modules => false})
|
7
|
-
end
|
8
5
|
should "logout and not be able to login with the old session id" do
|
9
6
|
assert (SugarCRM.connection.logout.class == Hash)
|
10
7
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestSetNoteAttachment <
|
3
|
+
class TestSetNoteAttachment < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
5
|
should "Add an attachment to a Note" do
|
6
|
-
SugarCRM.connect(URL, USER, PASS, {:debug => false})
|
7
6
|
n = SugarCRM::Note.new
|
8
7
|
n.name = "A Test Note"
|
9
8
|
assert n.save
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestSetRelationship <
|
3
|
+
class TestSetRelationship < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM.connection" do
|
5
5
|
should "add and remove a relationship when #set_relationship" do
|
6
|
-
SugarCRM.connect(URL, USER, PASS, {:debug => false})
|
7
6
|
meeting = SugarCRM::Meeting.new
|
8
7
|
meeting.date_start = DateTime.now
|
9
8
|
meeting.duration_hours = 0.5
|
data/test/helper.rb
CHANGED
@@ -6,13 +6,11 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
7
|
require 'sugarcrm'
|
8
8
|
|
9
|
-
|
10
|
-
# Replace these with your test instance
|
11
|
-
URL = "http://localhost:8080/sugarcrm"
|
12
|
-
USER = "admin"
|
13
|
-
PASS = 'letmein'
|
9
|
+
CONFIG_PATH = File.join(File.dirname(__FILE__),'config.yaml')
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
class ActiveSupport::TestCase
|
12
|
+
# put your credentials into a YAML file in the test directory
|
13
|
+
# the format should be identical to the config_test.yaml found in the same directory
|
14
|
+
raise "test/config.yaml file not found. See README for instructions on setting up a testing environment" unless File.exists? CONFIG_PATH
|
15
|
+
SugarCRM::Session.new_from_file(CONFIG_PATH)
|
18
16
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestAssociationCollection <
|
3
|
+
class TestAssociationCollection < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::AssociationCollection instance" do
|
5
5
|
should "create a new instance when #new" do
|
6
|
-
SugarCRM.connect!(URL, USER, PASS)
|
7
6
|
u = SugarCRM::User.find("seed_sarah_id")
|
8
7
|
ac = SugarCRM::AssociationCollection.new(u,:email_addresses)
|
9
8
|
assert_instance_of SugarCRM::AssociationCollection, ac
|
data/test/test_associations.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestAssociations <
|
3
|
+
class TestAssociations < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::Associations class" do
|
5
5
|
should "Return an array of Association objects when self#register(SugarCRM::User.new)" do
|
6
6
|
associations = SugarCRM::Associations.register(SugarCRM::User.new)
|
@@ -8,6 +8,23 @@ class TestAssociations < Test::Unit::TestCase
|
|
8
8
|
assert associations.proxy_methods.include? "email_addresses"
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
context "A SugarCRM::Association class" do
|
13
|
+
should "compute relationship cardinality correctly" do
|
14
|
+
c = SugarCRM::Case.first
|
15
|
+
link_fields_hash = c.associations.classify{|i| i.link_field}
|
16
|
+
# TODO: test one_to_one cardinality by creating custom module with custom relationship
|
17
|
+
# (no "official" one-to-one relationship exists in Sugar out of the box)
|
18
|
+
assert_equal :one_to_many, link_fields_hash['calls'].first.cardinality
|
19
|
+
assert_equal :many_to_one, link_fields_hash['accounts'].first.cardinality
|
20
|
+
assert_equal :many_to_many, link_fields_hash['contacts'].first.cardinality
|
21
|
+
end
|
22
|
+
should "respond to #pretty_print" do
|
23
|
+
a = SugarCRM::Case.first.associations.first
|
24
|
+
assert_respond_to a, :pretty_print
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
11
28
|
context "A SugarCRM::Base instance" do
|
12
29
|
should "return an email address when sent #email_addresses" do
|
13
30
|
u = SugarCRM::User.find("seed_sarah_id")
|
data/test/test_connection.rb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestConnection <
|
3
|
+
class TestConnection < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::Connection instance" do
|
5
|
-
setup do
|
6
|
-
@connection = SugarCRM::Connection.new(URL, USER, PASS)
|
7
|
-
end
|
8
5
|
should "retrieve the list of available modules" do
|
9
6
|
assert_instance_of Array, SugarCRM.modules
|
10
7
|
assert_instance_of SugarCRM::Module, SugarCRM.modules[0]
|
11
8
|
end
|
12
9
|
should "create sub-classes by module name" do
|
13
|
-
|
14
|
-
assert SugarCRM.const_defined? "User"
|
10
|
+
assert SugarCRM.session.namespace_const.const_defined? "User"
|
15
11
|
end
|
16
12
|
end
|
17
13
|
end
|
data/test/test_module.rb
CHANGED
@@ -1,12 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestModule <
|
3
|
+
class TestModule < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::Module instance" do
|
5
|
-
|
6
|
-
setup do
|
7
|
-
@connection = SugarCRM::Connection.new(URL, USER, PASS)
|
8
|
-
end
|
9
|
-
|
10
5
|
should "respond to #fields" do
|
11
6
|
assert_respond_to SugarCRM.modules[0], :fields
|
12
7
|
end
|
@@ -20,4 +15,37 @@ class TestModule < Test::Unit::TestCase
|
|
20
15
|
# assert_equal "accounts_cstm", SugarCRM::Account._module.custom_table_name
|
21
16
|
#end
|
22
17
|
end
|
18
|
+
|
19
|
+
context "SugarCRM::Module" do
|
20
|
+
should "find modules" do
|
21
|
+
assert_instance_of SugarCRM::Module, SugarCRM::Module.find("Accounts")
|
22
|
+
end
|
23
|
+
|
24
|
+
should "(de)register all modules" do
|
25
|
+
assert SugarCRM.modules.size > 0
|
26
|
+
assert SugarCRM.session.namespace_const.const_defined? 'User'
|
27
|
+
|
28
|
+
SugarCRM::Module.deregister_all(SugarCRM.session)
|
29
|
+
assert SugarCRM.modules.size == 0
|
30
|
+
assert ! (SugarCRM.session.namespace_const.const_defined? 'User')
|
31
|
+
|
32
|
+
SugarCRM::Module.register_all(SugarCRM.session)
|
33
|
+
assert SugarCRM.modules.size > 0
|
34
|
+
assert SugarCRM.session.namespace_const.const_defined? 'User'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "The SugarCRM class" do
|
39
|
+
should "return current user" do
|
40
|
+
current_user = SugarCRM.current_user
|
41
|
+
assert_instance_of SugarCRM::User, current_user
|
42
|
+
assert_equal SugarCRM.config[:username], current_user.user_name
|
43
|
+
end
|
44
|
+
|
45
|
+
should "implement reload!" do
|
46
|
+
assert_nothing_raised do
|
47
|
+
SugarCRM.reload!
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
23
51
|
end
|
data/test/test_response.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestResponse <
|
3
|
+
class TestResponse < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::Response instance" do
|
5
5
|
setup do
|
6
|
-
@connection = SugarCRM::Connection.new(URL, USER, PASS)
|
7
6
|
@json = {"entry_list"=> [{
|
8
7
|
"name_value_list"=> {
|
9
8
|
"address_city" => {"name"=>"address_city", "value"=>""},
|
@@ -16,7 +15,7 @@ class TestResponse < Test::Unit::TestCase
|
|
16
15
|
}],
|
17
16
|
"relationship_list"=>[]}
|
18
17
|
|
19
|
-
@response = SugarCRM::Response.handle(@json)
|
18
|
+
@response = SugarCRM::Response.handle(@json, SugarCRM.session)
|
20
19
|
end
|
21
20
|
|
22
21
|
should "return an instance of a SugarCRM Module" do
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestSession < ActiveSupport::TestCase
|
4
|
+
context "The SugarCRM::Session class" do
|
5
|
+
should "raise SugarCRM::MissingCredentials if at least one of url/username/password is missing" do
|
6
|
+
assert_raise(SugarCRM::MissingCredentials){ SugarCRM.connect('http://127.0.0.1/sugarcrm', nil, nil) }
|
7
|
+
end
|
8
|
+
|
9
|
+
should "assign namespaces in a way that prevents collisions" do
|
10
|
+
# Namespae0 already assigned (linked to the current connection)
|
11
|
+
One = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
12
|
+
Two = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
13
|
+
One.disconnect!
|
14
|
+
Three = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
15
|
+
assert_not_equal Two, Three # namespaces must be different
|
16
|
+
Two.disconnect!
|
17
|
+
Three.disconnect!
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "A SugarCRM::Session instance" do
|
22
|
+
should "load monkey patch extensions" do
|
23
|
+
SugarCRM.extensions_folder = File.join(File.dirname(__FILE__), 'extensions_test')
|
24
|
+
assert SugarCRM::Contact.is_extended?
|
25
|
+
assert SugarCRM::Contact.is_extended?
|
26
|
+
end
|
27
|
+
|
28
|
+
should "implement reload!" do
|
29
|
+
assert_nothing_raised do
|
30
|
+
SugarCRM.reload!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should "load config file" do
|
35
|
+
SugarCRM.load_config File.join(File.dirname(__FILE__), 'config_test.yaml')
|
36
|
+
config_contents = {
|
37
|
+
:config => {
|
38
|
+
:base_url => 'http://127.0.0.1/sugarcrm',
|
39
|
+
:username => 'admin',
|
40
|
+
:password => 'letmein'
|
41
|
+
}
|
42
|
+
}
|
43
|
+
config_contents[:config].each{|k,v| assert_equal v, SugarCRM.config[k]}
|
44
|
+
end
|
45
|
+
|
46
|
+
should "be able to disconnect, and log in to Sugar automatically if credentials are present in config file" do
|
47
|
+
assert_nothing_raised{ SugarCRM.current_user }
|
48
|
+
assert SugarCRM.sessions.size == 1
|
49
|
+
|
50
|
+
SugarCRM.disconnect!
|
51
|
+
assert SugarCRM.sessions.size == 0
|
52
|
+
|
53
|
+
assert_raise(SugarCRM::NoActiveSession){ SugarCRM.current_user }
|
54
|
+
|
55
|
+
SugarCRM::Session.new_from_file(CONFIG_PATH)
|
56
|
+
|
57
|
+
assert_nothing_raised{ SugarCRM.current_user }
|
58
|
+
assert SugarCRM.sessions.size == 1
|
59
|
+
end
|
60
|
+
|
61
|
+
should "update the login credentials on connection" do
|
62
|
+
config = YAML.load_file(CONFIG_PATH) # was loaded in helper.rb
|
63
|
+
["base_url", "username", "password"].each{|k|
|
64
|
+
assert_equal config["config"][k], SugarCRM.config[k.to_sym]
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
should "return the server version" do
|
69
|
+
assert_equal String, SugarCRM.sugar_version.class
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "The SugarCRM module" do
|
74
|
+
should "show the only the namespaces currently in use with SugarCRM.namespaces" do
|
75
|
+
assert_equal 1, SugarCRM.namespaces.size
|
76
|
+
|
77
|
+
assert_difference('SugarCRM.namespaces.size') do
|
78
|
+
OneA = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_difference('SugarCRM.namespaces.size', -1) do
|
82
|
+
OneA.disconnect!
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
should "add a used namespace on each new connection" do
|
87
|
+
assert_difference('SugarCRM.used_namespaces.size') do
|
88
|
+
OneB = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
89
|
+
end
|
90
|
+
|
91
|
+
# connection (and namespace) is reused => no used namespace should be added
|
92
|
+
assert_no_difference('SugarCRM.used_namespaces.size') do
|
93
|
+
OneB.reconnect!
|
94
|
+
end
|
95
|
+
|
96
|
+
assert_no_difference('SugarCRM.used_namespaces.size') do
|
97
|
+
OneB.disconnect!
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
should "not allow access to methods on SugarCRM if there are multiple active connections" do
|
102
|
+
OneC = SugarCRM::Session.new_from_file(CONFIG_PATH)
|
103
|
+
|
104
|
+
assert_raise(SugarCRM::MultipleSessions){ SugarCRM.current_user }
|
105
|
+
|
106
|
+
OneC.disconnect!
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/test/test_sugarcrm.rb
CHANGED
@@ -1,15 +1,10 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestSugarCRM <
|
3
|
+
class TestSugarCRM < ActiveSupport::TestCase
|
4
4
|
context "A SugarCRM::Base instance" do
|
5
5
|
|
6
|
-
should "establish a connection when SugarCRM#connect!" do
|
7
|
-
SugarCRM.connect!(URL, USER, PASS)
|
8
|
-
assert SugarCRM.connection.connected?
|
9
|
-
end
|
10
|
-
|
11
6
|
should "establish a connection when Base#establish_connection" do
|
12
|
-
|
7
|
+
# Base#establish_connection was called automatically when loading config file containing connection params
|
13
8
|
assert SugarCRM.connection.connected?
|
14
9
|
end
|
15
10
|
|
@@ -96,6 +91,40 @@ class TestSugarCRM < Test::Unit::TestCase
|
|
96
91
|
assert_instance_of SugarCRM::Account, account
|
97
92
|
end
|
98
93
|
|
94
|
+
should "support finding last instance (sorted by attribute)" do
|
95
|
+
expected_account = SugarCRM::Account.first({:order_by => 'name DESC'})
|
96
|
+
account = SugarCRM::Account.last({:order_by => 'name'})
|
97
|
+
assert_equal expected_account.id, account.id
|
98
|
+
|
99
|
+
expected_account = SugarCRM::Account.first({:order_by => 'name DESC'})
|
100
|
+
account = SugarCRM::Account.last({:order_by => 'name ASC'})
|
101
|
+
assert_equal expected_account.id, account.id
|
102
|
+
|
103
|
+
expected_account = SugarCRM::Account.first({:order_by => 'name ASC'})
|
104
|
+
account = SugarCRM::Account.last({:order_by => 'name DESC'})
|
105
|
+
assert_equal expected_account.id, account.id
|
106
|
+
end
|
107
|
+
|
108
|
+
should "support finding last instance (last created)" do
|
109
|
+
expected_account = SugarCRM::Account.first({:order_by => 'date_entered DESC'})
|
110
|
+
account = SugarCRM::Account.last
|
111
|
+
assert_equal expected_account.id, account.id
|
112
|
+
end
|
113
|
+
|
114
|
+
should "support returning only certain fields" do
|
115
|
+
user = SugarCRM::User.first(:fields => [:first_name, :department])
|
116
|
+
assert_instance_of SugarCRM::User, user
|
117
|
+
end
|
118
|
+
|
119
|
+
should "raise a RuntimeError when searching for last instance with multiple order clauses" do
|
120
|
+
assert_raise(RuntimeError){ SugarCRM::Account.last({:order_by => 'name, id DESC'}) }
|
121
|
+
end
|
122
|
+
|
123
|
+
should "raise a RuntimeError when searching for last instance if order clause has weird format" do
|
124
|
+
assert_raise(RuntimeError){ SugarCRM::Account.last({:order_by => 'name id DESC'}) }
|
125
|
+
assert_raise(RuntimeError){ SugarCRM::Account.last({:order_by => 'name DESC id'}) }
|
126
|
+
end
|
127
|
+
|
99
128
|
should "support searching based on conditions" do
|
100
129
|
accounts = SugarCRM::Account.all({
|
101
130
|
:conditions => { :billing_address_postalcode => ["> '70000'", "< '79999'" ] },
|
@@ -188,6 +217,28 @@ class TestSugarCRM < Test::Unit::TestCase
|
|
188
217
|
assert a.save!
|
189
218
|
assert a.delete
|
190
219
|
end
|
220
|
+
|
221
|
+
should "implement Base#reload!" do
|
222
|
+
a = SugarCRM::User.last
|
223
|
+
b = SugarCRM::User.last
|
224
|
+
assert_not_equal 'admin', a.user_name # make sure we don't mess up admin user
|
225
|
+
# Save the original value, so we can set it back.
|
226
|
+
orig_last_name = a.last_name.dup
|
227
|
+
diff_last_name = a.last_name + 'crm'
|
228
|
+
b.last_name = diff_last_name
|
229
|
+
b.save!
|
230
|
+
# Compare the two user objects
|
231
|
+
assert_not_equal b.last_name, a.last_name
|
232
|
+
a.reload!
|
233
|
+
assert_equal a.last_name, b.last_name
|
234
|
+
# Set the name back to what it was before
|
235
|
+
b.last_name = orig_last_name
|
236
|
+
b.save!
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
should "respond to #pretty_print" do
|
241
|
+
assert_respond_to SugarCRM::User.new, :pretty_print
|
191
242
|
end
|
192
243
|
|
193
244
|
end
|