freelancer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +14 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +56 -0
  5. data/Rakefile +34 -0
  6. data/VERSION +1 -0
  7. data/freelancer.gemspec +299 -0
  8. data/init.rb +2 -0
  9. data/lib/freelancer.rb +59 -0
  10. data/lib/freelancer/api.rb +20 -0
  11. data/lib/freelancer/api/common.rb +58 -0
  12. data/lib/freelancer/api/employer.rb +56 -0
  13. data/lib/freelancer/api/freelancer.rb +36 -0
  14. data/lib/freelancer/api/job.rb +46 -0
  15. data/lib/freelancer/api/message.rb +89 -0
  16. data/lib/freelancer/api/notification.rb +25 -0
  17. data/lib/freelancer/api/payment.rb +123 -0
  18. data/lib/freelancer/api/profile.rb +30 -0
  19. data/lib/freelancer/api/project.rb +133 -0
  20. data/lib/freelancer/api/user.rb +86 -0
  21. data/lib/freelancer/client.rb +152 -0
  22. data/lib/freelancer/extensions/hash.rb +11 -0
  23. data/lib/freelancer/models/address.rb +46 -0
  24. data/lib/freelancer/models/balance.rb +22 -0
  25. data/lib/freelancer/models/bid.rb +41 -0
  26. data/lib/freelancer/models/config_version.rb +21 -0
  27. data/lib/freelancer/models/eligibility.rb +23 -0
  28. data/lib/freelancer/models/job.rb +33 -0
  29. data/lib/freelancer/models/job_category.rb +18 -0
  30. data/lib/freelancer/models/message.rb +32 -0
  31. data/lib/freelancer/models/milestone.rb +57 -0
  32. data/lib/freelancer/models/news.rb +15 -0
  33. data/lib/freelancer/models/notification.rb +15 -0
  34. data/lib/freelancer/models/notification_status.rb +45 -0
  35. data/lib/freelancer/models/project.rb +116 -0
  36. data/lib/freelancer/models/project_budget.rb +21 -0
  37. data/lib/freelancer/models/project_fee.rb +18 -0
  38. data/lib/freelancer/models/project_options.rb +34 -0
  39. data/lib/freelancer/models/rating.rb +21 -0
  40. data/lib/freelancer/models/review.rb +87 -0
  41. data/lib/freelancer/models/transaction.rb +39 -0
  42. data/lib/freelancer/models/user.rb +225 -0
  43. data/lib/freelancer/models/withdrawal.rb +51 -0
  44. data/lib/freelancer/models/withdrawal_fee.rb +39 -0
  45. data/lib/freelancer/support/json_mapper.rb +95 -0
  46. data/test/fixtures/common/get_config_version.json +1 -0
  47. data/test/fixtures/common/get_config_version.xml +5 -0
  48. data/test/fixtures/common/get_pending_feedback.json +1 -0
  49. data/test/fixtures/common/get_pending_feedback.xml +20 -0
  50. data/test/fixtures/common/get_terms.json +1 -0
  51. data/test/fixtures/common/get_terms.xml +4 -0
  52. data/test/fixtures/common/post_feedback.json +1 -0
  53. data/test/fixtures/common/post_feedback.xml +4 -0
  54. data/test/fixtures/common/post_reply_for_feedback.json +1 -0
  55. data/test/fixtures/common/post_reply_for_feedback.xml +4 -0
  56. data/test/fixtures/common/request_cancel_project.json +1 -0
  57. data/test/fixtures/common/request_cancel_project.xml +4 -0
  58. data/test/fixtures/common/request_withdraw_feedback.json +1 -0
  59. data/test/fixtures/common/request_withdraw_feedback.xml +4 -0
  60. data/test/fixtures/employer/choose_winner_for_project.json +1 -0
  61. data/test/fixtures/employer/choose_winner_for_project.xml +3 -0
  62. data/test/fixtures/employer/delete_draft_project.json +1 -0
  63. data/test/fixtures/employer/delete_draft_project.xml +4 -0
  64. data/test/fixtures/employer/eligible_for_trial_project.json +1 -0
  65. data/test/fixtures/employer/eligible_for_trial_project.xml +5 -0
  66. data/test/fixtures/employer/get_posted_project_list.json +1 -0
  67. data/test/fixtures/employer/get_posted_project_list.xml +38 -0
  68. data/test/fixtures/employer/invite_user_for_project.json +1 -0
  69. data/test/fixtures/employer/invite_user_for_project.xml +4 -0
  70. data/test/fixtures/employer/post_new_draft_project.json +1 -0
  71. data/test/fixtures/employer/post_new_draft_project.xml +5 -0
  72. data/test/fixtures/employer/post_new_project.json +1 -0
  73. data/test/fixtures/employer/post_new_project.xml +5 -0
  74. data/test/fixtures/employer/post_new_trial_project.json +1 -0
  75. data/test/fixtures/employer/post_new_trial_project.xml +5 -0
  76. data/test/fixtures/employer/publish_draft_project.json +1 -0
  77. data/test/fixtures/employer/publish_draft_project.xml +4 -0
  78. data/test/fixtures/employer/update_project_details.json +1 -0
  79. data/test/fixtures/employer/update_project_details.xml +4 -0
  80. data/test/fixtures/employer/upgrade_trial_project.json +1 -0
  81. data/test/fixtures/employer/upgrade_trial_project.xml +4 -0
  82. data/test/fixtures/freelancer/accept_bid_won.json +1 -0
  83. data/test/fixtures/freelancer/accept_bid_won.xml +4 -0
  84. data/test/fixtures/freelancer/get_project_list_for_placed_bids.json +1 -0
  85. data/test/fixtures/freelancer/get_project_list_for_placed_bids.xml +16 -0
  86. data/test/fixtures/freelancer/place_bid_on_project.json +1 -0
  87. data/test/fixtures/freelancer/place_bid_on_project.xml +4 -0
  88. data/test/fixtures/freelancer/retract_bid_from_project.json +1 -0
  89. data/test/fixtures/freelancer/retract_bid_from_project.xml +4 -0
  90. data/test/fixtures/job/get_category_job_list.json +1 -0
  91. data/test/fixtures/job/get_category_job_list.xml +34 -0
  92. data/test/fixtures/job/get_job_list.json +1 -0
  93. data/test/fixtures/job/get_job_list.xml +17 -0
  94. data/test/fixtures/job/get_my_job_list.json +1 -0
  95. data/test/fixtures/job/get_my_job_list.xml +11 -0
  96. data/test/fixtures/message/get_inbox_messages.json +1 -0
  97. data/test/fixtures/message/get_inbox_messages.xml +22 -0
  98. data/test/fixtures/message/get_sent_messages.json +1 -0
  99. data/test/fixtures/message/get_sent_messages.xml +22 -0
  100. data/test/fixtures/message/get_unread_count.json +1 -0
  101. data/test/fixtures/message/get_unread_count.xml +4 -0
  102. data/test/fixtures/message/load_message_thread.json +1 -0
  103. data/test/fixtures/message/load_message_thread.xml +54 -0
  104. data/test/fixtures/message/mark_message_as_read.json +1 -0
  105. data/test/fixtures/message/mark_message_as_read.xml +4 -0
  106. data/test/fixtures/message/send_message.json +1 -0
  107. data/test/fixtures/message/send_message.xml +4 -0
  108. data/test/fixtures/notification/get_news.json +1 -0
  109. data/test/fixtures/notification/get_news.xml +14 -0
  110. data/test/fixtures/notification/get_notification.json +1 -0
  111. data/test/fixtures/notification/get_notification.xml +10 -0
  112. data/test/fixtures/payment/cancel_milestone.json +1 -0
  113. data/test/fixtures/payment/cancel_milestone.xml +4 -0
  114. data/test/fixtures/payment/create_milestone_payment.json +1 -0
  115. data/test/fixtures/payment/create_milestone_payment.xml +4 -0
  116. data/test/fixtures/payment/get_account_balance_status.json +1 -0
  117. data/test/fixtures/payment/get_account_balance_status.xml +12 -0
  118. data/test/fixtures/payment/get_account_milestone_list.json +1 -0
  119. data/test/fixtures/payment/get_account_milestone_list.xml +30 -0
  120. data/test/fixtures/payment/get_account_transaction_list.json +1 -0
  121. data/test/fixtures/payment/get_account_transaction_list.xml +57 -0
  122. data/test/fixtures/payment/get_account_withdrawal_list.json +1 -0
  123. data/test/fixtures/payment/get_account_withdrawal_list.xml +42 -0
  124. data/test/fixtures/payment/get_balance.json +1 -0
  125. data/test/fixtures/payment/get_balance.xml +4 -0
  126. data/test/fixtures/payment/get_project_list_for_transfer.json +1 -0
  127. data/test/fixtures/payment/get_project_list_for_transfer.xml +52 -0
  128. data/test/fixtures/payment/get_withdrawal_fees.json +1 -0
  129. data/test/fixtures/payment/get_withdrawal_fees.xml +41 -0
  130. data/test/fixtures/payment/prepare_transfer.json +1 -0
  131. data/test/fixtures/payment/prepare_transfer.xml +4 -0
  132. data/test/fixtures/payment/release_milestone.json +1 -0
  133. data/test/fixtures/payment/release_milestone.xml +4 -0
  134. data/test/fixtures/payment/request_cancel_withdrawal.json +1 -0
  135. data/test/fixtures/payment/request_cancel_withdrawal.xml +4 -0
  136. data/test/fixtures/payment/request_release_milestone.json +1 -0
  137. data/test/fixtures/payment/request_release_milestone.xml +4 -0
  138. data/test/fixtures/payment/request_withdrawal.json +1 -0
  139. data/test/fixtures/payment/request_withdrawal.xml +6 -0
  140. data/test/fixtures/payment/transfer_money.json +1 -0
  141. data/test/fixtures/payment/transfer_money.xml +4 -0
  142. data/test/fixtures/profile/get_account_details.json +1 -0
  143. data/test/fixtures/profile/get_account_details.xml +71 -0
  144. data/test/fixtures/profile/get_profile_info.json +1 -0
  145. data/test/fixtures/profile/get_profile_info.xml +53 -0
  146. data/test/fixtures/profile/set_profile_info.json +1 -0
  147. data/test/fixtures/profile/set_profile_info.xml +4 -0
  148. data/test/fixtures/project/get_bids_details.json +1 -0
  149. data/test/fixtures/project/get_bids_details.xml +19 -0
  150. data/test/fixtures/project/get_project_budget_config.json +1 -0
  151. data/test/fixtures/project/get_project_budget_config.xml +42 -0
  152. data/test/fixtures/project/get_project_details.json +1 -0
  153. data/test/fixtures/project/get_project_details.xml +78 -0
  154. data/test/fixtures/project/get_project_fees.json +1 -0
  155. data/test/fixtures/project/get_project_fees.xml +31 -0
  156. data/test/fixtures/project/get_public_messages.json +1 -0
  157. data/test/fixtures/project/get_public_messages.xml +27 -0
  158. data/test/fixtures/project/get_sent_messages.xml +22 -0
  159. data/test/fixtures/project/get_unread_count.xml +4 -0
  160. data/test/fixtures/project/load_message_thread.xml +54 -0
  161. data/test/fixtures/project/mark_message_as_read.xml +4 -0
  162. data/test/fixtures/project/post_public_message.json +1 -0
  163. data/test/fixtures/project/post_public_message.xml +4 -0
  164. data/test/fixtures/project/search_projects.json +1 -0
  165. data/test/fixtures/project/search_projects.xml +37 -0
  166. data/test/fixtures/project/send_message.xml +4 -0
  167. data/test/fixtures/user/get_user_details.json +1 -0
  168. data/test/fixtures/user/get_user_details.xml +32 -0
  169. data/test/fixtures/user/get_user_feedback.json +1 -0
  170. data/test/fixtures/user/get_user_feedback.xml +58 -0
  171. data/test/fixtures/user/get_users_by_search.json +1 -0
  172. data/test/fixtures/user/get_users_by_search.xml +26 -0
  173. data/test/freelancer/api/common_api_test.rb +82 -0
  174. data/test/freelancer/api/employer_api_test.rb +105 -0
  175. data/test/freelancer/api/freelancer_api_test.rb +72 -0
  176. data/test/freelancer/api/job_api_test.rb +76 -0
  177. data/test/freelancer/api/message_api_test.rb +144 -0
  178. data/test/freelancer/api/notification_api_test.rb +56 -0
  179. data/test/freelancer/api/payment_api_test.rb +225 -0
  180. data/test/freelancer/api/profile_api_test.rb +54 -0
  181. data/test/freelancer/api/project_api_test.rb +229 -0
  182. data/test/freelancer/api/user_api_test.rb +153 -0
  183. data/test/freelancer/client_test.rb +5 -0
  184. data/test/freelancer/models/balance_test.rb +24 -0
  185. data/test/freelancer/models/bid_test.rb +25 -0
  186. data/test/freelancer/models/config_version.rb +14 -0
  187. data/test/freelancer/models/eligibility_test.rb +14 -0
  188. data/test/freelancer/models/job_category_test.rb +16 -0
  189. data/test/freelancer/models/job_test.rb +19 -0
  190. data/test/freelancer/models/message_test.rb +42 -0
  191. data/test/freelancer/models/milestone_test.rb +21 -0
  192. data/test/freelancer/models/news_test.rb +15 -0
  193. data/test/freelancer/models/notification_test.rb +15 -0
  194. data/test/freelancer/models/project_budget_test.rb +18 -0
  195. data/test/freelancer/models/project_fee_test.rb +17 -0
  196. data/test/freelancer/models/project_test.rb +97 -0
  197. data/test/freelancer/models/review_test.rb +36 -0
  198. data/test/freelancer/models/transaction_test.rb +29 -0
  199. data/test/freelancer/models/user_test.rb +94 -0
  200. data/test/freelancer/models/withdrawal_fee_test.rb +19 -0
  201. data/test/freelancer/models/withdrawal_test.rb +20 -0
  202. data/test/freelancer/oauth_test.rb +112 -0
  203. data/test/freelancer_test.rb +1 -0
  204. data/test/test_helper.rb +42 -0
  205. metadata +427 -0
@@ -0,0 +1,54 @@
1
+ require "test_helper"
2
+
3
+ class ProfileApiTest < Test::Unit::TestCase
4
+
5
+ context "profile api" do
6
+
7
+ setup do
8
+ @freelancer = Freelancer::Client.new("consumer_token", "consumer_secret")
9
+ consumer = OAuth::Consumer.new("consumer_token", "consumer_secret", { :site => "http://api.sandbox.freelancer.com" })
10
+ @freelancer.stubs(:consumer).returns(consumer)
11
+ @freelancer.authorize_from_access("access_token", "access_secret")
12
+ end
13
+
14
+ context "account details" do
15
+
16
+ should "be able to retrieve" do
17
+
18
+ @freelancer.expects(:api_get).with("/Profile/getAccountDetails.json")
19
+ @freelancer.account_details
20
+
21
+ end
22
+
23
+ should "parse response into a user" do
24
+
25
+ stub_api_get("/Profile/getAccountDetails.json", "profile/get_account_details.json")
26
+ account = @freelancer.account_details
27
+ account.id.should == 123456
28
+
29
+ end
30
+
31
+ end
32
+
33
+ context "profile info" do
34
+
35
+ should "be able to retrieve" do
36
+
37
+ @freelancer.expects(:api_get).with("/Profile/getProfileInfo.json", { :userid => 1 })
38
+ @freelancer.profile_info(:user_id => 1)
39
+
40
+ end
41
+
42
+ should "parse response into a user" do
43
+
44
+ stub_api_get("/Profile/getProfileInfo.json?userid=1", "profile/get_profile_info.json")
45
+ profile = @freelancer.profile_info(:user_id => 1)
46
+ profile.id.should == 123456
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,229 @@
1
+ require "test_helper"
2
+
3
+ class ProjectApiTest < Test::Unit::TestCase
4
+
5
+ context "project api" do
6
+
7
+ setup do
8
+ @freelancer = Freelancer::Client.new("consumer_token", "consumer_secret")
9
+ consumer = OAuth::Consumer.new("consumer_token", "consumer_secret", { :site => "http://api.sandbox.freelancer.com" })
10
+ @freelancer.stubs(:consumer).returns(consumer)
11
+ @freelancer.authorize_from_access("access_token", "access_secret")
12
+ end
13
+
14
+ context "search projects" do
15
+
16
+ should "be able to search" do
17
+
18
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", {})
19
+ @freelancer.project_search
20
+
21
+ end
22
+
23
+ should "be able to search by featured" do
24
+
25
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :isfeatured => true })
26
+ @freelancer.project_search(:featured => true)
27
+
28
+ end
29
+
30
+ should "be able to search by non-public" do
31
+
32
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :isnonpublic => true })
33
+ @freelancer.project_search(:non_public => true)
34
+
35
+ end
36
+
37
+ should "be able to search by keyword" do
38
+
39
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :searchkeyword => "test" })
40
+ @freelancer.project_search(:keyword => "test")
41
+
42
+ end
43
+
44
+ should "be able to search by one job" do
45
+
46
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :searchjobtypecsv => "Ruby" })
47
+ @freelancer.project_search(:job => "Ruby")
48
+
49
+ end
50
+
51
+ should "be able to search by several jobs" do
52
+
53
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :searchjobtypecsv => "Ruby,.NET" })
54
+ @freelancer.project_search(:job => [ "Ruby", ".NET" ])
55
+
56
+ end
57
+
58
+ should "be able to search by status" do
59
+
60
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :status => "Closed" })
61
+ @freelancer.project_search(:status => "Closed")
62
+
63
+ end
64
+
65
+ should "be able to search by minimum budget" do
66
+
67
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :budgetmin => 250 })
68
+ @freelancer.project_search(:minimum_budget => 250)
69
+
70
+ end
71
+
72
+ should "be able to search by maximum budget" do
73
+
74
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :budgetmax => 100 })
75
+ @freelancer.project_search(:maximum_budget => 100)
76
+
77
+ end
78
+
79
+ should "be able to search by full time projects" do
80
+
81
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :isfulltime => true })
82
+ @freelancer.project_search(:full_time => true)
83
+
84
+ end
85
+
86
+ should "be able to search by trial projects" do
87
+
88
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :istrial => true })
89
+ @freelancer.project_search(:trial => true)
90
+
91
+ end
92
+
93
+ should "be able to search by gold members only-projects" do
94
+
95
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :isgoldmembersonly => true })
96
+ @freelancer.project_search(:gold_members_only => true)
97
+
98
+ end
99
+
100
+ should "be able to change result count" do
101
+
102
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :count => 20 })
103
+ @freelancer.project_search(:count => 20)
104
+
105
+ end
106
+
107
+ should "be able to change result page" do
108
+
109
+ @freelancer.expects(:api_get).with("/Project/searchProjects.json", { :page => 2 })
110
+ @freelancer.project_search(:page => 2)
111
+
112
+ end
113
+
114
+ should "parse response into a collection of projects" do
115
+
116
+ stub_api_get("/Project/searchProjects.json", "project/search_projects.json")
117
+ projects = @freelancer.project_search
118
+ projects.size.should == 2
119
+ projects.first.id.should == 150
120
+
121
+ end
122
+
123
+ end
124
+
125
+ context "project fees" do
126
+
127
+ should "be able to retrieve" do
128
+
129
+ @freelancer.expects(:api_get).with("/Project/getProjectFees.json")
130
+ @freelancer.project_fees
131
+
132
+ end
133
+
134
+ should "parse response into a collection of project fees" do
135
+
136
+ stub_api_get("/Project/getProjectFees.json", "project/get_project_fees.json")
137
+ fees = @freelancer.project_fees
138
+ fees.size.should == 5
139
+ fees.first.project_type.should == "featured_create"
140
+
141
+ end
142
+
143
+ end
144
+
145
+ context "project details" do
146
+
147
+ should "be able to retrieve" do
148
+
149
+ @freelancer.expects(:api_get).with("/Project/getProjectDetails.json", { :projectid => 1 })
150
+ @freelancer.project_details(:project_id => 1)
151
+
152
+ end
153
+
154
+
155
+ should "parse response into a project model" do
156
+
157
+ stub_api_get("/Project/getProjectDetails.json", "project/get_project_details.json")
158
+ project = @freelancer.project_details
159
+ project.id.should == 280
160
+
161
+ end
162
+
163
+ end
164
+
165
+
166
+ context "bid details" do
167
+
168
+ should "be able to retrieve" do
169
+
170
+ @freelancer.expects(:api_get).with("/Project/getBidsDetails.json", { :projectid => 1 })
171
+ @freelancer.project_bids(:project_id => 1)
172
+
173
+ end
174
+
175
+ should "parse response into a collection of bids" do
176
+
177
+ stub_api_get("/Project/getBidsDetails.json", "project/get_bids_details.json")
178
+ bids = @freelancer.project_bids
179
+ bids.size.should == 1
180
+ bids.first.amount.should == 250
181
+
182
+ end
183
+
184
+ end
185
+
186
+
187
+ context "public messages" do
188
+
189
+ should "be able to retrieve" do
190
+
191
+ @freelancer.expects(:api_get).with("/Project/getPublicMessages.json", { :projectid => 1 })
192
+ @freelancer.public_messages(:project_id => 1)
193
+
194
+ end
195
+
196
+ should "parse response into a collection of messages" do
197
+
198
+ stub_api_get("/Project/getPublicMessages.json", "project/get_public_messages.json")
199
+ messages = @freelancer.public_messages
200
+ messages.size.should == 1
201
+ messages.first.text.should == "Test"
202
+
203
+ end
204
+
205
+ end
206
+
207
+ context "project budgets" do
208
+
209
+ should "be able to retrieve" do
210
+
211
+ @freelancer.expects(:api_get).with("/Project/getProjectBudgetConfig.json")
212
+ @freelancer.project_budgets
213
+
214
+ end
215
+
216
+ should "parse respones into a collection of project budgets" do
217
+
218
+ stub_api_get("/Project/getProjectBudgetConfig.json", "project/get_project_budget_config.json")
219
+ budgets = @freelancer.project_budgets
220
+ budgets.size.should == 6
221
+ budgets.first.id.should == 5
222
+
223
+ end
224
+
225
+ end
226
+
227
+ end
228
+
229
+ end
@@ -0,0 +1,153 @@
1
+ require "test_helper"
2
+
3
+ class UserApiTest < Test::Unit::TestCase
4
+
5
+ context "user api" do
6
+
7
+ setup do
8
+ @freelancer = Freelancer::Client.new("consumer_token", "consumer_secret")
9
+ consumer = OAuth::Consumer.new("consumer_token", "consumer_secret", { :site => "http://api.sandbox.freelancer.com" })
10
+ @freelancer.stubs(:consumer).returns(consumer)
11
+ @freelancer.authorize_from_access("access_token", "access_secret")
12
+ end
13
+
14
+ context "user search" do
15
+
16
+ should "be able to search" do
17
+
18
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", {})
19
+ @freelancer.user_search
20
+
21
+ end
22
+
23
+ should "be able to search by username" do
24
+
25
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :username => "test" })
26
+ @freelancer.user_search(:username => "test")
27
+
28
+ end
29
+
30
+ should "be able to search by one expertise" do
31
+
32
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :expertise_csv => "Ruby" })
33
+ @freelancer.user_search(:expertise => "Ruby")
34
+
35
+ end
36
+
37
+ should "be able to search by several expertises" do
38
+
39
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :expertise_csv => "Ruby,.NET" })
40
+ @freelancer.user_search(:expertise => [ "Ruby", ".NET" ])
41
+
42
+ end
43
+
44
+
45
+ should "be able to search by one country" do
46
+
47
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :country_csv => "Norway" })
48
+ @freelancer.user_search(:country => "Norway")
49
+
50
+ end
51
+
52
+ should "be able to search by several countries" do
53
+
54
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :country_csv => "Norway,Australia" })
55
+ @freelancer.user_search(:country => [ "Norway", "Australia" ])
56
+
57
+ end
58
+
59
+ should "be able to search by rating" do
60
+
61
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :rating => 3 })
62
+ @freelancer.user_search(:rating => 3)
63
+
64
+ end
65
+
66
+ should "be able to change result count" do
67
+
68
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :count => 10 })
69
+ @freelancer.user_search(:count => 10)
70
+
71
+ end
72
+
73
+ should "be able to change result page" do
74
+
75
+ @freelancer.expects(:api_get).with("/User/getUsersBySearch.json", { :page => 2 })
76
+ @freelancer.user_search(:page => 2)
77
+
78
+ end
79
+
80
+ should "parse response into a collection of users" do
81
+
82
+ stub_api_get("/User/getUsersBySearch.json", "user/get_users_by_search.json")
83
+ users = @freelancer.user_search
84
+ users.size.should == 1
85
+ users.first.id.should == 123456
86
+
87
+ end
88
+
89
+ end
90
+
91
+ context "user feedback" do
92
+
93
+ should "be able to list by username" do
94
+
95
+ @freelancer.expects(:api_get).with("/User/getUserFeedback.json", { :username => "test" })
96
+ @freelancer.user_feedback(:username => "test")
97
+
98
+ end
99
+
100
+ should "be able to list by user id" do
101
+
102
+ @freelancer.expects(:api_get).with("/User/getUserFeedback.json", { :userid => 1 })
103
+ @freelancer.user_feedback(:user_id => 1)
104
+
105
+ end
106
+
107
+ should "be able to list by type" do
108
+
109
+ @freelancer.expects(:api_get).with("/User/getUserFeedback.json", { :type => "P" })
110
+ @freelancer.user_feedback(:type => "P")
111
+
112
+ end
113
+
114
+ should "parse response into a collection of feedbacks" do
115
+
116
+ stub_api_get("/User/getUserFeedback.json", "user/get_user_feedback.json")
117
+ feedbacks = @freelancer.user_feedback
118
+ feedbacks.size.should == 1
119
+ feedbacks.first.project_id.should == 123
120
+
121
+ end
122
+
123
+ end
124
+
125
+ context "user details" do
126
+
127
+ should "be able to retrieve by username" do
128
+
129
+ @freelancer.expects(:api_get).with("/User/getUserDetails.json", { :username => "test" })
130
+ @freelancer.user_details(:username => "test")
131
+
132
+ end
133
+
134
+ should "be able to retrieve by user id" do
135
+
136
+ @freelancer.expects(:api_get).with("/User/getUserDetails.json", { :userid => 1 })
137
+ @freelancer.user_details(:user_id => 1)
138
+
139
+ end
140
+
141
+ should "parse response into a user model" do
142
+
143
+ stub_api_get("/User/getUserDetails.json", "user/get_user_details.json")
144
+ user = @freelancer.user_details
145
+ user.id.should == 123456
146
+
147
+ end
148
+
149
+ end
150
+
151
+ end
152
+
153
+ end
@@ -0,0 +1,5 @@
1
+ require "test_helper"
2
+
3
+ ##class ClientTest < Test::Unit::TestCase
4
+
5
+ ##end
@@ -0,0 +1,24 @@
1
+ class BalanceTest < Test::Unit::TestCase
2
+
3
+ context "balance model" do
4
+
5
+ should "create balance instance based on JSON" do
6
+
7
+ balance = Freelancer::Models::Balance.parse(fixture_file("payment/get_balance.json"), :shift => :"json-result")
8
+ balance.amount.should == 9692.55
9
+
10
+ end
11
+
12
+ should "create balance instance based on balance status JSON" do
13
+
14
+ balance = Freelancer::Models::Balance.parse(fixture_file("payment/get_account_balance_status.json"), :shift => :"json-result")
15
+ balance.amount.should == 9717.55
16
+ balance.last_transaction.id.should == 987
17
+ balance.last_transaction.user_id.should == 123456
18
+ balance.last_transaction.made_at.should == Date.parse("08/08/2010 at 1:53 EDT")
19
+ balance.last_transaction.description.should == "Transfer from test-username for project Test project (Full payment for completed project)"
20
+
21
+ end
22
+
23
+ end
24
+ end