/** * Copyright (c) 2016 Couchbase, Inc. All rights reserved. * <p/> * Licensed 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 * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * 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 com.couchbase.lite.mockserver; import java.util.List; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; public class MockPreloadedPullTarget { protected MockDispatcher dispatcher; protected int numMockDocsToServe; protected int numDocsPerChangesResponse; public MockPreloadedPullTarget(MockDispatcher dispatcher, int numMockDocsToServe, int numDocsPerChangesResponse) { this.dispatcher = dispatcher; this.numMockDocsToServe = numMockDocsToServe; this.numDocsPerChangesResponse = numDocsPerChangesResponse; } public MockWebServer getMockWebServer() { MockWebServer server = MockHelper.getMockWebServer(dispatcher); List<MockDocumentGet.MockDocument> mockDocs = MockHelper.getMockDocuments(numMockDocsToServe); addCheckpointResponse(); addChangesResponse(mockDocs); addMockDocuments(mockDocs); return server; } protected void addMockDocuments(List<MockDocumentGet.MockDocument> mockDocs) { // for each doc responses for (MockDocumentGet.MockDocument mockDoc : mockDocs) { MockDocumentGet mockDocumentGet = new MockDocumentGet(mockDoc); dispatcher.enqueueResponse(mockDoc.getDocPathRegex(), mockDocumentGet.generateMockResponse()); } // for _all_docs MockDocumentAllDocs allDocs = new MockDocumentAllDocs(mockDocs); allDocs.setSticky(true); dispatcher.enqueueResponse(MockHelper.PATH_REGEX_ALL_DOCS, allDocs); } protected void addChangesResponse(List<MockDocumentGet.MockDocument> mockDocs) { // _changes response int numChangeResponses = 0; MockHelper.Batcher<MockDocumentGet.MockDocument> batcher = new MockHelper.Batcher<MockDocumentGet.MockDocument>(mockDocs, numDocsPerChangesResponse); while (batcher.hasMoreBatches()) { List<MockDocumentGet.MockDocument> batch = batcher.nextBatch(); MockChangesFeed mockChangesFeed = new MockChangesFeed(); for (MockDocumentGet.MockDocument mockDoc : batch) { mockChangesFeed.add(new MockChangesFeed.MockChangedDoc(mockDoc)); } MockResponse mockResponse = mockChangesFeed.generateMockResponse(); dispatcher.enqueueResponse(MockHelper.PATH_REGEX_CHANGES, mockResponse); numChangeResponses += 1; } if (numChangeResponses == 0) { // in the degenerate case, add empty changes response dispatcher.enqueueResponse(MockHelper.PATH_REGEX_CHANGES, new MockChangesFeed().generateMockResponse()); } } protected void addCheckpointResponse() { // checkpoint GET response w/ 404. also receives checkpoint PUT's MockCheckpointPut mockCheckpointPut = new MockCheckpointPut(); mockCheckpointPut.setSticky(true); dispatcher.enqueueResponse(MockHelper.PATH_REGEX_CHECKPOINT, mockCheckpointPut); } }