about summary refs log tree commit diff
path: root/spec/lib/language_detector_spec.rb
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-04-18 16:20:12 -0400
committerEugen <eugen@zeonfederated.com>2017-04-18 22:20:12 +0200
commit297c11dba2864b20992cd3f98282f5ce35d5d144 (patch)
treefd4c3e3ec0c981b417931708c7f88cd25e6282c9 /spec/lib/language_detector_spec.rb
parent0a7588282a00513af9631d06eea76878a974c659 (diff)
Language detection refactor (#2099)
* Extract detect_language to separate class

* Use default locale, not just en

* Add spec to confirm that whatlanguage cant identify empty string

* Allow account locale to override default in language detector

* PostStatusService supplies an account to detect language
Diffstat (limited to 'spec/lib/language_detector_spec.rb')
-rw-r--r--spec/lib/language_detector_spec.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/spec/lib/language_detector_spec.rb b/spec/lib/language_detector_spec.rb
new file mode 100644
index 000000000..74b8b6c48
--- /dev/null
+++ b/spec/lib/language_detector_spec.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe LanguageDetector do
+  describe 'to_iso_s' do
+    it 'detects english language' do
+      string = 'Hello and welcome to mastadon'
+      result = described_class.new(string).to_iso_s
+
+      expect(result).to eq :en
+    end
+
+    it 'detects spanish language' do
+      string = 'Obtener un Hola y bienvenidos a Mastadon'
+      result = described_class.new(string).to_iso_s
+
+      expect(result).to eq :es
+    end
+
+    describe 'when language cant be detected' do
+      it 'confirm language engine cant detect' do
+        result = WhatLanguage.new(:all).language_iso('')
+        expect(result).to be_nil
+      end
+
+      describe 'with an account' do
+        it 'uses the account locale when present' do
+          user = double(:user, locale: 'fr')
+          account = double(:account, user: user)
+          result = described_class.new('', account).to_iso_s
+
+          expect(result).to eq :fr
+        end
+
+        it 'uses default locale when account is present but has no locale' do
+          user = double(:user, locale: nil)
+          account = double(:accunt, user: user)
+          result = described_class.new('', account).to_iso_s
+
+          expect(result).to eq :en
+        end
+      end
+
+      describe 'with an `en` default locale' do
+        it 'uses the default locale' do
+          string = ''
+          result = described_class.new(string).to_iso_s
+
+          expect(result).to eq :en
+        end
+      end
+
+      describe 'with a non-`en` default locale' do
+        around(:each) do |example|
+          before = I18n.default_locale
+          I18n.default_locale = :ja
+          example.run
+          I18n.default_locale = before
+        end
+
+        it 'uses the default locale' do
+          string = ''
+          result = described_class.new(string).to_iso_s
+
+          expect(result).to eq :ja
+        end
+      end
+    end
+  end
+end