code42 0.1.2

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 (80) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +203 -0
  5. data/README.md +182 -0
  6. data/Rakefile +1 -0
  7. data/code42.gemspec +26 -0
  8. data/examples/Gemfile +6 -0
  9. data/examples/computers.rb +88 -0
  10. data/examples/diagnostic.rb +82 -0
  11. data/examples/orgs.rb +88 -0
  12. data/examples/parser.rb +51 -0
  13. data/examples/parser_test.rb +64 -0
  14. data/examples/users.rb +88 -0
  15. data/lib/code42.rb +46 -0
  16. data/lib/code42/attribute.rb +13 -0
  17. data/lib/code42/attribute_serializer.rb +129 -0
  18. data/lib/code42/client.rb +301 -0
  19. data/lib/code42/computer.rb +15 -0
  20. data/lib/code42/connection.rb +124 -0
  21. data/lib/code42/diagnostic.rb +8 -0
  22. data/lib/code42/error.rb +21 -0
  23. data/lib/code42/org.rb +38 -0
  24. data/lib/code42/ping.rb +14 -0
  25. data/lib/code42/resource.rb +58 -0
  26. data/lib/code42/role.rb +26 -0
  27. data/lib/code42/role_collection.rb +35 -0
  28. data/lib/code42/settings.rb +42 -0
  29. data/lib/code42/token.rb +31 -0
  30. data/lib/code42/token_validation.rb +10 -0
  31. data/lib/code42/user.rb +40 -0
  32. data/lib/code42/version.rb +3 -0
  33. data/spec/cassettes/Code42_Client/_create_org/returns_created_org.yml +47 -0
  34. data/spec/cassettes/Code42_Client/_create_user/returns_created_user.yml +44 -0
  35. data/spec/cassettes/Code42_Client/_create_user/when_sending_an_invalid_email/raises_an_exception.yml +37 -0
  36. data/spec/cassettes/Code42_Client/_find_org_by_name/returns_the_org_with_the_specified_name.yml +101 -0
  37. data/spec/cassettes/Code42_Client/_get_token/returns_valid_tokens.yml +38 -0
  38. data/spec/cassettes/Code42_Client/_get_token/when_providing_invalid_credentials/should_raise_an_exception.yml +37 -0
  39. data/spec/cassettes/Code42_Client/_org/when_ID_is_not_passed/returns_my_org.yml +54 -0
  40. data/spec/cassettes/Code42_Client/_org/when_ID_is_passed_in/returns_a_specific_org.yml +54 -0
  41. data/spec/cassettes/Code42_Client/_ping/returns_a_ping.yml +48 -0
  42. data/spec/cassettes/Code42_Client/_user/when_ID_is_not_passed/returns_my_user.yml +53 -0
  43. data/spec/cassettes/Code42_Client/_user/when_ID_is_passed_in/returns_a_specific_user.yml +53 -0
  44. data/spec/cassettes/Code42_Client/_user_roles/returns_an_enumerable.yml +50 -0
  45. data/spec/cassettes/Code42_Client/_validate_token/returns_a_valid_response.yml +83 -0
  46. data/spec/cassettes/Crashplan_Client/_create_org/returns_created_org.yml +47 -0
  47. data/spec/cassettes/Crashplan_Client/_create_user/returns_created_user.yml +44 -0
  48. data/spec/cassettes/Crashplan_Client/_create_user/when_sending_an_invalid_email/raises_an_exception.yml +37 -0
  49. data/spec/cassettes/Crashplan_Client/_find_org_by_name/returns_the_org_with_the_specified_name.yml +55 -0
  50. data/spec/cassettes/Crashplan_Client/_get_token/returns_valid_tokens.yml +38 -0
  51. data/spec/cassettes/Crashplan_Client/_get_token/when_providing_invalid_credentials/should_raise_an_exception.yml +37 -0
  52. data/spec/cassettes/Crashplan_Client/_org/when_ID_is_not_passed/returns_my_org.yml +54 -0
  53. data/spec/cassettes/Crashplan_Client/_org/when_ID_is_passed_in/returns_a_specific_org.yml +54 -0
  54. data/spec/cassettes/Crashplan_Client/_ping/returns_a_ping.yml +48 -0
  55. data/spec/cassettes/Crashplan_Client/_user/when_ID_is_not_passed/returns_my_user.yml +99 -0
  56. data/spec/cassettes/Crashplan_Client/_user/when_ID_is_passed_in/returns_a_specific_user.yml +53 -0
  57. data/spec/cassettes/Crashplan_Client/_user_roles/returns_an_enumerable.yml +50 -0
  58. data/spec/cassettes/Crashplan_Client/_validate_token/returns_a_valid_response.yml +128 -0
  59. data/spec/crashplan/client_spec.rb +135 -0
  60. data/spec/crashplan/connection_spec.rb +45 -0
  61. data/spec/crashplan/org_spec.rb +63 -0
  62. data/spec/crashplan/ping_spec.rb +14 -0
  63. data/spec/crashplan/resource_spec.rb +56 -0
  64. data/spec/crashplan/role_spec.rb +28 -0
  65. data/spec/crashplan/settings_spec.rb +118 -0
  66. data/spec/crashplan/token_spec.rb +33 -0
  67. data/spec/crashplan/user_spec.rb +21 -0
  68. data/spec/fixtures/auth/bad_password.json +1 -0
  69. data/spec/fixtures/authToken.json +10 -0
  70. data/spec/fixtures/org.1.json +36 -0
  71. data/spec/fixtures/org.create.json +36 -0
  72. data/spec/fixtures/org.my.json +36 -0
  73. data/spec/fixtures/ping.json +7 -0
  74. data/spec/fixtures/user.1.json +27 -0
  75. data/spec/fixtures/user.create.json +27 -0
  76. data/spec/fixtures/user.my.json +27 -0
  77. data/spec/fixtures/user_roles.json +32 -0
  78. data/spec/fixtures/validate_token.json +10 -0
  79. data/spec/spec_helper.rb +67 -0
  80. metadata +268 -0
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Client, :vcr do
4
+ subject(:client) do
5
+ Code42::Client.new(
6
+ host: 'localhost',
7
+ port: 7280,
8
+ https: false,
9
+ api_root: '/api',
10
+ username: 'admin',
11
+ password: 'admin'
12
+ )
13
+ end
14
+
15
+ describe "#validate_token" do
16
+ it "returns a valid response" do
17
+ token = client.get_token
18
+ validation = client.validate_token token
19
+ validation.should be_valid
20
+ end
21
+ end
22
+
23
+ describe "#user_roles" do
24
+ it "returns an enumerable" do
25
+ roles = client.user_roles
26
+ roles.should respond_to(:each)
27
+ end
28
+ end
29
+
30
+ describe "#get_token" do
31
+ it "returns valid tokens" do
32
+ auth = client.get_token
33
+ auth.cookie_token.should have(26).characters
34
+ auth.url_token.should have(26).characters
35
+ end
36
+
37
+ context "when providing invalid credentials" do
38
+ it "should raise an exception" do
39
+ client.settings.password = 'badpassword'
40
+ expect{client.get_token}.to raise_error Code42::Error::AuthenticationError
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "#create_org" do
46
+ let(:org_attributes) do
47
+ {
48
+ :orgName => 'IBM'
49
+ }
50
+ end
51
+
52
+ it "returns created org" do
53
+ org = client.create_org(org_attributes)
54
+ org.name.should eq 'IBM'
55
+ end
56
+
57
+ end
58
+
59
+ describe "#create_user" do
60
+ let(:user_attributes) do
61
+ {
62
+ :orgId => 2,
63
+ :username => 'testuser'
64
+ }
65
+ end
66
+
67
+ it "returns created user" do
68
+ user = client.create_user(user_attributes)
69
+ user.username.should eq 'testuser'
70
+ user.id.should eq 3
71
+ end
72
+
73
+ context "when sending an invalid email" do
74
+ it "raises an exception" do
75
+ user_attributes[:email] = 'testuser'
76
+ expect { client.create_user(user_attributes) }.to raise_error Code42::Error::EmailInvalid
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#user" do
82
+ context "when ID is not passed" do
83
+ it "returns my user" do
84
+ user = client.user
85
+ user.id.should == 1
86
+ end
87
+ end
88
+
89
+ context "when ID is passed in" do
90
+ it "returns a specific user" do
91
+ user = client.user(2)
92
+ user.id.should == 2
93
+ end
94
+
95
+ it "passes params to code42 server" do
96
+ client.should_receive(:object_from_response).with(Code42::User, :get, "user/2", :incAll => true)
97
+ user = client.user(2, :incAll => true)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "#org" do
103
+ context "when ID is not passed" do
104
+ it "returns my org" do
105
+ org = client.org
106
+ org.id.should == 1
107
+ end
108
+ end
109
+
110
+ context "when ID is passed in" do
111
+ it "returns a specific org" do
112
+ org = client.org(1)
113
+ org.id.should == 1
114
+ end
115
+
116
+ it "passes params to code42 server" do
117
+ client.should_receive(:object_from_response).with(Code42::Org, :get, "org/2", :incAll => true)
118
+ user = client.org(2, :incAll => true)
119
+ end
120
+ end
121
+ end
122
+
123
+ describe "#find_org_by_name" do
124
+ it "returns the org with the specified name" do
125
+ org = client.find_org_by_name 'PROServer Demo'
126
+ org.name.should == 'PROServer Demo'
127
+ end
128
+ end
129
+
130
+ describe "#ping" do
131
+ it "returns a ping" do
132
+ client.ping.should be_true
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Connection do
4
+ subject(:connection) do
5
+ Code42::Connection.new(
6
+ host: 'example.com',
7
+ port: 1234,
8
+ scheme: 'http',
9
+ username: 'fred',
10
+ password: 'letmein',
11
+ path_prefix: '/api/v2'
12
+ )
13
+ end
14
+
15
+ describe "#token" do
16
+ it "sets authorization headers" do
17
+ connection.token = "0jdeqya6xroz713tn1hxp6d8p1-1t5839d7lwfxr0g84jf1nqp2vi"
18
+ expect(connection.headers['Authorization']).to eq "TOKEN 0jdeqya6xroz713tn1hxp6d8p1-1t5839d7lwfxr0g84jf1nqp2vi"
19
+ end
20
+ end
21
+
22
+ it "should set host to example.com" do
23
+ expect(connection.host).to eq 'example.com'
24
+ end
25
+
26
+ it "should set port to 1234" do
27
+ expect(connection.port).to eq 1234
28
+ end
29
+
30
+ it "should set scheme to http" do
31
+ expect(connection.scheme).to eq 'http'
32
+ end
33
+
34
+ it "should set api_root to /api/v2" do
35
+ expect(connection.path_prefix).to eq '/api/v2'
36
+ end
37
+
38
+ it "should set username to fred" do
39
+ expect(connection.username).to eq 'fred'
40
+ end
41
+
42
+ it "should set password to letmein" do
43
+ expect(connection.password).to eq 'letmein'
44
+ end
45
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Org do
4
+ let(:valid_attributes) do
5
+ {
6
+ "orgId" => 123,
7
+ "orgUid" => "ADMIN",
8
+ "orgName" => "ADMIN",
9
+ "status" => "Active",
10
+ "active" => true,
11
+ "blocked" => false,
12
+ "parentOrgId" => nil,
13
+ "type" => "ENTERPRISE",
14
+ "creationDate" => "2006-05-23T15:11:39.159-05:00",
15
+ "modificationDate" => "2010-03-09T15:06:37.724-06:00"
16
+ }
17
+ end
18
+
19
+ subject(:org) do
20
+ Code42::Org.from_response(valid_attributes)
21
+ end
22
+
23
+ describe ".serialize" do
24
+ it "serializes data correctly" do
25
+ data = {
26
+ name: 'Target'
27
+ }
28
+ serialized = Code42::Org.serialize(data)
29
+ serialized.should be_a(Hash)
30
+ serialized['orgName'].should eq 'Target'
31
+ end
32
+ end
33
+
34
+ describe "#id" do
35
+ it "returns the correct id" do
36
+ org.id.should eq 123
37
+ end
38
+ end
39
+
40
+ describe "#created_at" do
41
+ it "returns a DateTime object" do
42
+ org.created_at.should be_a DateTime
43
+ end
44
+
45
+ it "returns the correct date" do
46
+ org.created_at.day.should eq 23
47
+ org.created_at.month.should eq 5
48
+ org.created_at.year.should eq 2006
49
+ end
50
+ end
51
+
52
+ describe "#updated_at" do
53
+ it "returns a DateTime object" do
54
+ org.updated_at.should be_a DateTime
55
+ end
56
+
57
+ it "returns the correct date" do
58
+ org.updated_at.day.should eq 9
59
+ org.updated_at.month.should eq 3
60
+ org.updated_at.year.should eq 2010
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Ping do
4
+ let(:valid_attributes) do
5
+ { "success" => true }
6
+ end
7
+
8
+ subject(:ping) do
9
+ Code42::Ping.new(valid_attributes)
10
+ end
11
+
12
+ it { should be_success }
13
+
14
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ module Code42
4
+ describe Resource do
5
+ describe '#serialize' do
6
+ before do
7
+ Resource.class_eval do
8
+ attribute :created_at, :from => 'creationDate', :as => DateTime
9
+ attribute :updated_at, :from => 'modificationDate', :as => DateTime
10
+ attribute :name
11
+ attribute :permissions
12
+ end
13
+ end
14
+
15
+ it 'serializes attributes correctly' do
16
+ resource = Resource.new(
17
+ name: 'Test',
18
+ created_at: DateTime.new(2013,1,1),
19
+ updated_at: DateTime.new(2013,1,1),
20
+ permissions: {
21
+ foo_id: 1,
22
+ bar: 2
23
+ }
24
+ )
25
+ serialized = resource.serialize
26
+ serialized.should include('name' => 'Test')
27
+ serialized.should include('creationDate' => '2013-01-01T00:00:00+00:00')
28
+ serialized.should include('modificationDate' => '2013-01-01T00:00:00+00:00')
29
+ serialized.should include('permissions')
30
+ serialized['permissions'].should include('fooId' => 1)
31
+ serialized['permissions'].should include('bar' => 2)
32
+ end
33
+ end
34
+
35
+ describe '#deserialize' do
36
+ before do
37
+ class LineItem < Resource
38
+ end
39
+ Resource.class_eval do
40
+ attribute :products, :as => LineItem, :collection => true
41
+ end
42
+ end
43
+
44
+ it 'deserialize a single object response with nested objects' do
45
+ attrs =
46
+ {'products' => [
47
+ {'product' => {'name' => 1}},
48
+ {'product' => {'name' => 1}}
49
+ ]}
50
+ res = Resource.new
51
+ deserialized = res.class.deserialize(attrs)
52
+ expect(deserialized[:products].count).to eq 2
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Role do
4
+ describe "#deserialize_and_initialize" do
5
+ let(:response_data) do
6
+ data = <<-JSON
7
+ {
8
+ "roleId": 3,
9
+ "roleName": "PROe User",
10
+ "locked": true,
11
+ "creationDate": "2013-01-31T15:51:07.810-06:00",
12
+ "modificationDate": "2013-01-31T15:51:07.810-06:00",
13
+ "permissions":
14
+ [
15
+ {"permission": "admin.cpp.login"},
16
+ {"permission": "admin.console.login"}
17
+ ]
18
+ }
19
+ JSON
20
+ JSON.parse(data)
21
+ end
22
+
23
+ it "should translate roleId to id" do
24
+ role = Code42::Role.deserialize_and_initialize(response_data)
25
+ role.id.should eq 3
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,118 @@
1
+ require 'spec_helper'
2
+
3
+ describe Code42::Settings do
4
+ subject(:settings) { Code42::Settings.new }
5
+
6
+ describe "#host" do
7
+ it "should return configured host" do
8
+ settings.host = "example.com"
9
+ settings.host.should == "example.com"
10
+ end
11
+ end
12
+
13
+ describe "#base_url" do
14
+ it "should build base_url properly" do
15
+ settings.https = true
16
+ settings.host = 'example.com'
17
+ settings.port = 123
18
+ settings.api_root = '/api'
19
+ settings.base_url.should eq 'https://example.com:123/api'
20
+ end
21
+
22
+ it "should raise an exception if settings invalid" do
23
+ settings.host = 'example.com'
24
+ expect { settings.base_url }.to raise_error(Code42::Error)
25
+ end
26
+ end
27
+
28
+ describe "#valid?" do
29
+ it "should return true if required properties are defined" do
30
+ settings.host = 'example.com'
31
+ settings.port = 123
32
+ settings.api_root = '/api'
33
+ settings.should be_valid
34
+ settings.should be_valid
35
+ end
36
+
37
+ it "should return false if required properties aren't defined" do
38
+ settings.host = 'example.com'
39
+ settings.api_root = '/api'
40
+ settings.should_not be_valid
41
+ settings.should_not be_valid
42
+ end
43
+ end
44
+
45
+ describe "#scheme" do
46
+ it "should be http if https is false" do
47
+ settings.https = false
48
+ settings.scheme.should eq 'http'
49
+ end
50
+
51
+ it "should be https if https is true" do
52
+ settings.https = true
53
+ settings.scheme.should == 'https'
54
+ settings.scheme.should eq 'https'
55
+ end
56
+ end
57
+
58
+ describe "#port" do
59
+ it "should return configured port" do
60
+ settings.port = 123
61
+ settings.port.should eq 123
62
+ end
63
+ end
64
+
65
+ describe "#https" do
66
+ it "should return the https boolean" do
67
+ settings.https = true
68
+ settings.https.should be_true
69
+ end
70
+
71
+ it "should default to true" do
72
+ settings = Code42::Settings.new
73
+ settings.https.should be_true
74
+ end
75
+ end
76
+
77
+ describe "#api_root" do
78
+ it "should return the api root" do
79
+ settings.api_root = '/api/v3'
80
+ settings.api_root.should eq '/api/v3'
81
+ end
82
+ end
83
+
84
+ describe "#username" do
85
+ it "should return the username" do
86
+ settings.username = 'bob'
87
+ settings.username.should eq 'bob'
88
+ end
89
+ end
90
+
91
+ describe "#password" do
92
+ it "should return the password" do
93
+ settings.password = 'bob'
94
+ settings.password.should eq 'bob'
95
+ end
96
+ end
97
+
98
+ describe "#all" do
99
+ it "should return a hash of all settings" do
100
+ settings = Code42::Settings.new(
101
+ host: 'example.com',
102
+ port: 123,
103
+ api_root: '/api',
104
+ https: true,
105
+ username: 'fred',
106
+ password: 'secret'
107
+ )
108
+ settings.all.should eq({
109
+ host: 'example.com',
110
+ port: 123,
111
+ https: true,
112
+ api_root: '/api',
113
+ username: 'fred',
114
+ password: 'secret'
115
+ })
116
+ end
117
+ end
118
+ end