gds_zendesk 3.2.0 → 3.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2ce09664299a6802632a0dc10966d37c4adf67d53efbf2368240a4d96401139
4
- data.tar.gz: fe832fb5483d5d9363614b984f2d89903742be31175b5839ab9bf515a7164b62
3
+ metadata.gz: 212f75df35d4fbe686de231d98ea2bf37e38e135e58d80c92e1a650b4f393327
4
+ data.tar.gz: ab77b135f4a7e10107eef99fff1d221409902ca8458d73caedd3b760e553221d
5
5
  SHA512:
6
- metadata.gz: 20a8002750b0376ba9ec27ed501cf91f84372259918cb3aff80571e375bb8a1a81121d303da41cbd6f2ad5f175006871cbda40e43b5d332ff50cf64239fee619
7
- data.tar.gz: 3d68d792fa0e783e96761d04ca23c17d9b4b96ac71bb5d72e6f2a5a57177eef8fe3ed8466b572feca0dc2383b0163813a13146c331bee3269e77be19b322c49d
6
+ metadata.gz: fdaf04d4cdf2fa3fd2b5d7cc48f93130008a4cf134372e97bf622d38872d6d56655dfa7f232f3a52c0474e673b9dbd04c9571a72a2d04c7fbc139afb3284879b
7
+ data.tar.gz: 94112efde5839d160cdac16d10aa50cc60e665d1e33ee5ddf219fca4bf3ec837e2c7d3f36c44b930910e4932a25836816510e839021f7c003cbebf9508a58afe
data/.rubocop.yml ADDED
@@ -0,0 +1,7 @@
1
+ inherit_gem:
2
+ rubocop-govuk:
3
+ - config/default.yml
4
+
5
+ inherit_mode:
6
+ merge:
7
+ - Exclude
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 3.3.0
2
+
3
+ * Allow access to Zendesk::Client from GDSZendesk::Client
4
+
1
5
  # 3.2.0
2
6
 
3
7
  * Allow use of a token instead of password
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -53,3 +53,11 @@ GDSZendesk::Client.new(config_options)
53
53
  ```
54
54
 
55
55
  to create a new client.
56
+
57
+ ## Running tests locally
58
+
59
+ To run the tests, use the follow:
60
+
61
+ ```
62
+ bundle exec rake default
63
+ ```
data/Rakefile CHANGED
@@ -1,7 +1,13 @@
1
1
  require "rake"
2
+ require "rubocop/rake_task"
2
3
  require "bundler/gem_tasks"
3
- require 'rspec/core/rake_task'
4
+ require "rspec/core/rake_task"
4
5
 
6
+ RuboCop::RakeTask.new
5
7
  RSpec::Core::RakeTask.new(:spec)
6
8
 
7
- task :default => :spec
9
+ desc "Linting for Ruby"
10
+ task lint: %i[rubocop] do
11
+ end
12
+
13
+ task default: %i[lint spec]
data/gds_zendesk.gemspec CHANGED
@@ -1,26 +1,26 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'gds_zendesk/version'
3
+ require "gds_zendesk/version"
5
4
 
6
5
  Gem::Specification.new do |gem|
7
6
  gem.name = "gds_zendesk"
8
7
  gem.version = GDSZendesk::VERSION
9
8
  gem.authors = ["GOV.UK Dev"]
10
9
  gem.email = ["govuk-dev@digital.cabinet-office.gov.uk"]
11
- gem.description = %q{Client and models for communicating with Zendesk}
12
- gem.summary = %q{Client and models for communicating with Zendesk}
10
+ gem.description = "Client and models for communicating with Zendesk"
11
+ gem.summary = "Client and models for communicating with Zendesk"
13
12
  gem.homepage = "https://github.com/alphagov/gds_zendesk"
14
13
 
15
- gem.files = `git ls-files`.split($/)
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
15
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
17
+ gem.require_paths = %w[lib]
19
18
 
20
- gem.add_dependency 'null_logger', '~> 0'
21
- gem.add_dependency 'zendesk_api', '~> 1.27'
19
+ gem.add_dependency "null_logger", "~> 0"
20
+ gem.add_dependency "zendesk_api", "~> 1.27"
22
21
 
23
- gem.add_development_dependency 'rake', '~> 10'
24
- gem.add_development_dependency 'rspec', '~> 3'
25
- gem.add_development_dependency 'webmock', '~> 2'
22
+ gem.add_development_dependency "rake", "~> 10"
23
+ gem.add_development_dependency "rspec", "~> 3"
24
+ gem.add_development_dependency "rubocop-govuk", "~> 3"
25
+ gem.add_development_dependency "webmock", "~> 2"
26
26
  end
@@ -1,8 +1,8 @@
1
- require 'forwardable'
2
- require 'null_logger'
3
- require 'zendesk_api'
1
+ require "forwardable"
2
+ require "null_logger"
3
+ require "zendesk_api"
4
4
 
5
- require 'gds_zendesk/users'
5
+ require "gds_zendesk/users"
6
6
 
7
7
  module GDSZendesk
8
8
  class Client
@@ -10,6 +10,7 @@ module GDSZendesk
10
10
  def_delegators :@zendesk_client, :ticket
11
11
 
12
12
  attr_accessor :config_options
13
+ attr_reader :zendesk_client
13
14
 
14
15
  def initialize(config_options)
15
16
  @config_options = defaults.merge(config_options)
@@ -23,16 +24,17 @@ module GDSZendesk
23
24
  def build
24
25
  check_that_username_and_password_are_provided
25
26
 
26
- ZendeskAPI::Client.new { |config|
27
+ ZendeskAPI::Client.new do |config|
27
28
  config.url = url
28
29
  config.username = username
29
30
  config.token = token if token
30
31
  config.password = password if password
31
32
  config.logger = logger
32
- }
33
+ end
33
34
  end
34
35
 
35
- protected
36
+ protected
37
+
36
38
  def logger
37
39
  @config_options[:logger] || @config_options["logger"]
38
40
  end
@@ -61,9 +63,9 @@ module GDSZendesk
61
63
 
62
64
  def defaults
63
65
  {
64
- logger: NullLogger.instance,
65
- url: "https://govuk.zendesk.com/api/v2/"
66
+ logger: NullLogger.instance,
67
+ url: "https://govuk.zendesk.com/api/v2/",
66
68
  }
67
69
  end
68
70
  end
69
- end
71
+ end
@@ -1,5 +1,5 @@
1
- require 'null_logger'
2
- require 'zendesk_api/error'
1
+ require "null_logger"
2
+ require "zendesk_api/error"
3
3
 
4
4
  module GDSZendesk
5
5
  class DummyClient
@@ -23,13 +23,14 @@ module GDSZendesk
23
23
  @options = options
24
24
  if should_raise_error?
25
25
  @logger.info("Simulating Zendesk ticket creation failure: #{options.inspect}")
26
- raise ZendeskAPI::Error::RecordInvalid.new(body: {"details" => "sample error message from Zendesk"})
26
+ raise ZendeskAPI::Error::RecordInvalid.new(body: { "details" => "sample error message from Zendesk" })
27
27
  else
28
28
  @logger.info("Zendesk ticket created: #{options.inspect}")
29
29
  end
30
30
  end
31
31
 
32
- protected
32
+ protected
33
+
33
34
  def should_raise_error?
34
35
  description =~ /break_zendesk/ or comment =~ /break_zendesk/
35
36
  end
@@ -48,11 +49,11 @@ module GDSZendesk
48
49
  @logger = logger
49
50
  end
50
51
 
51
- def search(attributes)
52
+ def search(_attributes)
52
53
  []
53
54
  end
54
55
 
55
- def suspended?(user_email)
56
+ def suspended?(_user_email)
56
57
  false
57
58
  end
58
59
 
@@ -1,55 +1,55 @@
1
- require 'json'
1
+ require "json"
2
2
 
3
3
  module GDSZendesk
4
4
  module TestHelpers
5
5
  def zendesk_has_no_user_with_email(email)
6
- stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{email}").
7
- with(basic_auth: basic_auth_credentials).
8
- to_return(body: {users: [], previous_page: nil, next_page: nil, count: 0}.to_json,
9
- headers: {'Content-Type' => 'application/json'})
6
+ stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{email}")
7
+ .with(basic_auth: basic_auth_credentials)
8
+ .to_return(body: { users: [], previous_page: nil, next_page: nil, count: 0 }.to_json,
9
+ headers: { "Content-Type" => "application/json" })
10
10
  end
11
11
 
12
12
  def zendesk_has_user(user_details)
13
- stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{user_details[:email]}").
14
- with(basic_auth: basic_auth_credentials).
15
- to_return(body: {users: [user_details], previous_page: nil, next_page: nil, count: 1}.to_json,
16
- headers: {'Content-Type' => 'application/json'})
13
+ stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{user_details[:email]}")
14
+ .with(basic_auth: basic_auth_credentials)
15
+ .to_return(body: { users: [user_details], previous_page: nil, next_page: nil, count: 1 }.to_json,
16
+ headers: { "Content-Type" => "application/json" })
17
17
  end
18
18
 
19
19
  def stub_zendesk_user_creation(user_properties = nil)
20
20
  stub = stub_request(:post, "#{zendesk_endpoint}/users")
21
- stub.with(body: {user: user_properties}) unless user_properties.nil?
21
+ stub.with(body: { user: user_properties }) unless user_properties.nil?
22
22
  stub.with(basic_auth: basic_auth_credentials)
23
- stub.to_return(status: 201, body: { user: { id: 12345, name: "abc" }}.to_json,
24
- headers: {'Content-Type' => 'application/json'})
23
+ stub.to_return(status: 201, body: { user: { id: 12_345, name: "abc" } }.to_json,
24
+ headers: { "Content-Type" => "application/json" })
25
25
  end
26
26
 
27
27
  def stub_zendesk_ticket_creation(ticket_properties = nil)
28
28
  stub = stub_request(:post, "#{zendesk_endpoint}/tickets")
29
- stub.with(body: {ticket: ticket_properties}) unless ticket_properties.nil?
29
+ stub.with(body: { ticket: ticket_properties }) unless ticket_properties.nil?
30
30
  stub.with(basic_auth: basic_auth_credentials)
31
- stub.to_return(status: 201, body: { ticket: { id: 12345 }}.to_json,
32
- headers: {'Content-Type' => 'application/json'})
31
+ stub.to_return(status: 201, body: { ticket: { id: 12_345 } }.to_json,
32
+ headers: { "Content-Type" => "application/json" })
33
33
  end
34
34
 
35
35
  def stub_zendesk_ticket_creation_with_body(body)
36
- stub_request(:post, "#{zendesk_endpoint}/tickets").
37
- with(body: body).
38
- with(basic_auth: basic_auth_credentials).
39
- to_return(status: 201, body: { ticket: { id: 12345 }}.to_json,
40
- headers: {'Content-Type' => 'application/json'})
36
+ stub_request(:post, "#{zendesk_endpoint}/tickets")
37
+ .with(body: body)
38
+ .with(basic_auth: basic_auth_credentials)
39
+ .to_return(status: 201, body: { ticket: { id: 12_345 } }.to_json,
40
+ headers: { "Content-Type" => "application/json" })
41
41
  end
42
42
 
43
43
  def stub_zendesk_user_update(user_id, user_properties)
44
- stub_request(:put, "#{zendesk_endpoint}/users/#{user_id}").
45
- with(body: {user: user_properties}).
46
- with(basic_auth: basic_auth_credentials).
47
- to_return(status: 201, body: { user: { id: 12345, name: "abc" }}.to_json,
48
- headers: {'Content-Type' => 'application/json'})
44
+ stub_request(:put, "#{zendesk_endpoint}/users/#{user_id}")
45
+ .with(body: { user: user_properties })
46
+ .with(basic_auth: basic_auth_credentials)
47
+ .to_return(status: 201, body: { user: { id: 12_345, name: "abc" } }.to_json,
48
+ headers: { "Content-Type" => "application/json" })
49
49
  end
50
50
 
51
51
  def basic_auth_credentials
52
- [valid_zendesk_credentials['username'], valid_zendesk_credentials['password']]
52
+ [valid_zendesk_credentials["username"], valid_zendesk_credentials["password"]]
53
53
  end
54
54
 
55
55
  def zendesk_is_unavailable
@@ -78,12 +78,12 @@ module GDSZendesk
78
78
 
79
79
  def assert_created_ticket_has(ticket_options)
80
80
  assert_requested :post, %r{/api/v2/tickets},
81
- body: { ticket: hash_including(ticket_options) }, times: 1
81
+ body: { ticket: hash_including(ticket_options) }, times: 1
82
82
  end
83
83
 
84
84
  def assert_created_ticket_has_requester(requester_options)
85
85
  assert_requested :post, %r{/api/v2/tickets},
86
- body: { ticket: hash_including(requester: hash_including(requester_options)) }, times: 1
86
+ body: { ticket: hash_including(requester: hash_including(requester_options)) }, times: 1
87
87
  end
88
88
  end
89
89
  end
@@ -24,7 +24,8 @@ module GDSZendesk
24
24
  end
25
25
  end
26
26
 
27
- protected
27
+ protected
28
+
28
29
  def find_by_email(email)
29
30
  @client.users.search(query: email).to_a
30
31
  end
@@ -46,4 +47,4 @@ module GDSZendesk
46
47
  existing_user_in_zendesk
47
48
  end
48
49
  end
49
- end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module GDSZendesk
2
- VERSION = "3.2.0"
2
+ VERSION = "3.3.0".freeze
3
3
  end
@@ -1,19 +1,19 @@
1
- INITIALIZER = <<END
2
- require 'yaml'
3
- require 'gds_zendesk/client'
4
- require 'gds_zendesk/dummy_client'
5
-
6
- GDS_ZENDESK_CLIENT = if Rails.env.development? || Rails.env.test?
7
- GDSZendesk::DummyClient.new(logger: Rails.logger)
8
- else
9
- config_yaml_file = File.join(Rails.root, 'config', 'zendesk.yml')
10
- config = YAML.load_file(config_yaml_file)[Rails.env]
11
- GDSZendesk::Client.new(username: config['username'], password: config['password'], token: config['token'], logger: Rails.logger)
12
- end
13
- END
1
+ INITIALIZER = <<~RUBY.freeze
2
+ require 'yaml'
3
+ require 'gds_zendesk/client'
4
+ require 'gds_zendesk/dummy_client'
5
+
6
+ GDS_ZENDESK_CLIENT = if Rails.env.development? || Rails.env.test?
7
+ GDSZendesk::DummyClient.new(logger: Rails.logger)
8
+ else
9
+ config_yaml_file = File.join(Rails.root, 'config', 'zendesk.yml')
10
+ config = YAML.load_file(config_yaml_file)[Rails.env]
11
+ GDSZendesk::Client.new(username: config['username'], password: config['password'], token: config['token'], logger: Rails.logger)
12
+ end
13
+ RUBY
14
14
 
15
15
  # This module name is slightly differently capitalised to the main library module
16
- # The reason for this is that the module name is used by Rails within the
16
+ # The reason for this is that the module name is used by Rails within the
17
17
  # generator CLI tools, and the tools get confused if the module is called GDSZendesk
18
18
  module GdsZendesk
19
19
  class InstallGenerator < Rails::Generators::Base
@@ -1,7 +1,7 @@
1
- require 'spec_helper'
2
- require 'gds_zendesk/test_helpers'
3
- require 'gds_zendesk/client'
4
- require 'null_logger'
1
+ require "spec_helper"
2
+ require "gds_zendesk/test_helpers"
3
+ require "gds_zendesk/client"
4
+ require "null_logger"
5
5
 
6
6
  module GDSZendesk
7
7
  describe Client do
@@ -17,27 +17,27 @@ module GDSZendesk
17
17
 
18
18
  it "should raise an error if no username is provided" do
19
19
  expect { Client.new(password: "abc") }.to raise_error(ArgumentError,
20
- /username not provided/)
20
+ /username not provided/)
21
21
  end
22
22
 
23
23
  it "should raise an error if no password or token is provided" do
24
24
  expect { Client.new(username: "abc") }.to raise_error(ArgumentError,
25
- /password or token not provided/)
25
+ /password or token not provided/)
26
26
  end
27
27
 
28
28
  it "should raise an error if token and password are provided" do
29
29
  expect { Client.new(username: "abc", token: "def", password: "ghi") }.to raise_error(ArgumentError,
30
- /Provide only one of token or password/)
30
+ /Provide only one of token or password/)
31
31
  end
32
32
 
33
33
  it "should not raise an error if token is provided without password" do
34
34
  expect { Client.new(username: "abc", token: "def") }.not_to raise_error(ArgumentError,
35
- /password or token not provided/)
35
+ /password or token not provided/)
36
36
  end
37
37
 
38
38
  it "should not raise an error if password is provided without token" do
39
39
  expect { Client.new(username: "abc", password: "def") }.not_to raise_error(ArgumentError,
40
- /password or token not provided/)
40
+ /password or token not provided/)
41
41
  end
42
42
 
43
43
  it "should use a null logger if no logger has been provided" do
@@ -1,4 +1,4 @@
1
- require 'gds_zendesk/dummy_client'
1
+ require "gds_zendesk/dummy_client"
2
2
 
3
3
  module GDSZendesk
4
4
  describe DummyClient do
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- require 'gds_zendesk/client'
4
- require 'gds_zendesk/users'
5
- require 'gds_zendesk/test_helpers'
3
+ require "gds_zendesk/client"
4
+ require "gds_zendesk/users"
5
+ require "gds_zendesk/test_helpers"
6
6
 
7
7
  module GDSZendesk
8
8
  describe Users do
@@ -46,10 +46,10 @@ module GDSZendesk
46
46
  name: "Abc",
47
47
  email: "test@test.com",
48
48
  phone: "12345",
49
- details: "Job title: Developer"
49
+ details: "Job title: Developer",
50
50
  )
51
51
  user_being_requested = double("requested user",
52
- name: "Abc", email: "test@test.com", phone: "12345", job: "Developer")
52
+ name: "Abc", email: "test@test.com", phone: "12345", job: "Developer")
53
53
 
54
54
  users.create_or_update_user(user_being_requested)
55
55
  expect(stub_post).to have_been_requested
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,3 @@
1
- require 'webmock/rspec'
1
+ require "webmock/rspec"
2
2
 
3
- WebMock.disable_net_connect!(:allow_localhost => true)
3
+ WebMock.disable_net_connect!(allow_localhost: true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds_zendesk
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-29 00:00:00.000000000 Z
11
+ date: 2022-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: null_logger
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-govuk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: webmock
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +102,7 @@ extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
104
  - ".gitignore"
105
+ - ".rubocop.yml"
91
106
  - ".ruby-version"
92
107
  - CHANGELOG.md
93
108
  - Gemfile
@@ -125,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
140
  - !ruby/object:Gem::Version
126
141
  version: '0'
127
142
  requirements: []
128
- rubygems_version: 3.1.2
143
+ rubygems_version: 3.0.3
129
144
  signing_key:
130
145
  specification_version: 4
131
146
  summary: Client and models for communicating with Zendesk