From da2d18495845c9a6bde6ff206e02f9889cab621c Mon Sep 17 00:00:00 2001 From: Ezra Lim Date: Tue, 25 Mar 2025 14:33:13 +0800 Subject: [PATCH] fix: ensure git diff output is properly encoded as UTF-8 burn: Remove unused fixture --- lib/committer/git_helper.rb | 2 +- spec/committer/commit_generator_spec.rb | 2 +- spec/committer/git_helper_spec.rb | 23 +++++++++++++++++++++++ spec/fixtures/invalid-utf8-diff.txt | 7 +++++++ spec/fixtures/sample_diff.txt | 11 ----------- spec/fixtures/utf-8-diff.txt | 7 +++++++ 6 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 spec/fixtures/invalid-utf8-diff.txt delete mode 100644 spec/fixtures/sample_diff.txt create mode 100644 spec/fixtures/utf-8-diff.txt diff --git a/lib/committer/git_helper.rb b/lib/committer/git_helper.rb index 98ae36b..04cd7b5 100644 --- a/lib/committer/git_helper.rb +++ b/lib/committer/git_helper.rb @@ -22,7 +22,7 @@ def staged_diff stdout, stderr, status = Open3.capture3('git diff --staged') raise Committer::Error, "Failed to get git diff: #{stderr}" unless status.success? - stdout + stdout.dup.force_encoding('UTF-8').scrub end end end diff --git a/spec/committer/commit_generator_spec.rb b/spec/committer/commit_generator_spec.rb index ad02827..6a79d25 100644 --- a/spec/committer/commit_generator_spec.rb +++ b/spec/committer/commit_generator_spec.rb @@ -4,7 +4,7 @@ require 'committer/commit_generator' RSpec.describe Committer::CommitGenerator do - let(:diff) { load_fixture('sample_diff.txt') } + let(:diff) { load_fixture('utf-8-diff.txt') } let(:commit_context) { nil } let(:summary_response) { JSON.parse(load_fixture('claude_response_summary.json')) } let(:body_response) { JSON.parse(load_fixture('claude_response_with_body.json')) } diff --git a/spec/committer/git_helper_spec.rb b/spec/committer/git_helper_spec.rb index d3ffaab..64ec4a3 100644 --- a/spec/committer/git_helper_spec.rb +++ b/spec/committer/git_helper_spec.rb @@ -25,6 +25,29 @@ Committer::GitHelper.staged_diff end.to raise_error(Committer::Error, 'Failed to get git diff: error message') end + + it 'properly handles UTF-8 characters in diff output' do + utf8_diff = load_fixture('utf-8-diff.txt') + allow(Open3).to receive(:capture3).with('git diff --staged').and_return([utf8_diff, '', + double(success?: true)]) + result = Committer::GitHelper.staged_diff + expect(result.encoding.name).to eq('UTF-8') + expect(result.valid_encoding?).to be true + expect(result).to eq(utf8_diff) + end + + it 'handles invalid UTF-8 characters in diff output' do + invalid_utf8_diff = load_fixture('invalid-utf8-diff.txt') + # Make sure the test fixture has invalid UTF-8 characters + invalid_utf8_data = invalid_utf8_diff.dup.force_encoding('UTF-8') + expect(invalid_utf8_data.valid_encoding?).to be false + + allow(Open3).to receive(:capture3).with('git diff --staged').and_return([invalid_utf8_diff, '', + double(success?: true)]) + result = Committer::GitHelper.staged_diff + expect(result.encoding.name).to eq('UTF-8') + expect(result.valid_encoding?).to be true + end end describe '.commit' do diff --git a/spec/fixtures/invalid-utf8-diff.txt b/spec/fixtures/invalid-utf8-diff.txt new file mode 100644 index 0000000..0e6a299 --- /dev/null +++ b/spec/fixtures/invalid-utf8-diff.txt @@ -0,0 +1,7 @@ +diff --git a/test.txt b/test.txt +new file mode 100644 +index 0000000..ea49386 +--- /dev/null ++++ b/test.txt +@@ -0,0 +1 @@ ++This is a string with invalid UTF-8 bytes: ( ( (( \ No newline at end of file diff --git a/spec/fixtures/sample_diff.txt b/spec/fixtures/sample_diff.txt deleted file mode 100644 index 42b6c72..0000000 --- a/spec/fixtures/sample_diff.txt +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/lib/committer/version.rb b/lib/committer/version.rb -index 12345678..87654321 100644 ---- a/lib/committer/version.rb -+++ b/lib/committer/version.rb -@@ -1,5 +1,5 @@ - # frozen_string_literal: true - - module Committer -- VERSION = '0.1.0' -+ VERSION = '0.1.1' - end \ No newline at end of file diff --git a/spec/fixtures/utf-8-diff.txt b/spec/fixtures/utf-8-diff.txt new file mode 100644 index 0000000..6162d40 --- /dev/null +++ b/spec/fixtures/utf-8-diff.txt @@ -0,0 +1,7 @@ +diff --git a/test.txt b/test.txt +new file mode 100644 +index 0000000..ea49386 +--- /dev/null ++++ b/test.txt +@@ -0,0 +1 @@ ++Привіт, світ