From 87670c1e5e0c45ae6587b399e2ed48460fd022dc Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Wed, 4 Dec 2019 12:32:25 +0100 Subject: [PATCH] Display warning based on supported languages by mediators and refund agents --- .../resources/i18n/displayStrings.properties | 2 +- .../settings/preferences/PreferencesView.java | 5 +- .../preferences/PreferencesViewModel.java | 30 ++++-- .../preferences/PreferencesViewModelTest.java | 100 ++++++++++++++---- 4 files changed, 108 insertions(+), 29 deletions(-) diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 791cb0ead66..6d0cdf26932 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -1051,7 +1051,7 @@ setting.preferences.sortWithNumOffers=Sort market lists with no. of offers/trade setting.preferences.resetAllFlags=Reset all \"Don't show again\" flags setting.preferences.reset=Reset settings.preferences.languageChange=To apply the language change to all screens requires a restart. -settings.preferences.arbitrationLanguageWarning=In case of a dispute, please note that arbitration is handled in {0}. +settings.preferences.supportLanguageWarning=In case of a dispute, please note that mediation is handled in {0} and arbitration in {1}. settings.preferences.selectCurrencyNetwork=Select network setting.preferences.daoOptions=DAO options setting.preferences.dao.resync.label=Rebuild DAO state from genesis tx diff --git a/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesView.java b/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesView.java index 4561b13f383..123d6848722 100644 --- a/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesView.java +++ b/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesView.java @@ -671,8 +671,9 @@ public String fromString(String string) { .closeButtonText(Res.get("shared.ok")) .show(); - if (model.needsArbitrationLanguageWarning()) { - new Popup().warning(Res.get("settings.preferences.arbitrationLanguageWarning", + if (model.needsSupportLanguageWarning()) { + new Popup().warning(Res.get("settings.preferences.supportLanguageWarning", + model.getMediationLanguages(), model.getArbitrationLanguages())) .closeButtonText(Res.get("shared.ok")) .show(); diff --git a/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesViewModel.java b/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesViewModel.java index 2f794b7d841..4c92cf87538 100644 --- a/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesViewModel.java +++ b/desktop/src/main/java/bisq/desktop/main/settings/preferences/PreferencesViewModel.java @@ -21,7 +21,8 @@ import bisq.desktop.common.model.ActivatableViewModel; import bisq.core.locale.LanguageUtil; -import bisq.core.support.dispute.arbitration.arbitrator.ArbitratorManager; +import bisq.core.support.dispute.mediation.mediator.MediatorManager; +import bisq.core.support.dispute.refund.refundagent.RefundAgentManager; import bisq.core.user.Preferences; import com.google.inject.Inject; @@ -30,24 +31,37 @@ public class PreferencesViewModel extends ActivatableViewModel { - private final ArbitratorManager arbitratorManager; + private final RefundAgentManager refundAgentManager; + private final MediatorManager mediationManager; private final Preferences preferences; @Inject - public PreferencesViewModel(Preferences preferences, ArbitratorManager arbitratorManager) { + public PreferencesViewModel(Preferences preferences, + RefundAgentManager refundAgentManager, + MediatorManager mediationManager) { this.preferences = preferences; - this.arbitratorManager = arbitratorManager; + this.refundAgentManager = refundAgentManager; + this.mediationManager = mediationManager; } - boolean needsArbitrationLanguageWarning() { - return !arbitratorManager.isAgentAvailableForLanguage(preferences.getUserLanguage()); + boolean needsSupportLanguageWarning() { + return !refundAgentManager.isAgentAvailableForLanguage(preferences.getUserLanguage()) || + !mediationManager.isAgentAvailableForLanguage(preferences.getUserLanguage()); } String getArbitrationLanguages() { - return arbitratorManager.getObservableMap().values().stream() + return refundAgentManager.getObservableMap().values().stream() .flatMap(arbitrator -> arbitrator.getLanguageCodes().stream()) .distinct() - .map(languageCode -> LanguageUtil.getDisplayName(languageCode)) + .map(LanguageUtil::getDisplayName) + .collect(Collectors.joining(", ")); + } + + public String getMediationLanguages() { + return mediationManager.getObservableMap().values().stream() + .flatMap(mediator -> mediator.getLanguageCodes().stream()) + .distinct() + .map(LanguageUtil::getDisplayName) .collect(Collectors.joining(", ")); } } diff --git a/desktop/src/test/java/bisq/desktop/main/settings/preferences/PreferencesViewModelTest.java b/desktop/src/test/java/bisq/desktop/main/settings/preferences/PreferencesViewModelTest.java index 441c12a3576..32c667a2f01 100644 --- a/desktop/src/test/java/bisq/desktop/main/settings/preferences/PreferencesViewModelTest.java +++ b/desktop/src/test/java/bisq/desktop/main/settings/preferences/PreferencesViewModelTest.java @@ -19,8 +19,10 @@ import bisq.desktop.maker.PreferenceMakers; -import bisq.core.support.dispute.arbitration.arbitrator.Arbitrator; -import bisq.core.support.dispute.arbitration.arbitrator.ArbitratorManager; +import bisq.core.support.dispute.mediation.mediator.Mediator; +import bisq.core.support.dispute.mediation.mediator.MediatorManager; +import bisq.core.support.dispute.refund.refundagent.RefundAgent; +import bisq.core.support.dispute.refund.refundagent.RefundAgentManager; import bisq.core.user.Preferences; import bisq.network.p2p.NodeAddress; @@ -33,48 +35,110 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class PreferencesViewModelTest { + @Test + public void getArbitrationLanguages() { + + RefundAgentManager refundAgentManager = mock(RefundAgentManager.class); + + final ObservableMap refundAgents = FXCollections.observableHashMap(); + + ArrayList languagesOne = new ArrayList<>() {{ + add("en"); + add("de"); + }}; + ArrayList languagesTwo = new ArrayList<>() {{ + add("en"); + add("es"); + }}; + + RefundAgent one = new RefundAgent(new NodeAddress("refundAgent:1"), null, languagesOne, 0L, + null, null, null, null, null); + + RefundAgent two = new RefundAgent(new NodeAddress("refundAgent:2"), null, languagesTwo, 0L, + null, null, null, null, null); + + refundAgents.put(one.getNodeAddress(), one); + refundAgents.put(two.getNodeAddress(), two); + + Preferences preferences = PreferenceMakers.empty; + + when(refundAgentManager.getObservableMap()).thenReturn(refundAgents); + + PreferencesViewModel model = new PreferencesViewModel(preferences, refundAgentManager, null); + + assertEquals("English, Deutsch, español", model.getArbitrationLanguages()); + } @Test - public void testGetArbitrationLanguages() { + public void getMediationLanguages() { - ArbitratorManager arbitratorManager = mock(ArbitratorManager.class); + MediatorManager mediationManager = mock(MediatorManager.class); - final ObservableMap arbitrators = FXCollections.observableHashMap(); + final ObservableMap mnediators = FXCollections.observableHashMap(); - ArrayList languagesOne = new ArrayList() {{ + ArrayList languagesOne = new ArrayList<>() {{ add("en"); add("de"); }}; - ArrayList languagesTwo = new ArrayList() {{ + ArrayList languagesTwo = new ArrayList<>() {{ add("en"); add("es"); }}; - Arbitrator one = new Arbitrator(new NodeAddress("arbitrator:1"), null, null, null, - languagesOne, 0L, null, "", null, - null, null); + Mediator one = new Mediator(new NodeAddress("refundAgent:1"), null, languagesOne, 0L, + null, null, null, null, null); - Arbitrator two = new Arbitrator(new NodeAddress("arbitrator:2"), null, null, null, - languagesTwo, 0L, null, "", null, - null, null); + Mediator two = new Mediator(new NodeAddress("refundAgent:2"), null, languagesTwo, 0L, + null, null, null, null, null); - arbitrators.put(one.getNodeAddress(), one); - arbitrators.put(two.getNodeAddress(), two); + mnediators.put(one.getNodeAddress(), one); + mnediators.put(two.getNodeAddress(), two); Preferences preferences = PreferenceMakers.empty; - when(arbitratorManager.getObservableMap()).thenReturn(arbitrators); + when(mediationManager.getObservableMap()).thenReturn(mnediators); - PreferencesViewModel model = new PreferencesViewModel(preferences, arbitratorManager); + PreferencesViewModel model = new PreferencesViewModel(preferences, null, mediationManager); - assertEquals("English, Deutsch, español", model.getArbitrationLanguages()); + assertEquals("English, Deutsch, español", model.getMediationLanguages()); } + @Test + public void needsSupportLanguageWarning_forNotSupportedLanguageInArbitration() { + + MediatorManager mediationManager = mock(MediatorManager.class); + RefundAgentManager refundAgentManager = mock(RefundAgentManager.class); + + Preferences preferences = PreferenceMakers.empty; + + when(refundAgentManager.isAgentAvailableForLanguage(preferences.getUserLanguage())).thenReturn(false); + + PreferencesViewModel model = new PreferencesViewModel(preferences, refundAgentManager, mediationManager); + + assertTrue(model.needsSupportLanguageWarning()); + } + + @Test + public void needsSupportLanguageWarning_forNotSupportedLanguageInMediation() { + + MediatorManager mediationManager = mock(MediatorManager.class); + RefundAgentManager refundAgentManager = mock(RefundAgentManager.class); + + Preferences preferences = PreferenceMakers.empty; + + when(refundAgentManager.isAgentAvailableForLanguage(preferences.getUserLanguage())).thenReturn(true); + when(mediationManager.isAgentAvailableForLanguage(preferences.getUserLanguage())).thenReturn(false); + + PreferencesViewModel model = new PreferencesViewModel(preferences, refundAgentManager, mediationManager); + + assertTrue(model.needsSupportLanguageWarning()); + } }