# frozen_string_literal: true require_relative 'spec_helper' module Danger describe Danger::AndroidStringsChecker do it 'is a plugin' do expect(described_class.new(nil)).to be_a Danger::Plugin end describe 'with Dangerfile' do before do @dangerfile = testing_dangerfile @plugin = @dangerfile.android_strings_checker allow(@plugin.git).to receive_messages(added_files: [], modified_files: [], deleted_files: []) stub_const('GitDiffStruct', Struct.new(:type, :path, :patch)) end context 'when changing strings.xml files' do it 'reports a warning when a PR adds a string resource reference inside a strings.xml file' do strings_xml_path = './src/main/res/values/strings.xml' allow(@plugin.git).to receive(:modified_files).and_return([strings_xml_path]) strings_xml_diff = <<~STRINGS diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5794d472..772e2b99 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ + Select categories + Video Quality + @string/app_name STRINGS diff = GitDiffStruct.new('modified', strings_xml_path, strings_xml_diff) allow(@plugin.git).to receive(:diff_for_file).with(strings_xml_path).and_return(diff) @plugin.check_strings_do_not_refer_resource expected_warning = <<~WARNING #{AndroidStringsChecker::MESSAGE} File `#{strings_xml_path}`: ```diff + @string/app_name ``` WARNING expect(@dangerfile).to report_warnings([expected_warning]) end it 'reports multiple warnings when a PR adds multiple string resource references inside multiple strings.xml files' do main_strings_xml = './src/main/res/values/strings.xml' ptbr_strings_xml = './src/main/res/values-pt-rBR/strings.xml' strings_xml_paths = [main_strings_xml, ptbr_strings_xml] allow(@plugin.git).to receive(:modified_files).and_return(strings_xml_paths) main_xml_diff = <<~STRINGS diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5794d472..772e2b99 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ + Select categories + Video Quality + @string/app_name + @string/button - @string/hint STRINGS main_diff = GitDiffStruct.new('modified', main_strings_xml, main_xml_diff) allow(@plugin.git).to receive(:diff_for_file).with(main_strings_xml).and_return(main_diff) ptbr_xml_diff = <<~STRINGS diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 5794d472..772e2b99 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -1,3 +1,6 @@ + Video Quality + @string/app_name_title - @string/common_toast STRINGS ptbr_diff = GitDiffStruct.new('modified', ptbr_strings_xml, ptbr_xml_diff) allow(@plugin.git).to receive(:diff_for_file).with(ptbr_strings_xml).and_return(ptbr_diff) @plugin.check_strings_do_not_refer_resource expected_warning = <<~WARNING #{AndroidStringsChecker::MESSAGE} File `#{main_strings_xml}`: ```diff + @string/app_name ``` WARNING expected_warning2 = <<~WARNING #{AndroidStringsChecker::MESSAGE} File `#{main_strings_xml}`: ```diff + @string/button ``` WARNING expected_warning3 = <<~WARNING #{AndroidStringsChecker::MESSAGE} File `#{ptbr_strings_xml}`: ```diff + @string/app_name_title ``` WARNING expect(@dangerfile.status_report[:warnings]).to contain_exactly(expected_warning, expected_warning2, expected_warning3) end it 'does nothing when a PR adds a string resource reference inside a strings.xml file but with translatable=\"false\"' do strings_xml_path = './src/main/res/values/strings.xml' allow(@plugin.git).to receive(:modified_files).and_return([strings_xml_path]) strings_xml_diff = <<~STRINGS diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5794d472..772e2b99 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ + Select categories + Video Quality + @string/app_name STRINGS diff = GitDiffStruct.new('modified', strings_xml_path, strings_xml_diff) allow(@plugin.git).to receive(:diff_for_file).with(strings_xml_path).and_return(diff) @plugin.check_strings_do_not_refer_resource expect(@dangerfile).to not_report end it 'does nothing when a PR adds strings without resource references' do strings_xml_path = './src/main/res/values/strings.xml' allow(@plugin.git).to receive(:modified_files).and_return([strings_xml_path]) strings_xml_diff = <<~STRINGS diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5794d472..772e2b99 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ + Select categories + Video Quality STRINGS diff = GitDiffStruct.new('modified', strings_xml_path, strings_xml_diff) allow(@plugin.git).to receive(:diff_for_file).with(strings_xml_path).and_return(diff) @plugin.check_strings_do_not_refer_resource expect(@dangerfile).to not_report end end end end end