package org.atlasapi.persistence.content; import org.atlasapi.media.entity.Episode; import org.atlasapi.media.entity.Publisher; import org.atlasapi.messaging.v3.ContentEquivalenceAssertionMessenger; import org.atlasapi.messaging.v3.EntityUpdatedMessage; import com.metabroadcast.common.queue.MessageSender; import com.google.common.primitives.Longs; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.runners.MockitoJUnitRunner; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class MessageQueueingContentWriterTest { @SuppressWarnings("unchecked") private final MessageSender<EntityUpdatedMessage> sender = (MessageSender<EntityUpdatedMessage>) mock(MessageSender.class); private final ContentWriter delegate = mock(ContentWriter.class); private final ContentResolver resolver = mock(ContentResolver.class); private final ContentEquivalenceAssertionMessenger messenger = mock(ContentEquivalenceAssertionMessenger.class); private final MessageQueueingContentWriter writer = new MessageQueueingContentWriter(messenger, sender, delegate, resolver); @Test public void testEnqueuesMessageWhenContentChanges() throws Exception { Episode episode = new Episode("uri","curie",Publisher.METABROADCAST); episode.setId(1225L); episode.setReadHash(null); writer.createOrUpdate(episode); verify(delegate).createOrUpdate(episode); ArgumentCaptor<EntityUpdatedMessage> creatorCaptor = ArgumentCaptor.forClass(EntityUpdatedMessage.class); verify(sender).sendMessage(creatorCaptor.capture(), eq(Longs.toByteArray(1225L))); EntityUpdatedMessage message = creatorCaptor.getValue(); assertThat(message.getEntityId(), is("cyp")); } }