/**
* 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.pages.main.participants.views;
import com.waz.api.User;
import com.waz.api.Verification;
import com.waz.zclient.testutils.MockCoreList;
import junit.framework.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestParticipantChatheadAdapter {
@Test
public void testAdapterIsInACorrectStateWithNoVerifiedAndNoUnverifiedUsers() {
MockCoreList<User> mockUserList = new MockCoreList<>();
int column = 5;
int expectedSize = 1;
ParticipantsChatheadAdapter adapter = new ParticipantsChatheadAdapter();
adapter.setUsersList(mockUserList, column);
// assertions
Assert.assertEquals(expectedSize, adapter.getCount());
}
@Test
public void testAdapterIsInACorrectStateWithVerifiedAndUserMatchColumnCount() {
MockCoreList<User> mockUserList = new MockCoreList<>();
int numOfUsers = 10;
int column = 5;
int expectedSize = 10;
mockUserList.add(mockUsers(numOfUsers, false, numOfUsers));
ParticipantsChatheadAdapter adapter = new ParticipantsChatheadAdapter();
adapter.setUsersList(mockUserList, column);
// assertions
Assert.assertEquals(expectedSize, adapter.getCount());
}
@Test
public void testAdapterIsInACorrectStateWithVerifiedAndUnverifiedUsers() {
MockCoreList<User> mockUserList = new MockCoreList<>();
int numOfUsers = 7;
int column = 5;
int expectedSize = (column - numOfUsers % column) + numOfUsers * 2 + column;
mockUserList.add(mockUsers(numOfUsers, true, 0));
mockUserList.add(mockUsers(numOfUsers, false, numOfUsers));
ParticipantsChatheadAdapter adapter = new ParticipantsChatheadAdapter();
adapter.setUsersList(mockUserList, column);
// assertions
Assert.assertEquals(expectedSize, adapter.getCount());
int pos = 0;
// unverified users
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("7", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("8", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("9", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("10", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("11", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("12", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("13", adapter.getItem(pos).getId());
// empty unverified users empty
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
// separator
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_SEPARATOR, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
// separator - empty
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
// verified users
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("0", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("1", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("2", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("3", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("4", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("5", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("6", adapter.getItem(pos).getId());
}
@Test
public void testAdapterIsInACorrectStateWithNoVerifiedAndUnverifiedUsers() {
MockCoreList<User> mockUserList = new MockCoreList<>();
int numOfUsers = 7;
int column = 5;
int expectedSize = (column - numOfUsers % column) + numOfUsers;
mockUserList.add(mockUsers(numOfUsers, false, numOfUsers));
ParticipantsChatheadAdapter adapter = new ParticipantsChatheadAdapter();
adapter.setUsersList(mockUserList, column);
// assertions
Assert.assertEquals(expectedSize, adapter.getCount());
int pos = 0;
// unverified users
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("7", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("8", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("9", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("10", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("11", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("12", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("13", adapter.getItem(pos).getId());
// empty unverified users empty
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
}
@Test
public void testAdapterIsInACorrectStateWithVerifiedAndNoUnverifiedUsers() {
MockCoreList<User> mockUserList = new MockCoreList<>();
int numOfUsers = 7;
int column = 5;
int expectedSize = numOfUsers + column;
mockUserList.add(mockUsers(numOfUsers, true, 0));
ParticipantsChatheadAdapter adapter = new ParticipantsChatheadAdapter();
adapter.setUsersList(mockUserList, column);
// assertions
Assert.assertEquals(expectedSize, adapter.getCount());
int pos = 0;
// separator
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_SEPARATOR, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
// separator - empty
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_EMPTY, adapter.getItemViewType(pos));
Assert.assertNull(adapter.getItem(pos));
// verified users
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("0", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("1", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("2", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("3", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("4", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("5", adapter.getItem(pos).getId());
pos++;
Assert.assertEquals(ParticipantsChatheadAdapter.VIEW_TYPE_CHATHEAD, adapter.getItemViewType(pos));
Assert.assertEquals("6", adapter.getItem(pos).getId());
}
public List<User> mockUsers(int count, boolean verified, int start) {
List<User> users = new ArrayList<>();
for (int i = 0; i < count; i++) {
User user = mock(User.class);
when(user.getId()).thenReturn(String.format("%d", start + i));
Verification verification = verified ? Verification.VERIFIED : Verification.UNVERIFIED;
when(user.getVerified()).thenReturn(verification);
users.add(user);
}
return users;
}
}