testdroid-api-client 0.3.0 → 0.4.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 (125) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -2
  3. data/.travis.yml +8 -0
  4. data/Gemfile.lock +39 -37
  5. data/README.md +26 -41
  6. data/lib/testdroid-api-client.rb +1 -4
  7. data/lib/testdroid-api-filter-builder.rb +1 -1
  8. data/lib/testdroid_api/admin.rb +5 -5
  9. data/lib/testdroid_api/admin_device_models.rb +1 -1
  10. data/lib/testdroid_api/admin_device_problems.rb +1 -1
  11. data/lib/testdroid_api/admin_device_statuses.rb +1 -1
  12. data/lib/testdroid_api/admin_devices.rb +1 -1
  13. data/lib/testdroid_api/apikey_client.rb +31 -31
  14. data/lib/testdroid_api/client.rb +39 -47
  15. data/lib/testdroid_api/cloud_list_resource.rb +11 -15
  16. data/lib/testdroid_api/cloud_resource.rb +7 -7
  17. data/lib/testdroid_api/device_groups.rb +2 -1
  18. data/lib/testdroid_api/device_session_connections.rb +1 -1
  19. data/lib/testdroid_api/device_sessions.rb +11 -2
  20. data/lib/testdroid_api/devices.rb +1 -1
  21. data/lib/testdroid_api/files.rb +8 -47
  22. data/lib/testdroid_api/frameworks.rb +11 -0
  23. data/lib/testdroid_api/label_groups.rb +1 -1
  24. data/lib/testdroid_api/labels.rb +1 -1
  25. data/lib/testdroid_api/projects.rb +2 -7
  26. data/lib/testdroid_api/properties.rb +1 -1
  27. data/lib/testdroid_api/runs.rb +12 -3
  28. data/lib/testdroid_api/services.rb +1 -1
  29. data/lib/testdroid_api/user.rb +7 -2
  30. data/sample/BitbarSampleApp.apk +0 -0
  31. data/sample/BitbarSampleAppTest.apk +0 -0
  32. data/sample/sample.rb +22 -27
  33. data/spec/client_spec.rb +7 -7
  34. data/spec/device_groups_spec.rb +30 -17
  35. data/spec/files_spec.rb +29 -20
  36. data/spec/fixtures/apk.apk +0 -0
  37. data/spec/fixtures/cassettes/device_groups_authorize.json +1 -0
  38. data/spec/fixtures/cassettes/device_groups_create.json +1 -0
  39. data/spec/fixtures/cassettes/device_groups_delete.json +1 -0
  40. data/spec/fixtures/cassettes/device_groups_get_all.json +1 -0
  41. data/spec/fixtures/cassettes/device_groups_get_one.json +1 -0
  42. data/spec/fixtures/cassettes/files_authorize.json +1 -0
  43. data/spec/fixtures/cassettes/files_delete.json +1 -0
  44. data/spec/fixtures/cassettes/files_get_all.json +1 -0
  45. data/spec/fixtures/cassettes/files_get_one.json +1 -0
  46. data/spec/fixtures/cassettes/files_upload.json +1 -0
  47. data/spec/fixtures/cassettes/label_groups_authorize.json +1 -0
  48. data/spec/fixtures/cassettes/label_groups_create.json +1 -0
  49. data/spec/fixtures/cassettes/label_groups_delete.json +1 -0
  50. data/spec/fixtures/cassettes/label_groups_get_all.json +1 -0
  51. data/spec/fixtures/cassettes/label_groups_get_labels.json +1 -0
  52. data/spec/fixtures/cassettes/label_groups_get_one.json +1 -0
  53. data/spec/fixtures/cassettes/projects_authorize.json +1 -0
  54. data/spec/fixtures/cassettes/projects_create.json +1 -0
  55. data/spec/fixtures/cassettes/projects_delete.json +1 -0
  56. data/spec/fixtures/cassettes/projects_get_all.json +1 -0
  57. data/spec/fixtures/cassettes/projects_get_one.json +1 -0
  58. data/spec/fixtures/cassettes/runs_abort_run.json +1 -0
  59. data/spec/fixtures/cassettes/runs_authorize.json +1 -0
  60. data/spec/fixtures/cassettes/runs_get_project_runs.json +1 -0
  61. data/spec/fixtures/cassettes/runs_start_run.json +1 -0
  62. data/spec/label_groups_spec.rb +35 -42
  63. data/spec/projects_spec.rb +41 -0
  64. data/spec/runs_spec.rb +41 -0
  65. data/spec/spec_helper.rb +3 -4
  66. data/testdroid-api-client.gemspec +12 -12
  67. metadata +53 -162
  68. data/lib/testdroid_api/config.rb +0 -9
  69. data/lib/testdroid_api/device_runs.rb +0 -22
  70. data/lib/testdroid_api/file_sets.rb +0 -11
  71. data/lib/testdroid_api/parameters.rb +0 -10
  72. data/spec/device_runs_spec.rb +0 -25
  73. data/spec/file_sets_spec.rb +0 -47
  74. data/spec/fixtures/cassettes/dg_all_device_groups.json +0 -1
  75. data/spec/fixtures/cassettes/dg_device_group_4165.json +0 -1
  76. data/spec/fixtures/cassettes/dg_oauth2_auth_device_groups.json +0 -1
  77. data/spec/fixtures/cassettes/dr_all_run_171221_device_runs.json +0 -1
  78. data/spec/fixtures/cassettes/dr_device_run_33044722.json +0 -1
  79. data/spec/fixtures/cassettes/dr_oauth2_auth_device_runs.json +0 -1
  80. data/spec/fixtures/cassettes/dr_run_33044722_device_runs.json +0 -1
  81. data/spec/fixtures/cassettes/f_add_file_set.json +0 -1
  82. data/spec/fixtures/cassettes/f_android_app_file.json +0 -1
  83. data/spec/fixtures/cassettes/f_file_sets.json +0 -1
  84. data/spec/fixtures/cassettes/f_oauth2_auth_files.json +0 -1
  85. data/spec/fixtures/cassettes/f_upload_files.json +0 -1
  86. data/spec/fixtures/cassettes/fs_add_file_set.json +0 -1
  87. data/spec/fixtures/cassettes/fs_add_file_to_fileset.json +0 -1
  88. data/spec/fixtures/cassettes/fs_delete_file_set.json +0 -1
  89. data/spec/fixtures/cassettes/fs_file_sets.json +0 -1
  90. data/spec/fixtures/cassettes/fs_get_file_set.json +0 -1
  91. data/spec/fixtures/cassettes/fs_oauth2_auth_files.json +0 -1
  92. data/spec/fixtures/cassettes/fs_update_file_set.json +0 -1
  93. data/spec/fixtures/cassettes/fu_oauth2_auth_files.json +0 -1
  94. data/spec/fixtures/cassettes/lg_all_label_groups.json +0 -1
  95. data/spec/fixtures/cassettes/lg_get_resources_by_label.json +0 -1
  96. data/spec/fixtures/cassettes/lg_label_group_1058800.json +0 -1
  97. data/spec/fixtures/cassettes/lg_labels_of_group_1058800.json +0 -1
  98. data/spec/fixtures/cassettes/lg_oauth2_auth_label_groups.json +0 -1
  99. data/spec/fixtures/cassettes/p_all_projects.json +0 -1
  100. data/spec/fixtures/cassettes/p_create_project.json +0 -1
  101. data/spec/fixtures/cassettes/p_get_run_devices.json +0 -1
  102. data/spec/fixtures/cassettes/p_oauth2_auth.json +0 -1
  103. data/spec/fixtures/cassettes/p_oauth2_local.json +0 -1
  104. data/spec/fixtures/cassettes/p_project_id_33029366.json +0 -1
  105. data/spec/fixtures/cassettes/p_run_project.json +0 -1
  106. data/spec/fixtures/cassettes/pc_get_current.json +0 -1
  107. data/spec/fixtures/cassettes/pc_oauth2_auth_config.json +0 -1
  108. data/spec/fixtures/cassettes/pc_set_current_config.json +0 -1
  109. data/spec/fixtures/cassettes/pc_validate_config.json +0 -1
  110. data/spec/fixtures/cassettes/pcp_delete_params.json +0 -1
  111. data/spec/fixtures/cassettes/pcp_get_current.json +0 -1
  112. data/spec/fixtures/cassettes/pcp_oauth2_auth_config.json +0 -1
  113. data/spec/fixtures/cassettes/pcp_set_current_config.json +0 -1
  114. data/spec/fixtures/cassettes/pcp_validate_config.json +0 -1
  115. data/spec/fixtures/cassettes/r_all_project_33029366_runs.json +0 -1
  116. data/spec/fixtures/cassettes/r_delete_test_run.json +0 -1
  117. data/spec/fixtures/cassettes/r_oauth2_auth_runs.json +0 -1
  118. data/spec/fixtures/cassettes/r_run_171221.json +0 -1
  119. data/spec/fixtures/cassettes/r_run_project.json +0 -1
  120. data/spec/fixtures/cassettes/upload_files.json +0 -1
  121. data/spec/fixtures/project.json +0 -8
  122. data/spec/project_config_parameters_spec.rb +0 -44
  123. data/spec/project_config_spec.rb +0 -36
  124. data/spec/project_spec.rb +0 -56
  125. data/spec/run_spec.rb +0 -33
@@ -1,13 +1,12 @@
1
1
  module TestdroidAPI
2
2
 
3
- class Client
3
+ class Client
4
4
  attr_reader :config
5
5
  attr_accessor :logger
6
6
  attr_reader :token
7
7
 
8
8
  API_VERSION = 'api/v2'
9
- CLOUD_ENDPOINT='https://cloud.testdroid.com'
10
- ACCEPT_HEADERS={'Accept' => 'application/json'}
9
+ CLOUD_ENDPOINT = 'https://cloud.bitbar.com'
11
10
 
12
11
  def initialize(username, password, cloud_url = CLOUD_ENDPOINT, logger = nil)
13
12
  # Instance variables
@@ -21,106 +20,99 @@ class Client
21
20
  @logger.info("Logger is not defined => output to STDOUT")
22
21
  end
23
22
  end
24
- def label_groups
25
- label_groups = TestdroidAPI::LabelGroups.new( "/#{API_VERSION}/label-groups", self )
26
- label_groups.list
27
- label_groups
28
- end
29
- def devices
30
- devices = TestdroidAPI::Devices.new( "/#{API_VERSION}/devices", self )
31
- devices.list
32
- devices
33
- end
34
- def authorize
35
23
 
36
- @client = OAuth2::Client.new('testdroid-cloud-api', nil, :site => @cloud_url, :authorize_url => 'oauth/authorize',
37
- :token_url => 'oauth/token', :headers => ACCEPT_HEADERS) do |faraday|
38
- faraday.request :multipart
39
- faraday.request :url_encoded
24
+ def authorize
25
+ @client = OAuth2::Client.new(
26
+ 'testdroid-cloud-api', nil, :site => @cloud_url, :token_url => 'oauth/token') do |faraday|
27
+ faraday.request :multipart
28
+ faraday.request :url_encoded
40
29
  faraday.response :logger, @logger
41
- faraday.adapter Faraday.default_adapter
30
+ faraday.adapter Faraday.default_adapter
42
31
  end
43
32
 
44
- @token = @client.password.get_token(@username, @password, :headers => ACCEPT_HEADERS)
33
+ @token = @client.password.get_token(@username, @password)
45
34
 
46
- if (@cloud_user.nil?)
47
- @cloud_user = TestdroidAPI::User.new( "/#{API_VERSION}/me", self ).refresh
48
- @cloud_user = TestdroidAPI::User.new( "/#{API_VERSION}/users/#{@cloud_user.id}", self ).refresh
35
+ if @cloud_user.nil?
36
+ @cloud_user = TestdroidAPI::User.new("/#{API_VERSION}/me", self).refresh
37
+ @cloud_user = TestdroidAPI::User.new("/#{API_VERSION}/users/#{@cloud_user.id}", self).refresh
49
38
 
50
39
  end
51
40
  @cloud_user
52
41
  end
53
42
 
54
43
  def mime_for(path)
55
- mime = MIME::Types.type_for path
56
- mime.empty? ? 'text/plain' : mime[0].content_type
44
+ mime = MIME::Types.type_for path
45
+ mime.empty? ? 'text/plain' : mime[0].content_type
57
46
  end
58
47
 
59
48
  def upload(uri, filename)
60
49
  begin
61
- @token = @token.refresh!(:headers => ACCEPT_HEADERS) if @token.expired?
50
+ @token = @token.refresh! if @token.expired?
62
51
  connection = @token.client.connection
63
- payload = {:file => Faraday::UploadIO.new(filename, mime_for(filename)) }
64
- headers = ACCEPT_HEADERS.merge(@token.headers)
65
- response = connection.post(@cloud_url+"#{uri}",payload, headers)
52
+ payload = {:file => Faraday::UploadIO.new(filename, mime_for(filename))}
53
+ response = connection.post(@cloud_url + "#{uri}", payload, @token.headers)
66
54
  rescue => e
67
55
  @logger.error e
68
56
  return nil
69
57
  end
70
58
  JSON.parse(response.body)
71
59
  end
72
- def post(uri, params)
73
60
 
74
- @token = @token.refresh!(:headers => ACCEPT_HEADERS) if @token.expired?
61
+ def post(uri, params = {})
62
+
63
+ @token = @token.refresh! if @token.expired?
75
64
 
76
65
  begin
77
- resp = @token.post("#{@cloud_url}#{uri}", params.merge(:headers => ACCEPT_HEADERS))
66
+ resp = @token.post("#{@cloud_url}#{uri}", params)
78
67
  rescue => e
79
68
  @logger.error "Failed to post resource #{uri} #{e}"
80
69
  return nil
81
70
  end
82
-
71
+
83
72
  if resp.body.nil? || resp.body.length == 0
84
73
  return nil
85
74
  end
86
-
75
+
87
76
  JSON.parse(resp.body)
88
77
  end
89
- def get(uri, params={})
90
78
 
91
- @token = @token.refresh!(:headers => ACCEPT_HEADERS) if @token.expired?
79
+ def get(uri, params = {})
80
+
81
+ @token = @token.refresh! if @token.expired?
92
82
 
93
83
  begin
94
- resp = @token.get(@cloud_url+"#{uri}", params.merge(:headers => ACCEPT_HEADERS))
84
+ resp = @token.get(@cloud_url + "#{uri}", :params => params)
95
85
  rescue => e
96
86
  @logger.error "Failed to get resource #{uri} #{e}"
97
87
  return nil
98
88
  end
99
89
  JSON.parse(resp.body)
100
90
  end
91
+
101
92
  def delete(uri)
102
93
 
103
- @token = @token.refresh!(:headers => ACCEPT_HEADERS) if @token.expired?
94
+ @token = @token.refresh! if @token.expired?
104
95
 
105
96
  begin
106
- resp = @token.delete(@cloud_url+"#{uri}", :headers => ACCEPT_HEADERS )
97
+ resp = @token.delete(@cloud_url + "#{uri}")
107
98
  rescue => e
108
99
  @logger.error "Failed to delete resource #{uri} #{e}"
109
100
  return nil
110
101
  end
111
102
 
112
- if (resp.status != 204)
103
+ if resp.status != 204
113
104
  @logger.error "Failed to delete resource #{uri} #{e}"
114
- return nil
115
105
  else
116
106
  @logger.info "response: #{resp.status}"
117
107
  end
118
108
  end
109
+
119
110
  def download(uri, file_name)
120
111
  begin
121
- @token = @token.refresh!(:headers => ACCEPT_HEADERS) if @token.expired?
122
- File.open(file_name, "w+b") do |file|
123
- resp = @token.get("#{@cloud_url}/#{uri}", :headers => ACCEPT_HEADERS)
112
+ @token = @token.refresh! if @token.expired?
113
+ ::File.open(file_name, "w+b") do |file|
114
+ full_uri = uri.start_with?(@cloud_url) ? uri : @cloud_url + uri
115
+ resp = @token.get(full_uri)
124
116
  file.write(resp.body)
125
117
  end
126
118
  rescue => e
@@ -131,7 +123,7 @@ class Client
131
123
 
132
124
  # Resources
133
125
 
134
- # public read-only
126
+ # public read-only
135
127
 
136
128
  def info
137
129
  TestdroidAPI::CloudResource.new("/#{API_VERSION}/info", self, "info")
@@ -145,7 +137,7 @@ class Client
145
137
  TestdroidAPI::LabelGroups.new("/#{API_VERSION}/label-groups", self)
146
138
  end
147
139
 
148
- # user read-write
140
+ # user read-write
149
141
 
150
142
  def me
151
143
  TestdroidAPI::User.new("/#{API_VERSION}/me", self).load
@@ -159,7 +151,7 @@ class Client
159
151
  TestdroidAPI::DeviceSessionConnections.new("/#{API_VERSION}/device-session-connections", self)
160
152
  end
161
153
 
162
- # admin only
154
+ # admin only
163
155
 
164
156
  def admin
165
157
  TestdroidAPI::Admin.new("/#{API_VERSION}/admin", self)
@@ -1,11 +1,11 @@
1
1
  module TestdroidAPI
2
2
  class CloudListResource
3
3
 
4
- def initialize(uri, client, instance_class=nil)
4
+ def initialize(uri, client, instance_class = nil)
5
5
  @uri, @client = uri, client
6
6
  resource_name = self.class.name.split('::')[-1]
7
- @instance_class = TestdroidAPI.const_get( instance_class.nil? ? resource_name.chop : instance_class )
8
- @list_key, @instance_id_key = resource_name.gsub!(/\b\w/) { $&.downcase }, 'id'
7
+ @instance_class = TestdroidAPI.const_get(instance_class.nil? ? resource_name.chop : instance_class)
8
+ @list_key, @instance_id_key = resource_name.gsub!(/\b\w/) {$&.downcase}, 'id'
9
9
  end
10
10
 
11
11
  def get(resource_id)
@@ -13,15 +13,13 @@ module TestdroidAPI
13
13
  end
14
14
 
15
15
  def total
16
-
17
16
  @client.get(@uri)['total']
18
17
  end
19
18
 
20
- def create(params={}, http_params={})
19
+ def create(params = {})
21
20
  raise "Can't create a resource without a REST Client" unless @client
22
21
  response = @client.post @uri, params
23
- @instance_class.new "#{@uri}/#{response[@instance_id_key]}", @client,
24
- response
22
+ @instance_class.new "#{@uri}/#{response[@instance_id_key]}", @client, response
25
23
  end
26
24
 
27
25
  def list_all()
@@ -29,8 +27,8 @@ module TestdroidAPI
29
27
 
30
28
  response = @client.get(@uri, {:limit => 0})
31
29
 
30
+ class_list = []
32
31
  if response['data'].is_a?(Array)
33
- class_list = []
34
32
  instance_uri = @uri
35
33
  response['data'].each do |val|
36
34
  class_list << @instance_class.new("#{instance_uri}/#{val[@instance_id_key]}", @client, val)
@@ -39,15 +37,13 @@ module TestdroidAPI
39
37
  class_list
40
38
  end
41
39
 
42
- def list(params={}, full_uri=false)
40
+ def list(params = {}, full_uri = false)
43
41
  raise "Can't get a resource list without a REST Client" unless @client
44
42
  @uri = full_uri ? @uri.split(@client.instance_variable_get(:@cloud_url))[1] : @uri
45
-
46
43
  response = @client.get(@uri, params)
47
-
44
+ class_list = []
48
45
  if response['data'].is_a?(Array)
49
46
  client = @client
50
- class_list = []
51
47
  list_class = self.class
52
48
  instance_uri = full_uri ? @uri.split('?')[0] : @uri
53
49
  response['data'].each do |val|
@@ -59,9 +55,9 @@ module TestdroidAPI
59
55
  self;
60
56
  end
61
57
 
62
- eigenclass.send :define_method, :offset, &lambda { response['offset'] }
63
- eigenclass.send :define_method, :limit, &lambda { response['limit'] }
64
- eigenclass.send :define_method, :total, &lambda { response['total'] }
58
+ eigenclass.send :define_method, :offset, &lambda {response['offset']}
59
+ eigenclass.send :define_method, :limit, &lambda {response['limit']}
60
+ eigenclass.send :define_method, :total, &lambda {response['total']}
65
61
  eigenclass.send :define_method, :next_page, &lambda {
66
62
  if response['next']
67
63
 
@@ -1,6 +1,6 @@
1
1
  module TestdroidAPI
2
2
  class CloudResource
3
- def initialize(uri, client, resource_name=nil, params= {})
3
+ def initialize(uri, client, resource_name = nil, params = {})
4
4
 
5
5
  @uri, @client, @resource_name = uri, client, resource_name
6
6
  set_up_properties_from(params)
@@ -18,7 +18,7 @@ module TestdroidAPI
18
18
  new_class = resource_class.new(uri, @client)
19
19
  instance_variable_set("@#{item}", new_class)
20
20
  end
21
- self.class.instance_eval { attr_reader *items }
21
+ self.class.instance_eval {attr_reader *items}
22
22
  end
23
23
 
24
24
  def method_missing(method, *args)
@@ -42,7 +42,7 @@ module TestdroidAPI
42
42
  property = snake_case_it p
43
43
 
44
44
  unless ['uri', 'client', 'updated'].include? property
45
- eigenclass.send :define_method, property.to_sym, &lambda { v }
45
+ eigenclass.send :define_method, property.to_sym, &lambda {v}
46
46
  end
47
47
  end
48
48
  @updated = !hash.keys.empty?
@@ -57,7 +57,7 @@ module TestdroidAPI
57
57
 
58
58
  alias_method :load, :refresh
59
59
 
60
- def download_file(file_resource_name, target_file_name=nil)
60
+ def download_file(file_resource_name, target_file_name = nil)
61
61
  raise "Can't refresh a resource without a REST Client" unless @client
62
62
  target_file_name = file_resource_name unless target_file_name
63
63
  @client.download("#{@uri}/#{file_resource_name}", target_file_name)
@@ -65,7 +65,7 @@ module TestdroidAPI
65
65
 
66
66
  def camel_case_it(something)
67
67
  if something.is_a? Hash
68
- Hash[*something.to_a.map { |a| [camel_case_it(a[0]).to_sym, a[1]] }.flatten]
68
+ Hash[*something.to_a.map {|a| [camel_case_it(a[0]).to_sym, a[1]]}.flatten]
69
69
  else
70
70
  something.to_s.split('_').map do |s|
71
71
  [s[0, 1].capitalize, s[1..-1]].join
@@ -75,9 +75,9 @@ module TestdroidAPI
75
75
 
76
76
  def snake_case_it(something)
77
77
  if something.is_a? Hash
78
- Hash[*something.to_a.map { |pair| [snake_case_it(pair[0]).to_sym, pair[1]] }.flatten]
78
+ Hash[*something.to_a.map {|pair| [snake_case_it(pair[0]).to_sym, pair[1]]}.flatten]
79
79
  else
80
- something.to_s.gsub(/[A-Z][a-z]*/) { |s| "_#{s.downcase}" }.gsub(/^_/, '')
80
+ something.to_s.gsub(/[A-Z][a-z]*/) {|s| "_#{s.downcase}"}.gsub(/^_/, '')
81
81
  end
82
82
  end
83
83
 
@@ -2,9 +2,10 @@ module TestdroidAPI
2
2
  class DeviceGroups < CloudListResource
3
3
  end
4
4
  class DeviceGroup < CloudResource
5
- def initialize(uri, client, params= {})
5
+ def initialize(uri, client, params = {})
6
6
  super uri, client, "deviceGroup", params
7
7
  @uri, @client = uri, client
8
+ sub_items :devices
8
9
  end
9
10
 
10
11
  end
@@ -2,7 +2,7 @@ module TestdroidAPI
2
2
  class DeviceSessionConnections < CloudListResource
3
3
  end
4
4
  class DeviceSessionConnection < CloudResource
5
- def initialize(uri, client, params= {})
5
+ def initialize(uri, client, params = {})
6
6
  super uri, client, "DeviceSessionConnection", params
7
7
  @uri, @client = uri, client
8
8
  end
@@ -2,13 +2,22 @@ module TestdroidAPI
2
2
  class DeviceSessions < CloudListResource
3
3
  end
4
4
  class DeviceSession < CloudResource
5
- def initialize(uri, client, params= {})
5
+ def initialize(uri, client, params = {})
6
6
  super uri, client, "deviceSession", params
7
7
  @uri, @client = uri, client
8
8
  end
9
9
 
10
10
  def release
11
- resp = @client.post("#{@uri}/release", params= {})
11
+ @client.post("#{@uri}/release", params = {})
12
12
  end
13
+
14
+ def download_all_files(path)
15
+ Dir.mkdir(path) unless Dir.exist?(path)
16
+ files = @client.get("#{@uri}/output-file-set/files")
17
+ files['data'].each do |file|
18
+ @client.download(file['directUrl'], ::File.join(path, "#{file['id']}-#{file['name']}"))
19
+ end
20
+ end
21
+
13
22
  end
14
23
  end
@@ -2,7 +2,7 @@ module TestdroidAPI
2
2
  class Devices < CloudListResource
3
3
  end
4
4
  class Device < CloudResource
5
- def initialize(uri, client, params= {})
5
+ def initialize(uri, client, params = {})
6
6
  super uri, client, "device", params
7
7
  @uri, @client = uri, client
8
8
  end
@@ -1,59 +1,20 @@
1
1
  module TestdroidAPI
2
- class Files < CloudResource
3
- def initialize(uri, client, params= {})
4
- super uri, client, "files", params
5
- @uri, @client = uri, client
6
- end
7
-
8
- def uploadApplication(filename)
9
- if !File.exist?(filename)
10
- @client.logger.error("Invalid filename")
11
- return
12
- end
13
- reply = @client.upload("#{@uri}/application", filename)
2
+ class Files < CloudListResource
14
3
 
15
- Application.new(nil, nil, reply)
16
- end
17
-
18
- def uploadData(filename)
19
- if !File.exist?(filename)
4
+ def upload(filename)
5
+ unless ::File.exist?(filename)
20
6
  @client.logger.error("Invalid filename")
21
7
  return
22
8
  end
23
- reply = @client.upload("#{@uri}/data", filename)
24
-
25
- Data.new(nil, nil, reply)
9
+ file = @client.upload("#{@uri}", filename)
10
+ File.new("#{@uri}/#{file['id']}", @client, file)
26
11
  end
27
12
 
28
- def uploadTest(filename)
29
- if !File.exist?(filename)
30
- @client.logger.error("Invalid filename")
31
- return
32
- end
33
- reply = @client.upload("#{@uri}/test", filename)
34
-
35
- Test.new(nil, nil, reply)
36
- end
37
- end
38
- class Application < CloudResource
39
- def initialize(uri, client, params= {})
40
- super uri, client, "app", params
41
- @uri, @client = uri, client
42
-
43
- end
44
13
  end
45
- class Test < CloudResource
46
- def initialize(uri, client, params= {})
47
- super uri, client, "test", params
14
+ class File < CloudResource
15
+ def initialize(uri, client, params = {})
16
+ super uri, client, "file", params
48
17
  @uri, @client = uri, client
49
-
50
- end
51
- end
52
- class Data < CloudResource
53
- def initialize(uri, client, params= {})
54
- super uri, client, "data", params
55
- @uri, @client = uri, client
56
-
57
18
  end
58
19
  end
59
20
  end
@@ -0,0 +1,11 @@
1
+ module TestdroidAPI
2
+ class Frameworks < CloudListResource
3
+ end
4
+ class Framework < CloudResource
5
+ def initialize(uri, client, params = {})
6
+ super uri, client, "Framework", params
7
+ @uri, @client = uri, client
8
+ end
9
+
10
+ end
11
+ end
@@ -2,7 +2,7 @@ module TestdroidAPI
2
2
  class LabelGroups < CloudListResource
3
3
  end
4
4
  class LabelGroup < CloudResource
5
- def initialize(uri, client, params= {})
5
+ def initialize(uri, client, params = {})
6
6
  super uri, client, "labelGroup", params
7
7
  @uri, @client = uri, client
8
8
  sub_items :labels