samanage 2.1.19 → 2.1.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +224 -0
  3. data/Gemfile +12 -7
  4. data/Gemfile.lock +43 -24
  5. data/Guardfile +5 -3
  6. data/changelog.md +92 -19
  7. data/lib/samanage.rb +33 -30
  8. data/lib/samanage/api.rb +67 -74
  9. data/lib/samanage/api/attachments.rb +12 -12
  10. data/lib/samanage/api/category.rb +9 -7
  11. data/lib/samanage/api/changes.rb +17 -16
  12. data/lib/samanage/api/comments.rb +6 -7
  13. data/lib/samanage/api/contracts.rb +17 -17
  14. data/lib/samanage/api/custom_fields.rb +6 -6
  15. data/lib/samanage/api/custom_forms.rb +13 -10
  16. data/lib/samanage/api/departments.rb +9 -9
  17. data/lib/samanage/api/groups.rb +21 -20
  18. data/lib/samanage/api/hardwares.rb +14 -14
  19. data/lib/samanage/api/incidents.rb +7 -8
  20. data/lib/samanage/api/mobiles.rb +14 -15
  21. data/lib/samanage/api/other_assets.rb +14 -14
  22. data/lib/samanage/api/problems.rb +17 -17
  23. data/lib/samanage/api/purchase_orders.rb +17 -17
  24. data/lib/samanage/api/releases.rb +14 -14
  25. data/lib/samanage/api/requester.rb +4 -2
  26. data/lib/samanage/api/sites.rb +10 -9
  27. data/lib/samanage/api/solutions.rb +15 -14
  28. data/lib/samanage/api/tasks.rb +39 -0
  29. data/lib/samanage/api/time_tracks.rb +8 -6
  30. data/lib/samanage/api/users.rb +32 -30
  31. data/lib/samanage/api/utils.rb +11 -9
  32. data/lib/samanage/api/vendors.rb +14 -13
  33. data/lib/samanage/error.rb +5 -4
  34. data/lib/samanage/language.rb +48 -46
  35. data/lib/samanage/url_builder.rb +27 -25
  36. data/lib/samanage/utils.rb +10 -8
  37. data/lib/samanage/version.rb +1 -1
  38. data/samanage.gemspec +11 -9
  39. data/spec/api/samanage_attachment_spec.rb +20 -19
  40. data/spec/api/samanage_category_spec.rb +12 -10
  41. data/spec/api/samanage_change_spec.rb +47 -44
  42. data/spec/api/samanage_comments_spec.rb +12 -10
  43. data/spec/api/samanage_contract_spec.rb +41 -35
  44. data/spec/api/samanage_custom_field_spec.rb +7 -5
  45. data/spec/api/samanage_custom_form_spec.rb +11 -9
  46. data/spec/api/samanage_department_spec.rb +20 -15
  47. data/spec/api/samanage_group_spec.rb +30 -28
  48. data/spec/api/samanage_hardware_spec.rb +44 -38
  49. data/spec/api/samanage_incident_spec.rb +79 -61
  50. data/spec/api/samanage_mobile_spec.rb +39 -34
  51. data/spec/api/samanage_other_asset_spec.rb +50 -44
  52. data/spec/api/samanage_problem_spec.rb +53 -46
  53. data/spec/api/samanage_purchase_order_spec.rb +43 -40
  54. data/spec/api/samanage_release_spec.rb +44 -40
  55. data/spec/api/samanage_site_spec.rb +18 -16
  56. data/spec/api/samanage_solution_spec.rb +16 -14
  57. data/spec/api/samanage_task_spec.rb +68 -0
  58. data/spec/api/samanage_time_tracks_spec.rb +41 -27
  59. data/spec/api/samanage_user_spec.rb +51 -46
  60. data/spec/api/samanage_util_spec.rb +13 -11
  61. data/spec/api/samanage_vendors_spec.rb +18 -16
  62. data/spec/samanage_api_spec.rb +27 -23
  63. data/spec/samanage_category_spec.rb +10 -8
  64. data/spec/samanage_language_spec.rb +12 -10
  65. data/spec/samanage_url_builder_spec.rb +11 -9
  66. data/spec/spec_helper.rb +6 -4
  67. metadata +5 -2
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $:.push File.expand_path("../lib", __FILE__)
2
- require 'samanage'
4
+ require "samanage"
3
5
 
4
6
  Gem::Specification.new do |s|
5
- s.name = 'samanage'
7
+ s.name = "samanage"
6
8
  s.version = Samanage::VERSION
7
9
  s.date = Date.today.strftime("%Y-%m-%d")
8
10
  s.summary = "Samanage Ruby Gem"
9
11
  s.description = "Connect to Samanage using Ruby!"
10
12
  s.authors = ["Chris Walls"]
11
- s.email = 'cwalls2908@gmail.com'
13
+ s.email = "cwalls2908@gmail.com"
12
14
  s.files = `git ls-files`.split("\n")
13
- s.homepage = 'https://github.com/cw2908/samanage-ruby'
14
- s.license = 'MIT'
15
+ s.homepage = "https://github.com/cw2908/samanage-ruby"
16
+ s.license = "MIT"
15
17
  s.require_paths = ["lib"]
16
- s.required_ruby_version = '>= 2.3'
17
- s.add_development_dependency 'httparty', ['0.16.4']
18
- s.add_runtime_dependency 'httparty', ['0.16.4']
19
- end
18
+ s.required_ruby_version = ">= 2.3"
19
+ s.add_development_dependency "httparty", ["0.16.4"]
20
+ s.add_runtime_dependency "httparty", ["0.16.4"]
21
+ end
@@ -1,43 +1,44 @@
1
+ # frozen_string_literal: true
1
2
 
2
- require 'samanage'
3
+ require "samanage"
3
4
  describe Samanage::Api do
4
- context 'Attachments' do
5
- describe 'API Functions' do
6
- before(:all) do
7
- TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
5
+ context "Attachments" do
6
+ describe "API Functions" do
7
+ before(:all) do
8
+ TOKEN ||= ENV["SAMANAGE_TEST_API_TOKEN"]
8
9
  @samanage = Samanage::Api.new(token: TOKEN)
9
10
  @users = @samanage.get_users[:data]
10
11
  @incidents = @samanage.incidents
11
12
  end
12
- it 'uploads an attachment' do
13
- filename = 'sample_file.txt'
13
+ it "uploads an attachment" do
14
+ filename = "sample_file.txt"
14
15
  filepath = File.join(Dir.pwd, filename)
15
- incident_id = @incidents.sample.dig('id')
16
+ incident_id = @incidents.sample.dig("id")
16
17
  attach = @samanage.create_attachment(
17
18
  filepath: filepath,
18
19
  attachable_id: incident_id,
19
- attachable_type: 'Incident'
20
+ attachable_type: "Incident"
20
21
  )
21
22
  expect(attach[:code]).to eq(200).or(201)
22
- expect(filename).to eq(attach[:data]['filename'])
23
- expect(File.open(filepath).size).to eq(attach[:data]['size'])
23
+ expect(filename).to eq(attach[:data]["filename"])
24
+ expect(File.open(filepath).size).to eq(attach[:data]["size"])
24
25
  end
25
- it 'downloads an attachment' do
26
- incident_id = @incidents.sample.dig('id')
27
- filename = 'sample_file.txt'
26
+ it "downloads an attachment" do
27
+ incident_id = @incidents.sample.dig("id")
28
+ filename = "sample_file.txt"
28
29
  filepath = File.join(Dir.pwd, filename)
29
30
  attach = @samanage.create_attachment(
30
31
  filepath: filepath,
31
32
  attachable_id: incident_id,
32
- attachable_type: 'Incident'
33
+ attachable_type: "Incident"
33
34
  )
34
35
  expect(attach[:code]).to eq(200).or(201)
35
36
  attachable_incident_id = incident_id # Need filter for has attachment?
36
- incident = @samanage.find_incident(id: attachable_incident_id, options: {layout: 'long'})
37
- attachment = @samanage.download_attachment(attachment: incident[:data]['attachments'].first)
37
+ incident = @samanage.find_incident(id: attachable_incident_id, options: { layout: "long" })
38
+ attachment = @samanage.download_attachment(attachment: incident[:data]["attachments"].first)
38
39
  expect(attachment.class).to be(File)
39
- expect(attachment.path.split('/').last).to eq(filename)
40
+ expect(attachment.path.split("/").last).to eq(filename)
40
41
  end
41
42
  end
42
43
  end
43
- end
44
+ end
@@ -1,18 +1,20 @@
1
- require 'samanage'
1
+ # frozen_string_literal: true
2
+
3
+ require "samanage"
2
4
  describe Samanage::Api do
3
- context 'category' do
5
+ context "category" do
4
6
  before(:all) do
5
- TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
7
+ TOKEN ||= ENV["SAMANAGE_TEST_API_TOKEN"]
6
8
  @samanage = Samanage::Api.new(token: TOKEN)
7
9
  @categories = @samanage.categories
8
10
  end
9
- it 'collects all categories' do
11
+ it "collects all categories" do
10
12
  expect(@categories).to be_an(Array)
11
13
  end
12
14
 
13
- it 'creates a category' do
14
- category_name = "Category Name ##{(rand*10**4).ceil}"
15
- category_description = "Descrption #{(rand*10**4).ceil}"
15
+ it "creates a category" do
16
+ category_name = "Category Name ##{(rand * 10**4).ceil}"
17
+ category_description = "Descrption #{(rand * 10**4).ceil}"
16
18
  payload = {
17
19
  category: {
18
20
  name: category_name,
@@ -21,9 +23,9 @@ describe Samanage::Api do
21
23
  }
22
24
  category_create = @samanage.create_category(payload: payload)
23
25
 
24
- expect(category_create[:data]['id']).to be_an(Integer)
25
- expect(category_create[:data]['name']).to eq(category_name)
26
+ expect(category_create[:data]["id"]).to be_an(Integer)
27
+ expect(category_create[:data]["name"]).to eq(category_name)
26
28
  expect(category_create[:code]).to eq(200).or(201)
27
29
  end
28
30
  end
29
- end
31
+ end
@@ -1,81 +1,84 @@
1
- require 'samanage'
1
+ # frozen_string_literal: true
2
+
3
+ require "samanage"
2
4
  describe Samanage::Api do
3
- context 'changes' do
4
- describe 'API Functions' do
5
- before(:all) do
6
- TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
7
- @samanage = Samanage::Api.new(token: TOKEN)
8
- @changes = @samanage.changes
9
- @users = @samanage.get_users[:data]
10
- end
11
- it 'get_changes: it returns API call of changes' do
5
+ context "changes" do
6
+ describe "API Functions" do
7
+ before(:all) do
8
+ TOKEN ||= ENV["SAMANAGE_TEST_API_TOKEN"]
9
+ @samanage = Samanage::Api.new(token: TOKEN)
10
+ @changes = @samanage.changes
11
+ @users = @samanage.get_users[:data]
12
+ end
13
+ it "get_changes: it returns API call of changes" do
12
14
  api_call = @samanage.get_changes
13
15
  expect(api_call).to be_a(Hash)
14
16
  expect(api_call[:total_count]).to be_an(Integer)
15
17
  expect(api_call).to have_key(:response)
16
18
  expect(api_call).to have_key(:code)
17
19
  end
18
- it 'collect_changes: collects array of changes' do
20
+ it "collect_changes: collects array of changes" do
19
21
  change_count = @samanage.get_changes[:total_count]
20
22
  @changes = @samanage.changes
21
23
  expect(@changes).to be_an(Array)
22
24
  expect(@changes.size).to eq(change_count)
23
25
  end
24
- it 'create_change(payload: json): creates a change' do
25
- users_email = @samanage.collect_users.sample['email']
26
+ it "create_change(payload: json): creates a change" do
27
+ users_email = @samanage.collect_users.sample["email"]
26
28
  change_name = "Samanage Ruby change"
27
29
  json = {
28
30
  change: {
29
- requester: {email: users_email},
31
+ requester: { email: users_email },
30
32
  name: change_name,
31
- priority: 'Low',
33
+ priority: "Low",
32
34
  description: "Description"
33
35
  }
34
36
  }
35
37
  change_create = @samanage.create_change(payload: json)
36
38
 
37
- expect(change_create[:data]['id']).to be_an(Integer)
38
- expect(change_create[:data]['name']).to eq(change_name)
39
+ expect(change_create[:data]["id"]).to be_an(Integer)
40
+ expect(change_create[:data]["name"]).to eq(change_name)
39
41
  expect(change_create[:code]).to eq(200).or(201)
40
42
  end
41
- it 'create_change: fails if no name/title' do
42
- users_email = @users.sample['email']
43
+ it "create_change: fails if no name/title" do
44
+ users_email = @users.sample["email"]
43
45
  json = {
44
- :change => {
45
- :requester => {:email => users_email},
46
- :description => "Description"
46
+ change: {
47
+ requester: { email: users_email },
48
+ description: "Description"
47
49
  }
48
50
  }
49
- expect{@samanage.create_change(payload: json)}.to raise_error(Samanage::InvalidRequest)
51
+ expect { @samanage.create_change(payload: json) }.to raise_error(Samanage::InvalidRequest)
50
52
  end
51
- it 'find_change: returns a change card by known id' do
52
- sample_id = @changes.sample['id']
53
+ it "find_change: returns a change card by known id" do
54
+ sample_id = @changes.sample["id"]
53
55
  change = @samanage.find_change(id: sample_id)
54
- expect(change[:data]['id']).to eq(sample_id) # id should match found change
55
- expect(change[:data]).to have_key('name')
56
- expect(change[:data]).to have_key('requester')
57
- expect(change[:data]).to have_key('id')
56
+ expect(change[:data]["id"]).to eq(sample_id) # id should match found change
57
+ expect(change[:data]).to have_key("name")
58
+ expect(change[:data]).to have_key("requester")
59
+ expect(change[:data]).to have_key("id")
58
60
  end
59
- it 'find_change: returns more keys with layout=long' do
60
- sample_id = @changes.sample['id']
61
+ it "find_change: returns more keys with layout=long" do
62
+ sample_id = @changes.sample["id"]
61
63
  layout_regular_change = @samanage.find_change(id: sample_id)
62
- layout_long_change = @samanage.find_change(id: sample_id, options: {layout: 'long'})
64
+ layout_long_change = @samanage.find_change(id: sample_id, options: { layout: "long" })
63
65
 
64
- expect(layout_long_change[:data]['id']).to eq(sample_id) # id should match found change
66
+ expect(layout_long_change[:data]["id"]).to eq(sample_id) # id should match found change
65
67
  expect(layout_long_change[:data].keys.size).to be > (layout_regular_change.keys.size)
66
68
  expect(layout_long_change[:data].keys - layout_regular_change[:data].keys).to_not be([])
67
69
  end
68
- it 'find_change: returns nothing for an invalid id' do
70
+ it "find_change: returns nothing for an invalid id" do
69
71
  sample_id = (0..10).entries.sample
70
- expect{@samanage.find_change(id: sample_id)}.to raise_error(Samanage::NotFound) # id should match found change
72
+ # id should match found change
73
+ expect { @samanage.find_change(id: sample_id) }.to raise_error(Samanage::NotFound)
71
74
  end
72
- it 'update_change: update_change by id' do
73
- sample_change = @changes.reject{|i| ['Closed','Resolved'].include? i['state']}.sample
74
- sample_id = sample_change['id']
75
- description = (0...500).map { ('a'..'z').to_a[rand(26)] }.join
75
+ it "update_change: update_change by id" do
76
+ sample_change = @changes.reject { |i| ["Closed", "Resolved"].include? i["state"] }.sample
77
+ sample_id = sample_change["id"]
78
+ description = (0...500).map { ("a".."z").to_a[rand(26)] }.join
76
79
  change_json = {
77
- :change => {
78
- :description => description
80
+ change: {
81
+ description: description
79
82
  }
80
83
  }
81
84
  change_update = @samanage.update_change(payload: change_json, id: sample_id)
@@ -83,12 +86,12 @@ describe Samanage::Api do
83
86
  expect(change_update[:code]).to eq(200).or(201)
84
87
  end
85
88
  it 'finds more data for option[:layout] = "long"' do
86
- full_layout_change_keys = @samanage.changes(options: {layout: 'long'}).first.keys
89
+ full_layout_change_keys = @samanage.changes(options: { layout: "long" }).first.keys
87
90
  basic_change_keys = @samanage.changes.sample.keys
88
91
  expect(basic_change_keys.size).to be < full_layout_change_keys.size
89
92
  end
90
- it 'deletes a valid change' do
91
- sample_change_id = @changes.sample['id']
93
+ it "deletes a valid change" do
94
+ sample_change_id = @changes.sample["id"]
92
95
  change_delete = @samanage.delete_change(id: sample_change_id)
93
96
  expect(change_delete[:code]).to eq(200).or(201)
94
97
  end
@@ -1,21 +1,23 @@
1
- require 'samanage'
1
+ # frozen_string_literal: true
2
+
3
+ require "samanage"
2
4
  describe Samanage::Api do
3
- context 'Comments' do
5
+ context "Comments" do
4
6
  before(:all) do
5
- TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
7
+ TOKEN ||= ENV["SAMANAGE_TEST_API_TOKEN"]
6
8
  @samanage = Samanage::Api.new(token: TOKEN)
7
9
  @incidents = @samanage.get_incidents[:data]
8
10
  end
9
- describe 'API Functions' do
10
- it 'gets comments' do
11
- incident_id = @incidents.sample.dig('id')
11
+ describe "API Functions" do
12
+ it "gets comments" do
13
+ incident_id = @incidents.sample.dig("id")
12
14
  comments = @samanage.get_comments(incident_id: incident_id)
13
15
  expect(comments).to be_a(Hash)
14
16
  end
15
17
 
16
- it 'creates a comment' do
17
- incident_id = @incidents.sample.dig('id')
18
- rand_text = ('a'..'z').to_a.shuffle[0,8].join
18
+ it "creates a comment" do
19
+ incident_id = @incidents.sample.dig("id")
20
+ rand_text = ("a".."z").to_a.shuffle[0, 8].join
19
21
  comment = {
20
22
  comment: {
21
23
  body: rand_text,
@@ -23,7 +25,7 @@ describe Samanage::Api do
23
25
  }
24
26
  api_call = @samanage.create_comment(incident_id: incident_id, comment: comment)
25
27
 
26
- expect(api_call.dig(:data,'body')).to eq(rand_text)
28
+ expect(api_call.dig(:data, "body")).to eq(rand_text)
27
29
  end
28
30
  end
29
31
  end
@@ -1,66 +1,72 @@
1
- require 'samanage'
1
+ # frozen_string_literal: true
2
+
3
+ require "samanage"
2
4
 
3
5
  describe Samanage::Api do
4
- context 'Contract' do
5
- describe 'API Fucntions' do
6
- before(:all) do
7
- TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
6
+ context "Contract" do
7
+ describe "API Fucntions" do
8
+ before(:all) do
9
+ TOKEN ||= ENV["SAMANAGE_TEST_API_TOKEN"]
8
10
  @samanage = Samanage::Api.new(token: TOKEN)
9
11
  @contracts = @samanage.contracts
10
12
  end
11
- it 'get_contracts: it returns API call of contracts' do
13
+ it "get_contracts: it returns API call of contracts" do
12
14
  api_call = @samanage.get_contracts
13
15
  expect(api_call).to be_a(Hash)
14
16
  expect(api_call[:total_count]).to be_an(Integer)
15
17
  expect(api_call).to have_key(:response)
16
18
  expect(api_call).to have_key(:code)
17
19
  end
18
- it 'collect_contracts: collects array of contracts' do
20
+ it "collect_contracts: collects array of contracts" do
19
21
  contract_count = @samanage.get_contracts[:total_count]
20
22
  expect(@contracts).to be_an(Array)
21
23
  expect(@contracts.size).to eq(contract_count)
22
24
  end
23
- it 'create_contract(payload: json): creates a contract' do
25
+ it "create_contract(payload: json): creates a contract" do
24
26
  random_name = Faker::Artist.name
25
27
  json = {
26
28
  contract: {
27
- type: 'SoftwareLicense',
28
- manufacturer_name: 'Adobe',
29
- status: 'Active',
29
+ type: "SoftwareLicense",
30
+ manufacturer_name: "Adobe",
31
+ status: "Active",
30
32
  name: random_name,
31
33
  }
32
34
  }
33
35
  contract_create = @samanage.create_contract(payload: json)
34
36
 
35
- expect(contract_create[:data]['id']).to be_an(Integer)
36
- expect(contract_create[:data]['name']).to eq(random_name)
37
+ expect(contract_create[:data]["id"]).to be_an(Integer)
38
+ expect(contract_create[:data]["name"]).to eq(random_name)
37
39
  end
38
- it 'create_contract: fails if no status' do
40
+ it "create_contract: fails if no status" do
39
41
  contract_name = Faker::Ancient.god
40
42
  json = {
41
- :contract => {
42
- model: 'test',
43
+ contract: {
44
+ model: "test",
43
45
  manufacturer_name: contract_name,
44
46
  }
45
47
  }
46
- expect{@samanage.create_contract(payload: json)}.to raise_error(Samanage::InvalidRequest)
48
+ expect {
49
+ @samanage.create_contract(payload: json)
50
+ }.to raise_error(Samanage::InvalidRequest)
47
51
  end
48
- it 'find_contract: returns a contract card by known id' do
49
- sample_id = @contracts.sample['id']
52
+ it "find_contract: returns a contract card by known id" do
53
+ sample_id = @contracts.sample["id"]
50
54
  contract = @samanage.find_contract(id: sample_id)
51
55
 
52
- expect(contract[:data]['id']).to eq(sample_id) # id should match found contract
53
- expect(contract[:data]).to have_key('manufacturer_name')
54
- expect(contract[:data]).to have_key('name')
55
- expect(contract[:data]).to have_key('id')
56
+ expect(contract[:data]["id"]).to eq(sample_id) # id should match found contract
57
+ expect(contract[:data]).to have_key("manufacturer_name")
58
+ expect(contract[:data]).to have_key("name")
59
+ expect(contract[:data]).to have_key("id")
56
60
  end
57
- it 'find_contract: returns nothing for an invalid id' do
61
+ it "find_contract: returns nothing for an invalid id" do
58
62
  sample_id = (0..10).entries.sample
59
- expect{@samanage.find_contract(id: sample_id)}.to raise_error(Samanage::NotFound) # id should match found contract
63
+ expect {
64
+ @samanage.find_contract(id: sample_id)
65
+ }.to raise_error(Samanage::NotFound) # id should match found contract
60
66
  end
61
- it 'update_contract: update_contract by id' do
62
- sample_id = @contracts.sample['id']
63
- new_name = Faker::Company.name
67
+ it "update_contract: update_contract by id" do
68
+ sample_id = @contracts.sample["id"]
69
+ new_name = Faker::Company.name
64
70
  json = {
65
71
  contract: {
66
72
  manufacturer_name: new_name
@@ -70,12 +76,12 @@ describe Samanage::Api do
70
76
  expect(contract_update[:data]["manufacturer_name"]).to eq(new_name)
71
77
  expect(contract_update[:code]).to eq(200).or(201)
72
78
  end
73
- it 'adds an item to a contract by id' do
74
- sample_id = @contracts.sample['id']
79
+ it "adds an item to a contract by id" do
80
+ sample_id = @contracts.sample["id"]
75
81
  item = {
76
82
  item: {
77
- name: Faker::Company.catch_phrase ,
78
- version:" 123",
83
+ name: Faker::Company.catch_phrase,
84
+ version: " 123",
79
85
  qty: "2",
80
86
  tag: Faker::Company.profession,
81
87
  }
@@ -83,11 +89,11 @@ describe Samanage::Api do
83
89
  add_item = @samanage.add_item_to_contract(id: sample_id, payload: item)
84
90
  expect(add_item[:code]).to eq(200).or(201)
85
91
  end
86
- it 'deletes a valid contract' do
87
- sample_contract_id = @contracts.sample['id']
92
+ it "deletes a valid contract" do
93
+ sample_contract_id = @contracts.sample["id"]
88
94
  contract_delete = @samanage.delete_contract(id: sample_contract_id)
89
95
  expect(contract_delete[:code]).to eq(200).or(201)
90
96
  end
91
97
  end
92
98
  end
93
- end
99
+ end