gds_zendesk 3.2.0 → 3.4.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: 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