package com.mobilejazz.cacheio.serializers.gson;
import com.google.gson.Gson;
import com.mobilejazz.cacheio.BuildConfig;
import com.mobilejazz.cacheio.mappers.ValueMapper;
import com.mobilejazz.cacheio.serializers.gson.model.UserTestModel;
import org.assertj.core.api.Assertions;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.io.*;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, manifest = Config.NONE)
public class GsonValueMapperTest {
private ValueMapper valueMapper;
@Before public void setUp() throws Exception {
Gson gson = new Gson();
valueMapper = new GsonValueMapper(gson);
}
@Test public void shouldWriteTheBytesOfObject() throws Exception {
UserTestModel userTestModel = fakeUserTestObject();
final ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
valueMapper.write(userTestModel, bytesOut);
Assertions.assertThat(bytesOut).isNotNull();
Assertions.assertThat(bytesOut.size()).isGreaterThan(0);
}
@Test public void shouldDeserializeAObject() throws Exception {
UserTestModel userTestModelToDeserialize = fakeUserTestObject();
byte[] userDeserialized = fakeUserTestBytes(userTestModelToDeserialize);
final ByteArrayInputStream bytesIn = new ByteArrayInputStream(userDeserialized);
final UserTestModel value = valueMapper.read(UserTestModel.class, bytesIn);
Assertions.assertThat(value).isNotNull();
Assertions.assertThat(value.getId()).isEqualTo(userTestModelToDeserialize.getId());
Assertions.assertThat(value.getName()).isEqualTo(userTestModelToDeserialize.getName());
}
private UserTestModel fakeUserTestObject() {
UserTestModel userTestModel = new UserTestModel();
userTestModel.setId(1);
userTestModel.setName("Test name");
return userTestModel;
}
private byte[] fakeUserTestBytes(UserTestModel userTestModel) {
final ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
valueMapper.write(userTestModel, bytesOut);
return bytesOut.toByteArray();
}
}