Skip to content

Commit

Permalink
Merge pull request #3743 from ripcurlx/fix-refundagents-supported-lan…
Browse files Browse the repository at this point in the history
…guage-warning

Display warning based on supported languages by mediators and refund agents
  • Loading branch information
sqrrm authored Dec 6, 2019
2 parents b3e73b1 + 87670c1 commit 2e196ec
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 29 deletions.
2 changes: 1 addition & 1 deletion core/src/main/resources/i18n/displayStrings.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -676,8 +676,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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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(", "));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<NodeAddress, RefundAgent> refundAgents = FXCollections.observableHashMap();

ArrayList<String> languagesOne = new ArrayList<>() {{
add("en");
add("de");
}};

ArrayList<String> 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<NodeAddress, Arbitrator> arbitrators = FXCollections.observableHashMap();
final ObservableMap<NodeAddress, Mediator> mnediators = FXCollections.observableHashMap();

ArrayList<String> languagesOne = new ArrayList<String>() {{
ArrayList<String> languagesOne = new ArrayList<>() {{
add("en");
add("de");
}};

ArrayList<String> languagesTwo = new ArrayList<String>() {{
ArrayList<String> 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());
}
}

0 comments on commit 2e196ec

Please sign in to comment.