package org.springframework.data.simpledb.repository.demo;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.simpledb.attributeutil.SimpleDbAttributeValueSplitter;
import org.springframework.data.simpledb.domain.demo.Source;
import org.springframework.data.simpledb.domain.demo.UserJob;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:simpledb-consistent-repository-context.xml")
public class UserJobTest {
static String STRING_OF_MAX_SIMPLE_DB_LENGTH = null;
static {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < SimpleDbAttributeValueSplitter.MAX_ATTR_VALUE_LEN; i++) {
builder.append("x");
}
STRING_OF_MAX_SIMPLE_DB_LENGTH = builder.toString();
}
@Autowired
private UserJobRepository userJobRepository;
@Before
public void setup() {
userJobRepository.deleteAll();
}
@Test
public void on_update_should_delete_attributes() {
Source source = new Source();
source.setToken("sample attribute");
UserJob userJob = new UserJob();
userJob.setSource(source);
userJob.setStringField("test");
userJob = userJobRepository.save(userJob);
userJob.setSource(null);
userJob = userJobRepository.save(userJob);
final UserJob foundUserJob = userJobRepository.findOne(userJob
.getItemId());
assertNull(foundUserJob.getSource());
}
@Test
public void long_values_should_split_and_recombine() {
UserJob userJob = new UserJob();
userJob.setStringField("test");
Source source = new Source();
source.setToken(STRING_OF_MAX_SIMPLE_DB_LENGTH + "c");
userJob.setSource(source);
userJob = userJobRepository.save(userJob);
final UserJob foundUserJob = userJobRepository.findOne(userJob
.getItemId());
assertNotNull(foundUserJob);
assertEquals("long tokens match", source.getToken(), foundUserJob
.getSource().getToken());
}
@Test
public void like_query_on_split_columns_should_return_results() {
UserJob userJob = new UserJob();
userJob.setStringField("test");
Source source = new Source();
source.setToken(STRING_OF_MAX_SIMPLE_DB_LENGTH + "c");
userJob.setSource(source);
userJob = userJobRepository.save(userJob);
final List<UserJob> jobs = userJobRepository
.findAllByMatchingSourceToken("xxxx");
assertTrue("count(jobs) > 0", jobs.size() > 0);
}
}