gds_zendesk 3.2.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2ce09664299a6802632a0dc10966d37c4adf67d53efbf2368240a4d96401139
4
- data.tar.gz: fe832fb5483d5d9363614b984f2d89903742be31175b5839ab9bf515a7164b62
3
+ metadata.gz: 1806a756294d190c9e4d338680319a62d49b1f6df2cf0baa0ea889b798fd0eaf
4
+ data.tar.gz: b2e7543717d7211fc9f84b8805b9c78c135a984668c64ea11ace577190f99012
5
5
  SHA512:
6
- metadata.gz: 20a8002750b0376ba9ec27ed501cf91f84372259918cb3aff80571e375bb8a1a81121d303da41cbd6f2ad5f175006871cbda40e43b5d332ff50cf64239fee619
7
- data.tar.gz: 3d68d792fa0e783e96761d04ca23c17d9b4b96ac71bb5d72e6f2a5a57177eef8fe3ed8466b572feca0dc2383b0163813a13146c331bee3269e77be19b322c49d
6
+ metadata.gz: 3720fe9f23d27c3213b2999454aa734bece0bb255dd0d5adb9685f042b3809b0e65a4cc1b402d497e55f9f02201317f91e2dae49d29573de2a09e3990d97f991
7
+ data.tar.gz: da36985b5c8ebdcb65ab3864b85af2d3190f944176c09cda0bf6c280e3c94a7b0424601bf4cfa85c9ab10f72eb09a6e4dd4d888a65cd4ba45c340f50bc9825df
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: /
5
+ schedule:
6
+ interval: daily
7
+ - package-ecosystem: "github-actions"
8
+ directory: /
9
+ schedule:
10
+ interval: daily
@@ -0,0 +1,35 @@
1
+ on: [push, pull_request]
2
+
3
+ jobs:
4
+ test_matrix:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
9
+ ruby: ['3.0', 3.1, 3.2]
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ - uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: ${{ matrix.ruby }}
16
+ bundler-cache: true
17
+ - run: bundle exec rake
18
+
19
+ # Branch protection rules cannot directly depend on status checks from matrix jobs.
20
+ # So instead we define `test` as a dummy job which only runs after the preceding `test_matrix` checks have passed.
21
+ # Solution inspired by: https://github.community/t/status-check-for-a-matrix-jobs/127354/3
22
+ test:
23
+ needs: test_matrix
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - run: echo "All matrix tests have passed 🚀"
27
+
28
+ publish:
29
+ needs: test
30
+ if: ${{ github.ref == 'refs/heads/main' }}
31
+ permissions:
32
+ contents: write
33
+ uses: alphagov/govuk-infrastructure/.github/workflows/publish-rubygem.yml@main
34
+ secrets:
35
+ GEM_HOST_API_KEY: ${{ secrets.ALPHAGOV_RUBYGEMS_API_KEY }}
data/.gitignore CHANGED
@@ -1,17 +1,2 @@
1
1
  *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
2
  Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ inherit_gem:
2
+ rubocop-govuk:
3
+ - config/default.yml
4
+ - config/rspec.yml
5
+
6
+ inherit_mode:
7
+ merge:
8
+ - Exclude
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.6
1
+ 3.0.5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 3.4.0
2
+
3
+ * Drop support for Ruby 2.7 and below.
4
+ * Require a `zendesk_api` of ">= 1.37", "< 3.0"
5
+
6
+ # 3.3.0
7
+
8
+ * Allow access to Zendesk::Client from GDSZendesk::Client
9
+
1
10
  # 3.2.0
2
11
 
3
12
  * 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,14 @@ 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
+ ```
64
+ # Licence
65
+
66
+ [MIT License](LICENCE)
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
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
+ task default: %i[rubocop spec]
data/gds_zendesk.gemspec CHANGED
@@ -1,26 +1,28 @@
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.required_ruby_version = ">= 3.0"
15
+
16
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
19
+ gem.require_paths = %w[lib]
19
20
 
20
- gem.add_dependency 'null_logger', '~> 0'
21
- gem.add_dependency 'zendesk_api', '~> 1.27'
21
+ gem.add_dependency "null_logger", "~> 0"
22
+ gem.add_dependency "zendesk_api", ">= 1.37", "< 3.0"
22
23
 
23
- gem.add_development_dependency 'rake', '~> 10'
24
- gem.add_development_dependency 'rspec', '~> 3'
25
- gem.add_development_dependency 'webmock', '~> 2'
24
+ gem.add_development_dependency "rake"
25
+ gem.add_development_dependency "rspec", "~> 3"
26
+ gem.add_development_dependency "rubocop-govuk", "4.10.0"
27
+ gem.add_development_dependency "webmock", ">= 2"
26
28
  end
@@ -1,15 +1,13 @@
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
9
- extend Forwardable
10
- def_delegators :@zendesk_client, :ticket
11
-
12
9
  attr_accessor :config_options
10
+ attr_reader :zendesk_client
13
11
 
14
12
  def initialize(config_options)
15
13
  @config_options = defaults.merge(config_options)
@@ -23,16 +21,21 @@ module GDSZendesk
23
21
  def build
24
22
  check_that_username_and_password_are_provided
25
23
 
26
- ZendeskAPI::Client.new { |config|
24
+ ZendeskAPI::Client.new do |config|
27
25
  config.url = url
28
26
  config.username = username
29
27
  config.token = token if token
30
28
  config.password = password if password
31
29
  config.logger = logger
32
- }
30
+ end
33
31
  end
34
32
 
35
- protected
33
+ def ticket
34
+ @zendesk_client.ticket
35
+ end
36
+
37
+ protected
38
+
36
39
  def logger
37
40
  @config_options[:logger] || @config_options["logger"]
38
41
  end
@@ -61,9 +64,9 @@ module GDSZendesk
61
64
 
62
65
  def defaults
63
66
  {
64
- logger: NullLogger.instance,
65
- url: "https://govuk.zendesk.com/api/v2/"
67
+ logger: NullLogger.instance,
68
+ url: "https://govuk.zendesk.com/api/v2/",
66
69
  }
67
70
  end
68
71
  end
69
- end
72
+ 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.4.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'
1
+ INITIALIZER = <<~RUBY.freeze
2
+ require 'yaml'
3
+ require 'gds_zendesk/client'
4
+ require 'gds_zendesk/dummy_client'
5
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
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
@@ -15,60 +15,59 @@ module GDSZendesk
15
15
  Client.new(valid_credentials.merge(options))
16
16
  end
17
17
 
18
- it "should raise an error if no username is provided" do
19
- expect { Client.new(password: "abc") }.to raise_error(ArgumentError,
20
- /username not provided/)
18
+ it "raises an error if no username is provided" do
19
+ expect { described_class.new(password: "abc") }
20
+ .to raise_error(ArgumentError, /username not provided/)
21
21
  end
22
22
 
23
- it "should raise an error if no password or token is provided" do
24
- expect { Client.new(username: "abc") }.to raise_error(ArgumentError,
25
- /password or token not provided/)
23
+ it "raises an error if no password or token is provided" do
24
+ expect { described_class.new(username: "abc") }
25
+ .to raise_error(ArgumentError, /password or token not provided/)
26
26
  end
27
27
 
28
- it "should raise an error if token and password are provided" do
29
- expect { Client.new(username: "abc", token: "def", password: "ghi") }.to raise_error(ArgumentError,
30
- /Provide only one of token or password/)
28
+ it "raises an error if token and password are provided" do
29
+ expect { described_class.new(username: "abc", token: "def", password: "ghi") }
30
+ .to raise_error(ArgumentError, /Provide only one of token or password/)
31
31
  end
32
32
 
33
- it "should not raise an error if token is provided without password" do
34
- expect { Client.new(username: "abc", token: "def") }.not_to raise_error(ArgumentError,
35
- /password or token not provided/)
33
+ it "does not raise an error if token is provided without password" do
34
+ expect { described_class.new(username: "abc", token: "def") }.not_to raise_error
36
35
  end
37
36
 
38
- it "should not raise an error if password is provided without token" do
39
- expect { Client.new(username: "abc", password: "def") }.not_to raise_error(ArgumentError,
40
- /password or token not provided/)
37
+ it "does not raise an error if password is provided without token" do
38
+ expect { described_class.new(username: "abc", password: "def") }.not_to raise_error
41
39
  end
42
40
 
43
- it "should use a null logger if no logger has been provided" do
41
+ it "uses a null logger if no logger has been provided" do
44
42
  expect(client.config_options[:logger]).to be_an_instance_of(NullLogger::Logger)
45
43
  end
46
44
 
47
- it "should use the passed logger if one has been provided" do
48
- custom_logger = double("logger")
45
+ it "uses the passed logger if one has been provided" do
46
+ custom_logger = instance_double("Logger")
49
47
 
50
48
  expect(client(logger: custom_logger).config_options[:logger]).to eq(custom_logger)
51
49
  end
52
50
 
53
- it "should use the default url if no url is provided" do
51
+ it "uses the default url if no url is provided" do
54
52
  expect(client.config_options[:url]).to eq "https://govuk.zendesk.com/api/v2/"
55
53
  end
56
54
 
57
- it "should use the token if provided" do
58
- expect(Client.new(username: "test_user", token: "test_token").config_options[:token]).to eq "test_token"
55
+ it "uses the token if provided" do
56
+ expect(described_class.new(username: "test_user", token: "test_token").config_options[:token]).to eq "test_token"
59
57
  end
60
58
 
61
- it "should use the password if provided" do
62
- expect(Client.new(username: "test_user", password: "test_password").config_options[:password]).to eq "test_password"
59
+ it "uses the password if provided" do
60
+ expect(described_class.new(username: "test_user", password: "test_password").config_options[:password]).to eq "test_password"
63
61
  end
64
62
 
65
- it "should use the configured url if provided" do
66
- expect(Client.new(username: "test_user", password: "test_pass", url: "https://example.com").config_options[:url]).to eq "https://example.com"
63
+ it "uses the configured url if provided" do
64
+ instance = described_class.new(username: "test_user", password: "test_pass", url: "https://example.com")
65
+ expect(instance.config_options[:url]).to eq "https://example.com"
67
66
  end
68
67
 
69
- it "should raise tickets in Zendesk" do
68
+ it "raises tickets in Zendesk" do
70
69
  self.valid_zendesk_credentials = valid_credentials
71
- post_stub = stub_zendesk_ticket_creation(some: "data")
70
+ post_stub = stub_zendesk_ticket_creation(some: "data", comment: nil)
72
71
 
73
72
  client.ticket.create(some: "data")
74
73
 
@@ -79,7 +78,7 @@ module GDSZendesk
79
78
  self.valid_zendesk_credentials = valid_credentials
80
79
  post_stub = stub_request(:post, "#{zendesk_endpoint}/tickets").to_return(status: 302)
81
80
 
82
- expect { client.ticket.create!(some: "data") }.to raise_error
81
+ expect { client.ticket.create!(some: "data") }.to raise_error(ZendeskAPI::Error::NetworkError)
83
82
  expect(post_stub).to have_been_requested
84
83
  end
85
84
  end
@@ -1,21 +1,21 @@
1
- require 'gds_zendesk/dummy_client'
1
+ require "gds_zendesk/dummy_client"
2
2
 
3
3
  module GDSZendesk
4
4
  describe DummyClient do
5
5
  context "when a ticket has been raised" do
6
6
  let(:ticket_options) { { opt1: "val1" } }
7
7
 
8
- it "should log the ticket details" do
9
- logger = double("logger")
8
+ it "logs the ticket details" do
9
+ logger = instance_double("Logger")
10
10
  expect(logger).to receive(:info).with("Zendesk ticket created: #{ticket_options.inspect}")
11
11
 
12
- client = DummyClient.new(logger: logger)
12
+ client = described_class.new(logger: logger)
13
13
  client.ticket.create!(ticket_options)
14
14
  end
15
15
 
16
16
  it "can simulate failures, triggered by a specific description or comment" do
17
- logger = double("logger")
18
- client = DummyClient.new(logger: logger)
17
+ logger = instance_double("Logger")
18
+ client = described_class.new(logger: logger)
19
19
  expect(logger).to receive(:info).with(/Simulating Zendesk ticket creation failure/).twice
20
20
 
21
21
  expect {
@@ -31,11 +31,11 @@ module GDSZendesk
31
31
  context "when a user has been created" do
32
32
  let(:options) { { email: "a@b.com" } }
33
33
 
34
- it "should log the user details" do
35
- logger = double("logger")
34
+ it "logs the user details" do
35
+ logger = instance_double("Logger")
36
36
  expect(logger).to receive(:info).with("Zendesk user created or updated: #{options.inspect}")
37
37
 
38
- client = DummyClient.new(logger: logger)
38
+ client = described_class.new(logger: logger)
39
39
  client.users.create_or_update_user(options)
40
40
  end
41
41
  end
@@ -1,60 +1,58 @@
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
+ # rubocop:disable RSpec/VerifiedDoubles -- It's unclear that the user classes can be verified doubles
7
8
  module GDSZendesk
8
9
  describe Users do
9
10
  include GDSZendesk::TestHelpers
10
11
 
11
12
  let(:users) { Client.new(valid_zendesk_credentials).users }
12
13
 
13
- context "existing users" do
14
+ context "when there is an existing user" do
14
15
  before do
15
16
  zendesk_has_user(email: "test@test.com", id: 123)
16
17
  end
17
18
 
18
- context "creating/updating a user" do
19
- it "should update the phone and job title if those are set" do
20
- stub_post = stub_zendesk_user_update(123, phone: "12345", details: "Job title: Developer")
21
- users.create_or_update_user(double("requested user", email: "test@test.com", phone: "12345", job: "Developer"))
19
+ it "can update the user" do
20
+ stub_post = stub_zendesk_user_update(123, phone: "12345", details: "Job title: Developer")
21
+ users.create_or_update_user(double("requested user", email: "test@test.com", phone: "12345", job: "Developer"))
22
22
 
23
- expect(stub_post).to have_been_requested
24
- end
23
+ expect(stub_post).to have_been_requested
25
24
  end
26
25
 
27
- it "should know whether the user is suspended or not" do
26
+ it "knows whether the user is suspended or not" do
28
27
  zendesk_has_user(email: "test@test.com", id: 123, suspended: "true")
29
- expect(users.suspended?("test@test.com")).to be_truthy
28
+ expect(users).to be_suspended("test@test.com")
30
29
  end
31
30
  end
32
31
 
33
- context "non-existent users" do
32
+ context "when a user doesn't exist" do
34
33
  before do
35
34
  zendesk_has_no_user_with_email("test@test.com")
36
35
  end
37
36
 
38
- it "should not be suspended" do
39
- expect(users).to_not be_suspended("test@test.com")
37
+ it "doesn't have any suspended users" do
38
+ expect(users).not_to be_suspended("test@test.com")
40
39
  end
41
40
 
42
- context "creating/updating" do
43
- it "should create that user" do
44
- stub_post = stub_zendesk_user_creation(
45
- verified: true,
46
- name: "Abc",
47
- email: "test@test.com",
48
- phone: "12345",
49
- details: "Job title: Developer"
50
- )
51
- user_being_requested = double("requested user",
52
- name: "Abc", email: "test@test.com", phone: "12345", job: "Developer")
53
-
54
- users.create_or_update_user(user_being_requested)
55
- expect(stub_post).to have_been_requested
56
- end
41
+ it "can create that user" do
42
+ stub_post = stub_zendesk_user_creation(
43
+ verified: true,
44
+ name: "Abc",
45
+ email: "test@test.com",
46
+ phone: "12345",
47
+ details: "Job title: Developer",
48
+ )
49
+ user_being_requested = double("requested user",
50
+ name: "Abc", email: "test@test.com", phone: "12345", job: "Developer")
51
+
52
+ users.create_or_update_user(user_being_requested)
53
+ expect(stub_post).to have_been_requested
57
54
  end
58
55
  end
59
56
  end
60
57
  end
58
+ # rubocop:enable RSpec/VerifiedDoubles
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.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-29 00:00:00.000000000 Z
11
+ date: 2023-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: null_logger
@@ -28,30 +28,36 @@ dependencies:
28
28
  name: zendesk_api
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '1.37'
34
+ - - "<"
32
35
  - !ruby/object:Gem::Version
33
- version: '1.27'
36
+ version: '3.0'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
- version: '1.27'
43
+ version: '1.37'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '10'
53
+ version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - "~>"
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '10'
60
+ version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rspec
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -66,18 +72,32 @@ dependencies:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
74
  version: '3'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop-govuk
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 4.10.0
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '='
87
+ - !ruby/object:Gem::Version
88
+ version: 4.10.0
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: webmock
71
91
  requirement: !ruby/object:Gem::Requirement
72
92
  requirements:
73
- - - "~>"
93
+ - - ">="
74
94
  - !ruby/object:Gem::Version
75
95
  version: '2'
76
96
  type: :development
77
97
  prerelease: false
78
98
  version_requirements: !ruby/object:Gem::Requirement
79
99
  requirements:
80
- - - "~>"
100
+ - - ">="
81
101
  - !ruby/object:Gem::Version
82
102
  version: '2'
83
103
  description: Client and models for communicating with Zendesk
@@ -87,12 +107,14 @@ executables: []
87
107
  extensions: []
88
108
  extra_rdoc_files: []
89
109
  files:
110
+ - ".github/dependabot.yml"
111
+ - ".github/workflows/ci.yml"
90
112
  - ".gitignore"
113
+ - ".rubocop.yml"
91
114
  - ".ruby-version"
92
115
  - CHANGELOG.md
93
116
  - Gemfile
94
- - Jenkinsfile
95
- - LICENCE.txt
117
+ - LICENCE
96
118
  - README.md
97
119
  - Rakefile
98
120
  - gds_zendesk.gemspec
@@ -110,7 +132,7 @@ files:
110
132
  homepage: https://github.com/alphagov/gds_zendesk
111
133
  licenses: []
112
134
  metadata: {}
113
- post_install_message:
135
+ post_install_message:
114
136
  rdoc_options: []
115
137
  require_paths:
116
138
  - lib
@@ -118,15 +140,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
140
  requirements:
119
141
  - - ">="
120
142
  - !ruby/object:Gem::Version
121
- version: '0'
143
+ version: '3.0'
122
144
  required_rubygems_version: !ruby/object:Gem::Requirement
123
145
  requirements:
124
146
  - - ">="
125
147
  - !ruby/object:Gem::Version
126
148
  version: '0'
127
149
  requirements: []
128
- rubygems_version: 3.1.2
129
- signing_key:
150
+ rubygems_version: 3.2.33
151
+ signing_key:
130
152
  specification_version: 4
131
153
  summary: Client and models for communicating with Zendesk
132
154
  test_files:
data/Jenkinsfile DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env groovy
2
-
3
- library("govuk")
4
-
5
- node {
6
- govuk.buildProject()
7
- }
File without changes