/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.couchdb; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.lightcouch.Changes; import org.lightcouch.ChangesResult.Row; import org.lightcouch.CouchDbContext; import org.lightcouch.CouchDbInfo; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @RunWith(MockitoJUnitRunner.class) public class CouchDbChangesetTrackerTest { @Mock private Changes changes; @Mock private CouchDbClientWrapper client; @Mock private CouchDbEndpoint endpoint; @Mock private CouchDbConsumer consumer; @Mock private CouchDbContext context; @Mock private CouchDbInfo info; @Mock private Row row3; @Mock private Row row2; @Mock private Row row1; @Mock private Exchange exchange1; @Mock private Exchange exchange2; @Mock private Exchange exchange3; @Mock private Processor processor; private CouchDbChangesetTracker tracker; @Before public void before() { initMocks(this); when(endpoint.isDeletes()).thenReturn(true); when(endpoint.isUpdates()).thenReturn(true); when(client.context()).thenReturn(context); when(context.info()).thenReturn(info); when(info.getUpdateSeq()).thenReturn("100"); when(client.changes()).thenReturn(changes); when(changes.continuousChanges()).thenReturn(changes); when(changes.includeDocs(true)).thenReturn(changes); when(changes.since(anyString())).thenReturn(changes); when(changes.heartBeat(anyLong())).thenReturn(changes); when(changes.style(anyString())).thenReturn(changes); when(row1.getSeq()).thenReturn("seq1"); when(row2.getSeq()).thenReturn("seq2"); when(row3.getSeq()).thenReturn("seq3"); when(row1.getId()).thenReturn("id1"); when(row2.getId()).thenReturn("id2"); when(row3.getId()).thenReturn("id3"); tracker = new CouchDbChangesetTracker(endpoint, consumer, client); } @Test public void testExchangeCreatedWithCorrectProperties() throws Exception { when(changes.hasNext()).thenReturn(true, true, true, false); when(changes.next()).thenReturn(row1, row2, row3); when(endpoint.createExchange("seq1", "id1", null, false)).thenReturn(exchange1); when(endpoint.createExchange("seq2", "id2", null, false)).thenReturn(exchange2); when(endpoint.createExchange("seq3", "id3", null, false)).thenReturn(exchange3); when(consumer.getProcessor()).thenReturn(processor); tracker.run(); verify(endpoint).createExchange("seq1", "id1", null, false); verify(processor).process(exchange1); verify(endpoint).createExchange("seq2", "id2", null, false); verify(processor).process(exchange2); verify(endpoint).createExchange("seq3", "id3", null, false); verify(processor).process(exchange3); } @Test public void testProcessorInvoked() throws Exception { when(changes.hasNext()).thenReturn(true, false); when(changes.next()).thenReturn(row1); when(consumer.getProcessor()).thenReturn(processor); tracker.run(); verify(endpoint).createExchange("seq1", "id1", null, false); verify(processor).process(any(Exchange.class)); } }