Barricade

Build Status Version Javadoc

Barricade is a library for Android apps that allows you to get responses to API requests locally by running a local server. Barricade will intercept your API calls using an OkHttp Network Interceptor and can provide a local response from a local file.

It also supports multiple responses per request, unlike other local server implementations and presents the user with an UI for modifying which response to return for a request. at runtime.

When to use

How is it different from OkHttp's MockWebServer?

Adding Barricade to your project

Include the following dependencies in your app's build.gradle :

dependencies {
    compile 'com.mutualmobile:barricade:0.1.8'
    annotationProcessor 'com.mutualmobile:barricade-compiler:0.1.8'
}

How to use

  1. Install Barricade in your Application class' #onCreate()

    @Override
    public void onCreate() {
      super.onCreate();
      new Barricade.Builder(this, new BarricadeConfig()).enableShakeToStart(this).install();
      ...
    }
  2. Add your API response files to assets/barricade/ for each type of response (success, invalid, error etc). You should consider creating subdirectories for each endpoint and putting the responses in them to organise them properly.

  3. In your Retrofit API interface, for the required methods, add annotation @Barricade which mentions which endpoint to intercept and the possible responses using @Response annotation.

Example -

@GET("/users/{user}/repos")
@Barricade(endpoint = "repos", responses = {
    @Response(fileName = "success.json", isDefault = true),
    @Response(fileName = "failure.json", statusCode = 500)
}) Single<ReposResponse> getUserRepositories(@Path("user") String userId);

To configure multiple / non-JSON responses -

@GET("/users/{user}/repos")
@Barricade(endpoint = "repos", responses = {
    @Response(fileName = "success.xml", type = "application/xml", isDefault = true),
    @Response(fileName = "failure.xml", type = "application/xml", statusCode = 500)
}) Single<ReposResponse> getUserRepositories(@Path("user") String userId);

Default type is "application/json"

  1. Add BarricadeInterceptor to your OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(new BarricadeInterceptor())
    ...
    .build();

Enable/ Disable Barricade

Barricade can be enabled or disabled at runtime using Barricade.getInstance().setEnabled(true/false)

Change Settings

Barricade allows you to change the response time and the required response for a request at runtime.

You can also change the above settings programmatically which can be helpful for testing -

Barricade.getInstance()
    .setDelay(100)
    .withResponse(BarricadeConfig.Endpoints.REPOS, BarricadeConfig.Responses.Repos.GetReposSuccess);

Note: Using the above technique will also save the settings and apply to other responses as well, not just the next response, until changed.

License

Copyright 2016 Mutual Mobile

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

    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.