/** * 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 com.couchbase.lite.Manager; import java.io.IOException; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.RecordedRequest; /* Mock response to calling GET on a checkpoint where it returns a valid lastSequence (as opposed to returning a 404) { "_id":"_local/7d3186e30a82a3312fc2c54098a25ce568cd7dfb", "ok":true, "_rev":"0-1", "lastSequence":"2" } */ public class MockCheckpointGet implements SmartMockResponse { private String id; private String ok; private String rev; private String lastSequence; private boolean sticky; private boolean is404; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getOk() { return ok; } public void setOk(String ok) { this.ok = ok; } public String getRev() { return rev; } public void setRev(String rev) { this.rev = rev; } public String getLastSequence() { return lastSequence; } public void setLastSequence(String lastSequence) { this.lastSequence = lastSequence; } private Map<String, Object> generateMap() { Map<String, Object> docMap = new HashMap<String, Object>(); docMap.put("_id", getId()); docMap.put("ok", getOk()); docMap.put("_rev", getRev()); docMap.put("lastSequence", getLastSequence()); return docMap; } private String generateBody() { Map documentMap = generateMap(); try { return Manager.getObjectMapper().writeValueAsString(documentMap); } catch (IOException e) { throw new RuntimeException(e); } } @Override public MockResponse generateMockResponse(RecordedRequest request) { if (!request.getMethod().equals("GET")) { throw new RuntimeException("Expected GET, but was not a GET"); } MockResponse mockResponse = new MockResponse(); if (is404) { MockHelper.set404NotFoundJson(mockResponse); return mockResponse; } // extract id from request // /db/_local/e11a8567a2ecaf27c52d02899fa82258a343d720 -> _local/e11a8567a2ecaf27c52d02899fa82258a343d720 String path = request.getPath(); String localDocId = ""; Pattern pattern = Pattern.compile("/db/_local/(.*)"); Matcher matcher = pattern.matcher(path); if (matcher.find()) { localDocId = matcher.group(1); } else { throw new RuntimeException(String.format(Locale.ENGLISH, "Could not extract local doc id from: %s", path)); } // call setId setId(String.format(Locale.ENGLISH, "_local/%s", localDocId)); mockResponse.setBody(generateBody()); MockHelper.set200OKJson(mockResponse); return mockResponse; } @Override public boolean isSticky() { return this.sticky; } @Override public long delayMs() { return 0; } public void setSticky(boolean sticky) { this.sticky = sticky; } public void set404(boolean is404) { this.is404 = is404; } }