datacentred 0.1.0pre
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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +35 -0
- data/README.md +2 -0
- data/Rakefile +10 -0
- data/circle.yml +5 -0
- data/datacentred.gemspec +23 -0
- data/lib/datacentred/error.rb +28 -0
- data/lib/datacentred/model/project.rb +44 -0
- data/lib/datacentred/model/role.rb +44 -0
- data/lib/datacentred/model/usage.rb +15 -0
- data/lib/datacentred/model/user.rb +32 -0
- data/lib/datacentred/model/version.rb +14 -0
- data/lib/datacentred/request/base.rb +46 -0
- data/lib/datacentred/request/projects.rb +38 -0
- data/lib/datacentred/request/roles.rb +38 -0
- data/lib/datacentred/request/usage.rb +10 -0
- data/lib/datacentred/request/users.rb +26 -0
- data/lib/datacentred/request/versions.rb +10 -0
- data/lib/datacentred/response.rb +12 -0
- data/lib/datacentred.rb +40 -0
- data/test/integration/projects_test.rb +117 -0
- data/test/integration/roles_test.rb +128 -0
- data/test/integration/usage_test.rb +24 -0
- data/test/integration/users_test.rb +128 -0
- data/test/integration/versions_test.rb +15 -0
- data/test/test_helper.rb +14 -0
- data/test/vcr_cassettes/add_user_to_project.yml +140 -0
- data/test/vcr_cassettes/add_user_to_role.yml +187 -0
- data/test/vcr_cassettes/create_project.yml +58 -0
- data/test/vcr_cassettes/create_role_with_invalid_permissions.yml +51 -0
- data/test/vcr_cassettes/create_role_with_permissions.yml +51 -0
- data/test/vcr_cassettes/create_role_without_permissions.yml +50 -0
- data/test/vcr_cassettes/create_user.yml +50 -0
- data/test/vcr_cassettes/delete_project.yml +103 -0
- data/test/vcr_cassettes/delete_role.yml +183 -0
- data/test/vcr_cassettes/delete_user.yml +136 -0
- data/test/vcr_cassettes/find_role.yml +97 -0
- data/test/vcr_cassettes/list_project_users.yml +58 -0
- data/test/vcr_cassettes/list_projects.yml +58 -0
- data/test/vcr_cassettes/list_role_users.yml +97 -0
- data/test/vcr_cassettes/list_roles.yml +50 -0
- data/test/vcr_cassettes/list_users.yml +58 -0
- data/test/vcr_cassettes/project_create_failed_validation.yml +56 -0
- data/test/vcr_cassettes/project_not_found.yml +54 -0
- data/test/vcr_cassettes/project_update_failed_validation.yml +55 -0
- data/test/vcr_cassettes/project_update_not_found.yml +54 -0
- data/test/vcr_cassettes/remove_user_from_project.yml +138 -0
- data/test/vcr_cassettes/remove_user_from_role.yml +228 -0
- data/test/vcr_cassettes/remove_user_from_role_not_found.yml +95 -0
- data/test/vcr_cassettes/show_project.yml +58 -0
- data/test/vcr_cassettes/show_usage.yml +51 -0
- data/test/vcr_cassettes/show_user.yml +97 -0
- data/test/vcr_cassettes/show_version.yml +50 -0
- data/test/vcr_cassettes/update_project.yml +58 -0
- data/test/vcr_cassettes/update_role.yml +98 -0
- data/test/vcr_cassettes/update_role_with_invalid_permissions.yml +98 -0
- data/test/vcr_cassettes/update_user.yml +97 -0
- data/test/vcr_cassettes/usage_not_found.yml +54 -0
- data/test/vcr_cassettes/user_create_failed_validation.yml +54 -0
- data/test/vcr_cassettes/user_delete_failed_validation.yml +54 -0
- data/test/vcr_cassettes/user_delete_not_found.yml +54 -0
- data/test/vcr_cassettes/user_show_not_found.yml +54 -0
- data/test/vcr_cassettes/user_update_failed_validation.yml +96 -0
- data/test/vcr_cassettes/user_update_not_found.yml +48 -0
- metadata +165 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 45b1b54675b4997ad636db5f4187e369216dec7b
|
4
|
+
data.tar.gz: 1c56568e101427d1b354bcc7511476a60640b826
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 576873f9b1b66463e9643ff2ba5ccd844aeb4e48d071cbf23224c04ec27d1f7dad235ae871aa2796b629fd93f04586d75ebbb5bb02d046a91ed4e7435f2f346e
|
7
|
+
data.tar.gz: ef8bbc569d77ff1c2f644ee1452f75475cc90a0854250326edda3fb82606dbf17325c0acacda4eabba798e8f23eb6ccd879e61f74e30bd13f7f1c1ec1c608966
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
datacentred (0.1.0)
|
5
|
+
faraday (~> 0.9.1)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
addressable (2.5.2)
|
11
|
+
public_suffix (>= 2.0.2, < 4.0)
|
12
|
+
crack (0.4.3)
|
13
|
+
safe_yaml (~> 1.0.0)
|
14
|
+
faraday (0.9.2)
|
15
|
+
multipart-post (>= 1.2, < 3)
|
16
|
+
minitest (5.3.5)
|
17
|
+
multipart-post (2.0.0)
|
18
|
+
public_suffix (3.0.0)
|
19
|
+
safe_yaml (1.0.4)
|
20
|
+
vcr (2.8.0)
|
21
|
+
webmock (1.8.11)
|
22
|
+
addressable (>= 2.2.7)
|
23
|
+
crack (>= 0.1.7)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
datacentred!
|
30
|
+
minitest (~> 5.3.1)
|
31
|
+
vcr (~> 2.8.0)
|
32
|
+
webmock (~> 1.8.0)
|
33
|
+
|
34
|
+
BUNDLED WITH
|
35
|
+
1.15.1
|
data/README.md
ADDED
data/Rakefile
ADDED
data/circle.yml
ADDED
data/datacentred.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'datacentred'
|
3
|
+
gem.version = '0.1.0pre'
|
4
|
+
gem.date = '2017-08-10'
|
5
|
+
gem.summary = 'datacentred'
|
6
|
+
gem.description = 'Gem wrapper for Datacentred API'
|
7
|
+
gem.authors = [ 'Eugenia Grieff', 'Sean Handley' ]
|
8
|
+
gem.email = 'megrieff@gmail.com'
|
9
|
+
gem.files = `git ls-files`.split("\n")
|
10
|
+
gem.homepage = 'https://github.com/datacentred/datacentred-api-ruby'
|
11
|
+
gem.license = 'BSD-3-Clause'
|
12
|
+
|
13
|
+
gem.required_ruby_version = '> 2.3'
|
14
|
+
|
15
|
+
# Runtime Dependencies
|
16
|
+
gem.add_runtime_dependency 'faraday', '~> 0.9.1'
|
17
|
+
|
18
|
+
# Development Dependencies
|
19
|
+
gem.add_development_dependency 'vcr', '~> 2.8.0'
|
20
|
+
gem.add_development_dependency 'webmock', '~> 1.8.0'
|
21
|
+
gem.add_development_dependency 'minitest', '~> 5.3.1'
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Datacentred
|
2
|
+
class Error < StandardError
|
3
|
+
def self.raise_unless_successful(status, body)
|
4
|
+
return if status.to_s.start_with? "2" # 2xx
|
5
|
+
err = Datacentred::errors[status]
|
6
|
+
message = body&.fetch("errors")&.first&.fetch("detail")
|
7
|
+
if err
|
8
|
+
raise err, message
|
9
|
+
else
|
10
|
+
raise Datacentred::Error, "Error #{status}: #{message}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class NotFoundError < StandardError; end
|
16
|
+
class UnprocessableEntity < StandardError; end
|
17
|
+
class Unauthorized < StandardError; end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def self.errors
|
22
|
+
{
|
23
|
+
401 => Unauthorized,
|
24
|
+
404 => NotFoundError,
|
25
|
+
422 => UnprocessableEntity
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Model
|
3
|
+
class Project < OpenStruct
|
4
|
+
def initialize(params)
|
5
|
+
params.delete("links") if params
|
6
|
+
params["created_at"] = Time.parse params["created_at"]
|
7
|
+
params["updated_at"] = Time.parse params["updated_at"]
|
8
|
+
super(params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all
|
12
|
+
Request::Projects.list.map{ |project| new(project) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find(id)
|
16
|
+
new Request::Projects.show(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create(params)
|
20
|
+
new Request::Projects.create(params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.update(id, params)
|
24
|
+
new Request::Projects.update(id, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.remove(id)
|
28
|
+
Request::Projects.destroy(id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.users(id)
|
32
|
+
Request::Projects.list_users(id).map{ |user| new(user) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.add_user(project_id, user_id)
|
36
|
+
Request::Projects.add_user(project_id, user_id)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.remove_user(project_id, user_id)
|
40
|
+
Request::Projects.remove_user(project_id, user_id)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Model
|
3
|
+
class Role < OpenStruct
|
4
|
+
def initialize(params)
|
5
|
+
params.delete("links")
|
6
|
+
params["created_at"] = Time.parse params["created_at"]
|
7
|
+
params["updated_at"] = Time.parse params["updated_at"]
|
8
|
+
super(params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all
|
12
|
+
Request::Roles.list.map{|role| new(role) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find(id)
|
16
|
+
new Request::Roles.show(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create(params)
|
20
|
+
new Request::Roles.create(params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.update(id, params)
|
24
|
+
new Request::Roles.update(id, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.delete(id)
|
28
|
+
Request::Roles.destroy(id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.users(id)
|
32
|
+
Request::Roles.list_users(id).map{|user| new(user) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.add_user(role_id, user_id)
|
36
|
+
Request::Roles.add_user(role_id, user_id)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.remove_user(role_id, user_id)
|
40
|
+
Request::Roles.remove_user(role_id, user_id)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Model
|
3
|
+
class Usage < OpenStruct
|
4
|
+
def initialize(params)
|
5
|
+
params.delete("links")
|
6
|
+
# params["last_updated_at"] = Time.parse params["last_updated_at"]
|
7
|
+
super(params)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.show(year, month)
|
11
|
+
Request::Usage.show(year, month)["projects"].map{ |project| new(project) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Model
|
3
|
+
class User < OpenStruct
|
4
|
+
def initialize(params)
|
5
|
+
params.delete("links")
|
6
|
+
params["created_at"] = Time.parse params["created_at"]
|
7
|
+
params["updated_at"] = Time.parse params["updated_at"]
|
8
|
+
super(params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all
|
12
|
+
Request::Users.list.map { |user| new(user) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find(id)
|
16
|
+
new Request::Users.show(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create(params)
|
20
|
+
new Request::Users.create(params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.update(id, params)
|
24
|
+
new Request::Users.update(id, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.delete(id)
|
28
|
+
Request::Users.destroy(id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Request
|
3
|
+
API_BASE_URL = 'https://my.datacentred.io'
|
4
|
+
|
5
|
+
class Base
|
6
|
+
|
7
|
+
def self.get(url, payload=nil)
|
8
|
+
response = Datacentred::Response.new(conn.get(url, payload))
|
9
|
+
response.body
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.post(url, payload=nil)
|
13
|
+
response = Datacentred::Response.new(conn.post(url, payload))
|
14
|
+
response.body
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.put(url, payload=nil)
|
18
|
+
response = Datacentred::Response.new(conn.put(url, payload))
|
19
|
+
response.body
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.delete(url, payload=nil)
|
23
|
+
response = Datacentred::Response.new(conn.delete(url, payload))
|
24
|
+
response.body
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def self.conn
|
30
|
+
Faraday.new(:url => API_BASE_URL) do |faraday|
|
31
|
+
faraday.path_prefix = "/api/"
|
32
|
+
faraday.request :url_encoded
|
33
|
+
faraday.headers['Accept'] = "application/vnd.datacentred.api+json; version=1"
|
34
|
+
faraday.headers['Authorization'] = "Token token=#{credentials}"
|
35
|
+
faraday.headers['Content-Type'] = 'application/json'
|
36
|
+
faraday.adapter Faraday.default_adapter
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.credentials
|
41
|
+
"#{Datacentred.access_key}:#{Datacentred.secret_key}"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Request
|
3
|
+
class Projects < Base
|
4
|
+
|
5
|
+
def self.create(payload={})
|
6
|
+
post('projects', payload.to_json)['project']
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.list
|
10
|
+
get('projects')['projects']
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.show(id)
|
14
|
+
get("projects/#{id}")['project']
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.update(id, payload={})
|
18
|
+
put("projects/#{id}", payload.to_json)['project']
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.destroy(id)
|
22
|
+
delete("projects/#{id}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.list_users(id)
|
26
|
+
get("projects/#{id}/users")['users']
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.add_user(project_id, user_id)
|
30
|
+
put("projects/#{project_id}/users/#{user_id}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.remove_user(project_id, user_id)
|
34
|
+
delete("projects/#{project_id}/users/#{user_id}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Request
|
3
|
+
class Roles < Base
|
4
|
+
|
5
|
+
def self.create(payload={})
|
6
|
+
post('roles', payload.to_json)['role']
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.list
|
10
|
+
get('roles')['roles']
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.show(id)
|
14
|
+
get("roles/#{id}")['role']
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.update(id, payload={})
|
18
|
+
put("roles/#{id}", payload.to_json)['role']
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.destroy(id)
|
22
|
+
delete("roles/#{id}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.list_users(role_id)
|
26
|
+
get("roles/#{role_id}/users")['users']
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.add_user(role_id, user_id)
|
30
|
+
put("roles/#{role_id}/users/#{user_id}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.remove_user(role_id, user_id)
|
34
|
+
delete("roles/#{role_id}/users/#{user_id}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Datacentred
|
2
|
+
module Request
|
3
|
+
class Users < Base
|
4
|
+
|
5
|
+
def self.create(payload={})
|
6
|
+
post('users', payload.to_json)['user']
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.list
|
10
|
+
get('users')['users']
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.show(id)
|
14
|
+
get("users/#{id}")['user']
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.update(id, payload)
|
18
|
+
put("users/#{id}", payload.to_json)['user']
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.destroy(id)
|
22
|
+
delete("users/#{id}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Datacentred
|
2
|
+
class Response
|
3
|
+
|
4
|
+
attr_reader :body, :status
|
5
|
+
|
6
|
+
def initialize(server_response)
|
7
|
+
@body = JSON.parse server_response.body rescue nil
|
8
|
+
@status = server_response.status
|
9
|
+
Error.raise_unless_successful(status, @body)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/datacentred.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Datacentred
|
5
|
+
require_relative 'datacentred/response'
|
6
|
+
require_relative 'datacentred/error'
|
7
|
+
require_relative 'datacentred/model/user'
|
8
|
+
require_relative 'datacentred/model/project'
|
9
|
+
require_relative 'datacentred/model/role'
|
10
|
+
require_relative 'datacentred/model/usage'
|
11
|
+
require_relative 'datacentred/model/version'
|
12
|
+
require_relative 'datacentred/request/base'
|
13
|
+
require_relative 'datacentred/request/projects'
|
14
|
+
require_relative 'datacentred/request/users'
|
15
|
+
require_relative 'datacentred/request/roles'
|
16
|
+
require_relative 'datacentred/request/usage'
|
17
|
+
require_relative 'datacentred/request/versions'
|
18
|
+
|
19
|
+
def self.access_key
|
20
|
+
@@access_key ||= ENV['DATACENTRED_ACCESS']
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.access_key=(val)
|
24
|
+
@@access_key = val
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.secret_key
|
28
|
+
@@secret_key ||= ENV['DATACENTRED_SECRET']
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.secret_key=(val)
|
32
|
+
@@secret_key = val
|
33
|
+
end
|
34
|
+
|
35
|
+
User = Model::User
|
36
|
+
Project = Model::Project
|
37
|
+
Role = Model::Role
|
38
|
+
Usage = Model::Usage
|
39
|
+
Version = Model::Version
|
40
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
module Datacentred
|
4
|
+
class ProjectsIntegrationTest < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@params_with_new_name = {"project" =>{"name" => "new_project_name"}}
|
7
|
+
@create_params = {"project" => {"name" => "test_new_project"}}
|
8
|
+
@user_id = "user_id"
|
9
|
+
@project_id = 'project_id1'
|
10
|
+
@project_id2 = 'project_id2'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_list_projects
|
14
|
+
VCR.use_cassette('list_projects') do
|
15
|
+
@projects = Datacentred::Project.all
|
16
|
+
assert_equal 1, @projects.count
|
17
|
+
@project = @projects.first
|
18
|
+
assert @project.id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_show_project
|
23
|
+
VCR.use_cassette('show_project') do
|
24
|
+
@project = Datacentred::Project.find(@project_id)
|
25
|
+
assert_equal @project.name, "foo_bar_primary"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_raises_not_found_if_project_doesnt_exist
|
30
|
+
VCR.use_cassette('project_not_found') do
|
31
|
+
assert_raises(Datacentred::NotFoundError) do
|
32
|
+
@project = Datacentred::Project.find("unknown")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_create_project
|
38
|
+
VCR.use_cassette('create_project') do
|
39
|
+
@new_project = Datacentred::Project.create(@create_params)
|
40
|
+
assert_equal @new_project.name, "test_new_project"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_raises_unprocessable_entity_if_failed_validation_for_create
|
45
|
+
VCR.use_cassette('project_create_failed_validation') do
|
46
|
+
assert_raises(Datacentred::UnprocessableEntity) do
|
47
|
+
Datacentred::Project.create(@create_params)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_update_project
|
53
|
+
VCR.use_cassette('update_project') do
|
54
|
+
@updated_project = Datacentred::Project.update(@project_id2, @params_with_new_name)
|
55
|
+
assert_equal @updated_project.name, "test_new_project_name"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_raises_unprocessable_entity_if_failed_validation_for_update
|
60
|
+
VCR.use_cassette('project_update_failed_validation') do
|
61
|
+
@params_with_used_name = {"project" => {"name" => "foo"}}
|
62
|
+
assert_raises(Datacentred::UnprocessableEntity) do
|
63
|
+
@project = Datacentred::Project.update(@project_id2, @params_with_used_name)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_raises_not_found_if_cant_find_project_for_update
|
69
|
+
VCR.use_cassette('project_update_not_found') do
|
70
|
+
assert_raises(Datacentred::NotFoundError) do
|
71
|
+
@project = Datacentred::Project.update("unknown", @params_with_new_name)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_delete_project
|
77
|
+
VCR.use_cassette('delete_project') do
|
78
|
+
Datacentred::Project.remove(@project_id2)
|
79
|
+
assert_raises(Datacentred::NotFoundError) do
|
80
|
+
@project = Datacentred::Project.find(@project_id2)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_list_project_users
|
86
|
+
VCR.use_cassette('list_project_users') do
|
87
|
+
@user_list = Datacentred::Project.users(@project_id)
|
88
|
+
assert_equal @user_list.count, 2
|
89
|
+
@user = @user_list.first
|
90
|
+
assert @user.id
|
91
|
+
assert @user.first_name
|
92
|
+
assert @user.last_name
|
93
|
+
assert @user.email
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_add_user_to_project
|
98
|
+
VCR.use_cassette('add_user_to_project') do
|
99
|
+
@user_list = Datacentred::Project.users(@project_id)
|
100
|
+
assert_equal @user_list.count, 1
|
101
|
+
Datacentred::Project.add_user(@project_id, @user_id)
|
102
|
+
@user_list = Datacentred::Project.users(@project_id)
|
103
|
+
assert_equal @user_list.count, 2
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_remove_user_from_project
|
108
|
+
VCR.use_cassette('remove_user_from_project') do
|
109
|
+
@user_list = Datacentred::Project.users(@project_id)
|
110
|
+
assert_equal @user_list.count, 2
|
111
|
+
Datacentred::Project.remove_user(@project_id, @user_id)
|
112
|
+
@user_list = Datacentred::Project.users(@project_id)
|
113
|
+
assert_equal @user_list.count, 1
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|