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 +4 -4
- data/.github/dependabot.yml +10 -0
- data/.github/workflows/ci.yml +35 -0
- data/.gitignore +0 -15
- data/.rubocop.yml +8 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/README.md +11 -0
- data/Rakefile +4 -2
- data/gds_zendesk.gemspec +15 -13
- data/lib/gds_zendesk/client.rb +16 -13
- data/lib/gds_zendesk/dummy_client.rb +7 -6
- data/lib/gds_zendesk/test_helpers.rb +28 -28
- data/lib/gds_zendesk/users.rb +3 -2
- data/lib/gds_zendesk/version.rb +1 -1
- data/lib/generators/gds_zendesk/install/install_generator.rb +13 -13
- data/spec/gds_zendesk/client_spec.rb +31 -32
- data/spec/gds_zendesk/dummy_client_spec.rb +9 -9
- data/spec/gds_zendesk/users_spec.rb +29 -31
- data/spec/spec_helper.rb +2 -2
- metadata +41 -19
- data/Jenkinsfile +0 -7
- /data/{LICENCE.txt → LICENCE} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1806a756294d190c9e4d338680319a62d49b1f6df2cf0baa0ea889b798fd0eaf
|
4
|
+
data.tar.gz: b2e7543717d7211fc9f84b8805b9c78c135a984668c64ea11ace577190f99012
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3720fe9f23d27c3213b2999454aa734bece0bb255dd0d5adb9685f042b3809b0e65a4cc1b402d497e55f9f02201317f91e2dae49d29573de2a09e3990d97f991
|
7
|
+
data.tar.gz: da36985b5c8ebdcb65ab3864b85af2d3190f944176c09cda0bf6c280e3c94a7b0424601bf4cfa85c9ab10f72eb09a6e4dd4d888a65cd4ba45c340f50bc9825df
|
@@ -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
data/.rubocop.yml
ADDED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.5
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require "rake"
|
2
|
+
require "rubocop/rake_task"
|
2
3
|
require "bundler/gem_tasks"
|
3
|
-
require
|
4
|
+
require "rspec/core/rake_task"
|
4
5
|
|
6
|
+
RuboCop::RakeTask.new
|
5
7
|
RSpec::Core::RakeTask.new(:spec)
|
6
8
|
|
7
|
-
task :
|
9
|
+
task default: %i[rubocop spec]
|
data/gds_zendesk.gemspec
CHANGED
@@ -1,26 +1,28 @@
|
|
1
|
-
|
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
|
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 =
|
12
|
-
gem.summary =
|
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.
|
16
|
-
|
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 = [
|
19
|
+
gem.require_paths = %w[lib]
|
19
20
|
|
20
|
-
gem.add_dependency
|
21
|
-
gem.add_dependency
|
21
|
+
gem.add_dependency "null_logger", "~> 0"
|
22
|
+
gem.add_dependency "zendesk_api", ">= 1.37", "< 3.0"
|
22
23
|
|
23
|
-
gem.add_development_dependency
|
24
|
-
gem.add_development_dependency
|
25
|
-
gem.add_development_dependency
|
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
|
data/lib/gds_zendesk/client.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "forwardable"
|
2
|
+
require "null_logger"
|
3
|
+
require "zendesk_api"
|
4
4
|
|
5
|
-
require
|
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
|
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
|
-
|
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
|
-
|
65
|
-
|
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
|
2
|
-
require
|
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
|
-
|
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(
|
52
|
+
def search(_attributes)
|
52
53
|
[]
|
53
54
|
end
|
54
55
|
|
55
|
-
def suspended?(
|
56
|
+
def suspended?(_user_email)
|
56
57
|
false
|
57
58
|
end
|
58
59
|
|
@@ -1,55 +1,55 @@
|
|
1
|
-
require
|
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
|
-
|
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
|
-
|
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:
|
24
|
-
headers: {
|
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:
|
32
|
-
headers: {
|
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:
|
40
|
-
|
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:
|
48
|
-
|
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[
|
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
|
-
|
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
|
-
|
86
|
+
body: { ticket: hash_including(requester: hash_including(requester_options)) }, times: 1
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
data/lib/gds_zendesk/users.rb
CHANGED
data/lib/gds_zendesk/version.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
INITIALIZER =
|
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
|
-
|
8
|
-
else
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
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
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
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 "
|
19
|
-
expect {
|
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 "
|
24
|
-
expect {
|
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 "
|
29
|
-
expect {
|
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 "
|
34
|
-
expect {
|
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 "
|
39
|
-
expect {
|
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 "
|
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 "
|
48
|
-
custom_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 "
|
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 "
|
58
|
-
expect(
|
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 "
|
62
|
-
expect(
|
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 "
|
66
|
-
|
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 "
|
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
|
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 "
|
9
|
-
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 =
|
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 =
|
18
|
-
client =
|
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 "
|
35
|
-
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 =
|
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
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
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
|
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
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
24
|
-
end
|
23
|
+
expect(stub_post).to have_been_requested
|
25
24
|
end
|
26
25
|
|
27
|
-
it "
|
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.
|
28
|
+
expect(users).to be_suspended("test@test.com")
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
33
|
-
context "
|
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 "
|
39
|
-
expect(users).
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
1
|
+
require "webmock/rspec"
|
2
2
|
|
3
|
-
WebMock.disable_net_connect!(:
|
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.
|
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:
|
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: '
|
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.
|
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: '
|
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: '
|
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
|
-
-
|
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.
|
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
/data/{LICENCE.txt → LICENCE}
RENAMED
File without changes
|