diff --git a/Rakefile b/Rakefile index 6ec8da12..7fe305d4 100644 --- a/Rakefile +++ b/Rakefile @@ -11,4 +11,19 @@ RuboCop::RakeTask.new task default: %i[test] -task lint: %i[rubocop] \ No newline at end of file +task lint: %i[rubocop] + +# Legacy tests task +Minitest::TestTask.create(:legacy_test) do |t| + t.libs << "test" + t.test_globs = ["test/square_legacy/**/*_test.rb"] +end + +# Integration tests +task :integration_test do + integration_test_files = Dir.glob("test/square/integration/**/*.rb").sort + cmd = "ruby -Ilib:test:. -w -e 'require \"minitest/autorun\"; " + cmd += integration_test_files.map { |f| "require \"#{f}\"" }.join("; ") + cmd += "'" + sh cmd +end \ No newline at end of file diff --git a/lib/square/customers/client.rb b/lib/square/customers/client.rb index b5943675..7bea4a53 100644 --- a/lib/square/customers/client.rb +++ b/lib/square/customers/client.rb @@ -37,8 +37,13 @@ def list(request_options: {}, **params) # # @return [Square::Types::CreateCustomerResponse] def create(request_options: {}, **params) - _request = params - _response = @client.send(_request) + _response = @client.send(Internal::JSON::Request.new( + base_url: request_options[:base_url] || Square::Environment::SANDBOX, + path: "/v2/customers", + method: "POST", + body: Types::CreateCustomerRequest.new(params[:request]).to_h, + request_options: request_options + )) if _response.code >= "200" && _response.code < "300" return Square::Types::CreateCustomerResponse.load(_response.body) else @@ -170,8 +175,20 @@ def update(request_options: {}, **params) # # @return [Square::Types::DeleteCustomerResponse] def delete(request_options: {}, **params) - _request = params - _response = @client.send(_request) + _request = Types::DeleteCustomersRequest.new(params[:request]).to_h + # Pull out path params explicitly + _customer_id = _request[:customer_id] + _request = _request.except(:customer_id) + + + _query_params = _request + _response = @client.send(Internal::JSON::Request.new( + base_url: request_options[:base_url] || Square::Environment::SANDBOX, + path: "/v2/customers/#{_customer_id}", + method: "DELETE", + query: _query_params, + request_options: request_options + )) if _response.code >= "200" && _response.code < "300" return Square::Types::DeleteCustomerResponse.load(_response.body) else diff --git a/test/square/integration/client_tests/test_customers.rb b/test/square/integration/client_tests/test_customers.rb new file mode 100644 index 00000000..1eb37bf8 --- /dev/null +++ b/test/square/integration/client_tests/test_customers.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +require "test_helper" + +describe Square::Customers::Client do + describe "#create and delete customer" do + it "creates a customer" do + + _create_request = Square::Customers::Types::CreateCustomerRequest.new( + given_name: "Amelia", + family_name: "Earhart", + email_address: "Amelia.Earhart@example.com", + address: { + address_line_1: "500 Electric Ave", + address_line_2: "Suite 600", + locality: "New York", + administrative_district_level_1: "NY", + postal_code: "10003", + country: "US" + }, + phone_number: "+1-212-555-4240", + reference_id: "YOUR_REFERENCE_ID", + note: "a customer" + ) + + puts "create customer request #{_create_request.to_h}" if verbose? + + response = client.customers.create(request: _create_request.to_h) + refute_nil response + assert_equal response.class, Square::Types::CreateCustomerResponse + refute_nil response.customer.id + refute_nil response.customer.version + puts "create customer response #{response.to_h}" if verbose? + + _delete_request = Square::Customers::Types::DeleteCustomersRequest.new( + customer_id: response.customer.id, + version: response.customer.version + ) + + puts "delete customer request #{_delete_request.to_h}" if verbose? + + response = client.customers.delete(request: _delete_request.to_h) + refute_nil response + assert_equal response.class, Square::Types::DeleteCustomerResponse + assert_nil response.errors + puts "delete customer response #{response.to_h}" if verbose? + end + it "validates hash behavior with optional fields" do + has_version = Square::Customers::Types::DeleteCustomersRequest.new( + customer_id: "123", + version: 1 + ).to_h + missing_version = Square::Customers::Types::DeleteCustomersRequest.new( + customer_id: "123" + ).to_h + + assert_equal has_version.keys.length, 2 + assert_equal missing_version.keys.length, 1 + + has_version = has_version.except(:customer_id) + missing_version = missing_version.except(:customer_id) + + assert_equal has_version.keys.length, 1 + assert_equal missing_version.keys.length, 0 + end + end +end \ No newline at end of file diff --git a/test/square/integration/integration_test_base.rb b/test/square/integration/integration_test_base.rb index 5abc6526..a34ca676 100644 --- a/test/square/integration/integration_test_base.rb +++ b/test/square/integration/integration_test_base.rb @@ -3,7 +3,7 @@ require 'minitest/hell' require 'minitest/pride' require 'minitest/proveit' -require_relative 'test_helper' +require 'test_helper' class IntegrationTestBase < Minitest::Test parallelize_me!