# 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