diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a9d2e98..cab236e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,6 +1,7 @@ require "bundler/setup" require "xpm_ruby" require "vcr" +require "dotenv/load" RSpec.configure do |config| # Enable flags like --only-failures and --next-failure @@ -12,6 +13,23 @@ config.expect_with(:rspec) do |c| c.syntax = :expect end + + # Shared example group for Xero credentials + config.shared_context_metadata_behavior = :apply_to_host_groups + + RSpec.shared_context "xero credentials" do + let(:xero_tenant_id) do + ENV.fetch("XERO_TENANT_ID") do + raise "XERO_TENANT_ID environment variable is required. Please add it to your .env file" + end + end + + let(:access_token) do + ENV.fetch("XERO_ACCESS_TOKEN") do + raise "XERO_ACCESS_TOKEN environment variable is required. Please add it to your .env file" + end + end + end end VCR.configure do |config| diff --git a/spec/xpm_ruby/category_spec.rb b/spec/xpm_ruby/category_spec.rb index 9ae4410..cc31ebc 100644 --- a/spec/xpm_ruby/category_spec.rb +++ b/spec/xpm_ruby/category_spec.rb @@ -5,6 +5,8 @@ module XpmRuby subject(:service) { described_class } describe ".list" do + include_context "xero credentials" + let(:xero_tenant_id) { "XERO_TENANT_ID" } let(:access_token) { "access_token" } diff --git a/spec/xpm_ruby/client_spec.rb b/spec/xpm_ruby/client_spec.rb index 8ad6995..5bc6316 100644 --- a/spec/xpm_ruby/client_spec.rb +++ b/spec/xpm_ruby/client_spec.rb @@ -3,8 +3,7 @@ module XpmRuby RSpec.describe(Client) do describe ".add" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:client) { { "Name" => "Acmer Pty Ltd" } } @@ -22,8 +21,7 @@ module XpmRuby end describe ".update" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "access_token" } + include_context "xero credentials" let(:client) { { "ID" => 25655881, "Name" => "Acmer Pty Ltd" } } @@ -41,8 +39,8 @@ module XpmRuby end describe ".get" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "access_token" } + include_context "xero credentials" + let(:client_id) { "32014284" } it "gets client information" do @@ -60,7 +58,8 @@ module XpmRuby end describe ".list" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } + include_context "xero credentials" + let(:access_token) { "token" } context "when not modified since" do @@ -132,8 +131,8 @@ module XpmRuby Client.search(access_token: access_token, xero_tenant_id: xero_tenant_id, query: query, detailed: detailed) end - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" + let(:query) { "acme" } context "when detailed false" do diff --git a/spec/xpm_ruby/connection_spec.rb b/spec/xpm_ruby/connection_spec.rb index 1f34dfc..91b5af4 100644 --- a/spec/xpm_ruby/connection_spec.rb +++ b/spec/xpm_ruby/connection_spec.rb @@ -2,8 +2,7 @@ module XpmRuby RSpec.describe(Connection) do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "access_token" } + include_context "xero credentials" describe "#get" do context "with a valid tenant id and access token" do diff --git a/spec/xpm_ruby/contact_spec.rb b/spec/xpm_ruby/contact_spec.rb index c8ee3ad..737e827 100644 --- a/spec/xpm_ruby/contact_spec.rb +++ b/spec/xpm_ruby/contact_spec.rb @@ -3,8 +3,7 @@ module XpmRuby RSpec.describe(Contact) do describe ".add" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:contact) do { @@ -27,8 +26,7 @@ module XpmRuby end describe ".update" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" context "without Client ID" do let(:contact) do @@ -75,8 +73,7 @@ module XpmRuby end describe ".delete" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:contact_id) { "14574323" } context "without Client ID" do diff --git a/spec/xpm_ruby/job_spec.rb b/spec/xpm_ruby/job_spec.rb index 4e19ea8..2ddf04b 100644 --- a/spec/xpm_ruby/job_spec.rb +++ b/spec/xpm_ruby/job_spec.rb @@ -3,8 +3,7 @@ module XpmRuby RSpec.describe(Job) do describe ".current" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" around(:each) do |example| VCR.use_cassette("xpm_ruby/job/current") do @@ -29,8 +28,7 @@ module XpmRuby end describe ".add" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:job) { { "Name" => "Joe Bloggs", "Description" => "New Job", "ClientID" => "24097642", "StartDate" => "20091023", "DueDate" => "20091023" } } around(:each) do |example| @@ -51,8 +49,7 @@ module XpmRuby end describe ".update" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:job) { { "ID" => "J000031", "Name" => "Joe Bloggs", "Description" => "Update Job", "ClientID" => "24097642", "StartDate" => "20091023", "DueDate" => "20091023" } } around(:each) do |example| @@ -74,8 +71,7 @@ module XpmRuby end describe ".get" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" let(:job_id) { "J000014" } around(:each) do |example| @@ -97,8 +93,7 @@ module XpmRuby end describe ".state" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" context "when the job state is successful" do let(:job) { { "ID" => "J000031", "State" => "COMPLETED" } } @@ -123,8 +118,7 @@ module XpmRuby end describe ".delete" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" context "with a valid job id" do let(:job) { { "ID" => "J000031" } } @@ -150,8 +144,7 @@ module XpmRuby end describe ".assign" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" context "add and remove staff" do context "with a valid job id and staff id" do @@ -253,8 +246,7 @@ module XpmRuby end describe ".applytemplate" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "token" } + include_context "xero credentials" context "with valid job and template" do let(:job) { { "ID" => "J000032", "TemplateID" => 1254078, "TaskMode" => "AddNew" } } diff --git a/spec/xpm_ruby/staff_spec.rb b/spec/xpm_ruby/staff_spec.rb index 7d803dd..f13ad08 100644 --- a/spec/xpm_ruby/staff_spec.rb +++ b/spec/xpm_ruby/staff_spec.rb @@ -3,7 +3,7 @@ module XpmRuby RSpec.describe(Staff) do describe ".list" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } + include_context "xero credentials" context "when access token expired" do let(:access_token) { "expired" } @@ -62,8 +62,7 @@ module XpmRuby end describe ".add" do - let(:xero_tenant_id) { "xero_tenant_id" } - let(:access_token) { "access_token" } + include_context "xero credentials" let(:staff) { { "Name" => "Joe Bloggs", "Address" => "In your head", "Phone" => "123456789", "Email" => "joebloggs@foo.com", "PayrollCode" => "PC123" } } around(:each) do |example| @@ -84,8 +83,7 @@ module XpmRuby end describe ".update" do - let(:xero_tenant_id) { "xero_tenant_id" } - let(:access_token) { "access_token" } + include_context "xero credentials" let(:staff) { { "ID" => "1044994", "Name" => "Joe Bloggs", "Address" => "Updated Address", "Phone" => "87654321", "Email" => "bloggsjoe@foo.com", "PayrollCode" => "PC456" } } around(:each) do |example| @@ -107,8 +105,7 @@ module XpmRuby end describe ".delete" do - let(:xero_tenant_id) { "xero_tenant_id" } - let(:access_token) { "access_token" } + include_context "xero credentials" around(:each) do |example| VCR.use_cassette("xpm_ruby/staff/delete") do diff --git a/spec/xpm_ruby/template_spec.rb b/spec/xpm_ruby/template_spec.rb index d7b2220..0896b32 100644 --- a/spec/xpm_ruby/template_spec.rb +++ b/spec/xpm_ruby/template_spec.rb @@ -5,8 +5,7 @@ module XpmRuby subject(:service) { described_class } describe ".list" do - let(:xero_tenant_id) { "XERO_TENANT_ID" } - let(:access_token) { "XERO_ACCESS_TOKEN" } + include_context "xero credentials" around(:each) do |example| VCR.use_cassette("xpm_ruby/template/list") do diff --git a/xpm_ruby.gemspec b/xpm_ruby.gemspec index 891803f..287d8d5 100644 --- a/xpm_ruby.gemspec +++ b/xpm_ruby.gemspec @@ -35,6 +35,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency("byebug", "~> 11") spec.add_development_dependency("pry-byebug", "~> 3") spec.add_development_dependency("vcr") + spec.add_development_dependency("dotenv") spec.add_runtime_dependency("faraday") spec.add_runtime_dependency("faraday-encoding")