package org.atlasapi.persistence.content.people;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.atlasapi.media.entity.Person;
import org.atlasapi.media.entity.Publisher;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import com.google.common.base.Optional;
import com.metabroadcast.common.ids.IdGenerator;
public class IdSettingPersonStoreTest {
private final PersonStore delegate = mock(PersonStore.class);
private final IdGenerator idGenerator = mock(IdGenerator.class);
private final PersonStore store = new IdSettingPersonStore(delegate, idGenerator);
@Test
public void testSetsIdOnNewPerson() {
Person person = new Person("uri", "curie", Publisher.BBC);
when(delegate.person(person.getCanonicalUri()))
.thenReturn(Optional.<Person>absent());
when(idGenerator.generateRaw()).thenReturn(1L);
store.createOrUpdatePerson(person);
ArgumentCaptor<Person> personCaptor = ArgumentCaptor.forClass(Person.class);
verify(delegate).createOrUpdatePerson(personCaptor.capture());
assertThat(personCaptor.getValue().getId(), is(1L));
}
@Test
public void testSetsIdOnExistingPersonWithoutId() {
Person person = new Person("uri", "curie", Publisher.BBC);
when(delegate.person(person.getCanonicalUri()))
.thenReturn(Optional.of(new Person("uri", "curie", Publisher.BBC)));
when(idGenerator.generateRaw())
.thenReturn(1L);
store.createOrUpdatePerson(person);
ArgumentCaptor<Person> personCaptor = ArgumentCaptor.forClass(Person.class);
verify(delegate).createOrUpdatePerson(personCaptor.capture());
assertThat(personCaptor.getValue().getId(), is(1L));
}
@Test
public void testUsesIdOnExistingPerson() {
Person person = new Person("uri", "curie", Publisher.BBC);
Person existing = new Person("uri", "curie", Publisher.BBC);
existing.setId(5L);
when(delegate.person(person.getCanonicalUri()))
.thenReturn(Optional.of(existing));
store.createOrUpdatePerson(person);
verify(idGenerator, never()).generateRaw();
ArgumentCaptor<Person> personCaptor = ArgumentCaptor.forClass(Person.class);
verify(delegate).createOrUpdatePerson(personCaptor.capture());
assertThat(personCaptor.getValue().getId(), is(5L));
}
}