From 2a0d3289c962ba0f5d0022d5e932091c9f394822 Mon Sep 17 00:00:00 2001 From: jsklan Date: Tue, 19 Aug 2025 17:38:10 -0400 Subject: [PATCH 1/4] interim commit --- Rakefile | 17 ++++++- lib/square/customers/client.rb | 9 +++- .../client_tests/test_customers.rb | 48 +++++++++++++++++++ .../integration/integration_test_base.rb | 2 +- 4 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 test/square/integration/client_tests/test_customers.rb 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..04040a13 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 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..c2437087 --- /dev/null +++ b/test/square/integration/client_tests/test_customers.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require "test_helper" + +describe Square::Customers::Client do + describe "#create and delete customer" do + it "creates a customer" do + + _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 #{_request.to_h}" if verbose? + + response = client.customers.create(request: _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? + + _request = Square::Customers::Types::DeleteCustomerRequest.new( + customer_id: response.customer.id, + version: response.customer.version + ) + + puts "delete customer request #{_request.to_h}" if verbose? + + response = client.customers.delete(request: _request.to_h) + refute_nil response + assert_equal response.class, Square::Types::DeleteCustomerResponse + puts "delete customer response #{response.to_h}" if verbose? + 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! From fb7cb07fccd9a11c453fa69b0be7ecccd1ed0bc0 Mon Sep 17 00:00:00 2001 From: jsklan Date: Tue, 19 Aug 2025 18:10:04 -0400 Subject: [PATCH 2/4] utils --- lib/square/customers/client.rb | 15 +++++++++++++-- lib/square/internal/http/raw_client.rb | 2 ++ .../integration/client_tests/test_catalog.rb | 1 + .../integration/client_tests/test_customers.rb | 12 ++++++------ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/square/customers/client.rb b/lib/square/customers/client.rb index 04040a13..e09084bf 100644 --- a/lib/square/customers/client.rb +++ b/lib/square/customers/client.rb @@ -175,8 +175,19 @@ def update(request_options: {}, **params) # # @return [Square::Types::DeleteCustomerResponse] def delete(request_options: {}, **params) - _request = params - _response = @client.send(_request) + _request = Types::DeleteCustomerRequest.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/lib/square/internal/http/raw_client.rb b/lib/square/internal/http/raw_client.rb index ed7a9423..da66bd73 100644 --- a/lib/square/internal/http/raw_client.rb +++ b/lib/square/internal/http/raw_client.rb @@ -25,6 +25,7 @@ def initialize(base_url:, max_retries: 2, timeout: 60.0, headers: {}) def send(request) url = build_url(request) + puts "raw_client.send: url.inspect #{url.inspect}" http_request = build_http_request( url:, method: request.method, @@ -32,6 +33,7 @@ def send(request) body: request.encode_body ) + conn = connect(url) conn.open_timeout = @timeout conn.read_timeout = @timeout diff --git a/test/square/integration/client_tests/test_catalog.rb b/test/square/integration/client_tests/test_catalog.rb index ac973c33..1456520c 100644 --- a/test/square/integration/client_tests/test_catalog.rb +++ b/test/square/integration/client_tests/test_catalog.rb @@ -69,6 +69,7 @@ def get_test_file describe "#batch_upsert" do it "creates multiple catalog objects" do + skip "Skipping for now." _request = Square::Catalog::Types::BatchUpsertCatalogObjectsRequest.new( idempotency_key: SecureRandom.uuid, batches: [ diff --git a/test/square/integration/client_tests/test_customers.rb b/test/square/integration/client_tests/test_customers.rb index c2437087..0e2a9bb7 100644 --- a/test/square/integration/client_tests/test_customers.rb +++ b/test/square/integration/client_tests/test_customers.rb @@ -6,7 +6,7 @@ describe "#create and delete customer" do it "creates a customer" do - _request = Square::Customers::Types::CreateCustomerRequest.new( + _create_request = Square::Customers::Types::CreateCustomerRequest.new( given_name: "Amelia", family_name: "Earhart", email_address: "Amelia.Earhart@example.com", @@ -23,23 +23,23 @@ note: "a customer" ) - puts "create customer request #{_request.to_h}" if verbose? + puts "create customer request #{_create_request.to_h}" if verbose? - response = client.customers.create(request: _request.to_h) + 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? - _request = Square::Customers::Types::DeleteCustomerRequest.new( + _delete_request = Square::Customers::Types::DeleteCustomersRequest.new( customer_id: response.customer.id, version: response.customer.version ) - puts "delete customer request #{_request.to_h}" if verbose? + puts "delete customer request #{_delete_request.to_h}" if verbose? - response = client.customers.delete(request: _request.to_h) + response = client.customers.delete(request: _delete_request.to_h) refute_nil response assert_equal response.class, Square::Types::DeleteCustomerResponse puts "delete customer response #{response.to_h}" if verbose? From 2993da2ea9ca3d79ddd5cc5c93d796cbb4f7c013 Mon Sep 17 00:00:00 2001 From: jsklan Date: Tue, 19 Aug 2025 18:11:54 -0400 Subject: [PATCH 3/4] tests passing --- lib/square/customers/client.rb | 2 +- lib/square/internal/http/raw_client.rb | 1 - test/square/integration/client_tests/test_catalog.rb | 1 - test/square/integration/client_tests/test_customers.rb | 1 + 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/square/customers/client.rb b/lib/square/customers/client.rb index e09084bf..4b1d9d1c 100644 --- a/lib/square/customers/client.rb +++ b/lib/square/customers/client.rb @@ -175,7 +175,7 @@ def update(request_options: {}, **params) # # @return [Square::Types::DeleteCustomerResponse] def delete(request_options: {}, **params) - _request = Types::DeleteCustomerRequest.new(params[:request]).to_h + _request = Types::DeleteCustomersRequest.new(params[:request]).to_h # Pull out path params explicitly _customer_id = _request[:customer_id] _request = _request.except(:customer_id) diff --git a/lib/square/internal/http/raw_client.rb b/lib/square/internal/http/raw_client.rb index da66bd73..ac587e68 100644 --- a/lib/square/internal/http/raw_client.rb +++ b/lib/square/internal/http/raw_client.rb @@ -25,7 +25,6 @@ def initialize(base_url:, max_retries: 2, timeout: 60.0, headers: {}) def send(request) url = build_url(request) - puts "raw_client.send: url.inspect #{url.inspect}" http_request = build_http_request( url:, method: request.method, diff --git a/test/square/integration/client_tests/test_catalog.rb b/test/square/integration/client_tests/test_catalog.rb index 1456520c..ac973c33 100644 --- a/test/square/integration/client_tests/test_catalog.rb +++ b/test/square/integration/client_tests/test_catalog.rb @@ -69,7 +69,6 @@ def get_test_file describe "#batch_upsert" do it "creates multiple catalog objects" do - skip "Skipping for now." _request = Square::Catalog::Types::BatchUpsertCatalogObjectsRequest.new( idempotency_key: SecureRandom.uuid, batches: [ diff --git a/test/square/integration/client_tests/test_customers.rb b/test/square/integration/client_tests/test_customers.rb index 0e2a9bb7..93b329a9 100644 --- a/test/square/integration/client_tests/test_customers.rb +++ b/test/square/integration/client_tests/test_customers.rb @@ -42,6 +42,7 @@ 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 end From 6741e68baa049cbc647a01d6009b3953caefa1fa Mon Sep 17 00:00:00 2001 From: jsklan Date: Tue, 19 Aug 2025 18:21:29 -0400 Subject: [PATCH 4/4] polish --- lib/square/customers/client.rb | 1 + lib/square/internal/http/raw_client.rb | 1 - .../integration/client_tests/test_customers.rb | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/square/customers/client.rb b/lib/square/customers/client.rb index 4b1d9d1c..7bea4a53 100644 --- a/lib/square/customers/client.rb +++ b/lib/square/customers/client.rb @@ -180,6 +180,7 @@ def delete(request_options: {}, **params) _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, diff --git a/lib/square/internal/http/raw_client.rb b/lib/square/internal/http/raw_client.rb index ac587e68..ed7a9423 100644 --- a/lib/square/internal/http/raw_client.rb +++ b/lib/square/internal/http/raw_client.rb @@ -32,7 +32,6 @@ def send(request) body: request.encode_body ) - conn = connect(url) conn.open_timeout = @timeout conn.read_timeout = @timeout diff --git a/test/square/integration/client_tests/test_customers.rb b/test/square/integration/client_tests/test_customers.rb index 93b329a9..1eb37bf8 100644 --- a/test/square/integration/client_tests/test_customers.rb +++ b/test/square/integration/client_tests/test_customers.rb @@ -45,5 +45,23 @@ 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