/** * Wire * Copyright (C) 2016 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.waz.zclient.testutils; import com.waz.api.AccentColor; import com.waz.api.IConversation; import com.waz.api.NetworkMode; import com.waz.api.Subscriber; import com.waz.api.Subscription; import com.waz.api.UiObservable; import com.waz.api.UiSignal; import com.waz.api.UpdateListener; import com.waz.api.User; import com.waz.zclient.TestActivity; import com.waz.zclient.core.stores.conversation.ConversationChangeRequester; import com.waz.zclient.core.stores.conversation.ConversationStoreObserver; import com.waz.zclient.core.stores.conversation.IConversationStore; import com.waz.zclient.core.stores.network.INetworkStore; import com.waz.zclient.core.stores.network.NetworkAction; import com.waz.zclient.core.stores.participants.IParticipantsStore; import com.waz.zclient.core.stores.participants.ParticipantsStoreObserver; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class MockHelper { @SuppressWarnings("unchecked") public static <T> UiSignal<T> mockUiSignal() { return mock(UiSignal.class); } public static <T> void mockSubscription(UiSignal<T> uiSignal, final Object mock) { when(uiSignal.subscribe(any(Subscriber.class))).thenAnswer(new Answer<Subscription>() { @Override public Subscription answer(InvocationOnMock invocationOnMock) throws Throwable { Object[] args = invocationOnMock.getArguments(); Subscriber s = (Subscriber) args[0]; if (s == null) { return null; } s.next(mock); return mock(Subscription.class); } }); } public static void setupParticipantsMocks(final IConversation mockConversation, final TestActivity activity) { IParticipantsStore mockParticipantsStore = activity.getStoreFactory().getParticipantsStore(); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); UpdateListener u = (UpdateListener) args[0]; u.updated(); return null; } }).when(mockConversation).addUpdateListener(any(UpdateListener.class)); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); ParticipantsStoreObserver o = (ParticipantsStoreObserver) args[0]; o.conversationUpdated(mockConversation); return null; } }).when(mockParticipantsStore).addParticipantsStoreObserver(any(ParticipantsStoreObserver.class)); INetworkStore mockNetworkStore = activity.getStoreFactory().getNetworkStore(); when(mockNetworkStore.hasInternetConnection()).thenReturn(true); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); NetworkAction a = (NetworkAction) args[0]; a.execute(NetworkMode.WIFI); return null; } }).when(mockNetworkStore).doIfHasInternetOrNotifyUser(any(NetworkAction.class)); } public static void setupConversationMocks(final IConversation mockConversation, final TestActivity activity) { IConversationStore mockConversationStore = activity.getStoreFactory().getConversationStore(); when(mockConversationStore.getCurrentConversation()).thenReturn(mockConversation); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); UpdateListener u = (UpdateListener) args[0]; u.updated(); return null; } }).when(mockConversation).addUpdateListener(any(UpdateListener.class)); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); ConversationStoreObserver o = (ConversationStoreObserver) args[0]; o.onCurrentConversationHasChanged(null, mockConversation, ConversationChangeRequester.UPDATER); return null; } }).when(mockConversationStore).addConversationStoreObserverAndUpdate(any(ConversationStoreObserver.class)); doAnswer(new Answer<Void>() { public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); ConversationStoreObserver o = (ConversationStoreObserver) args[0]; o.onCurrentConversationHasChanged(null, mockConversation, ConversationChangeRequester.UPDATER); return null; } }).when(mockConversationStore).addConversationStoreObserver(any(ConversationStoreObserver.class)); } public static void setupObservableMocks(final UiObservable observable, final TestActivity activity) { doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); UpdateListener u = (UpdateListener) args[0]; u.updated(); return null; } }).when(observable).addUpdateListener(any(UpdateListener.class)); } public static User createMockUser(String name, String id) { User mockUser = mock(User.class); when(mockUser.getId()).thenReturn(id); when(mockUser.getDisplayName()).thenReturn(name); AccentColor mockAccent = mock(AccentColor.class); when(mockAccent.getColor()).thenReturn(3); when(mockUser.getAccent()).thenReturn(mockAccent); return mockUser; } }