freelancer 0.1.0

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.
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