package co.smartreceipts.android.model.impl;
import android.os.Parcel;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import co.smartreceipts.android.DefaultObjects;
import co.smartreceipts.android.model.Category;
import co.smartreceipts.android.sync.model.SyncState;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@RunWith(RobolectricTestRunner.class)
public class ImmutableCategoryImplTest {
private static final String NAME = "name";
private static final String CODE = "code";
// Class under test
ImmutableCategoryImpl mImmutableCategory;
SyncState mSyncState;
@Before
public void setUp() throws Exception {
mSyncState = DefaultObjects.newDefaultSyncState();
mImmutableCategory = new ImmutableCategoryImpl(NAME, CODE, mSyncState);
}
@Test
public void getName() {
assertEquals(NAME, mImmutableCategory.getName());
}
@Test
public void getCode() {
assertEquals(CODE, mImmutableCategory.getCode());
}
@Test
public void getSyncState() {
assertEquals(mSyncState, mImmutableCategory.getSyncState());
}
@Test
public void compareTo() {
assertTrue(mImmutableCategory.compareTo(mImmutableCategory) == 0);
assertTrue(mImmutableCategory.compareTo(new ImmutableCategoryImpl("aaa", "")) > 0);
assertTrue(mImmutableCategory.compareTo(new ImmutableCategoryImpl("zzz", "")) < 0);
}
@Test
public void equals() {
assertEquals(mImmutableCategory, mImmutableCategory);
assertEquals(mImmutableCategory, new ImmutableCategoryImpl(NAME, CODE, mSyncState));
assertThat(mImmutableCategory, not(equalTo(new Object())));
assertThat(mImmutableCategory, not(equalTo(mock(Category.class))));
assertThat(mImmutableCategory, not(equalTo(new ImmutableCategoryImpl("wrong", CODE, mSyncState))));
assertThat(mImmutableCategory, not(equalTo(new ImmutableCategoryImpl(NAME, "wrong", mSyncState))));
}
@Test
public void parcelEquality() {
final Parcel parcel = Parcel.obtain();
mImmutableCategory.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
final ImmutableCategoryImpl category = ImmutableCategoryImpl.CREATOR.createFromParcel(parcel);
assertNotNull(category);
assertEquals(category, mImmutableCategory);
}
}