/* * Copyright (C) 2014 SCVNGR, Inc. d/b/a LevelUp * * 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. */ package com.scvngr.levelup.core.model; import android.support.annotation.NonNull; import com.scvngr.levelup.core.annotation.LevelUpApi; import com.scvngr.levelup.core.annotation.LevelUpApi.Contract; import com.scvngr.levelup.core.model.PermissionsRequest.State; import com.scvngr.levelup.core.model.factory.json.PermissionsRequestJsonFactory; import com.scvngr.levelup.core.util.NullUtils; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import net.jcip.annotations.ThreadSafe; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * A fixture for {@link PermissionsRequest}s. */ @LevelUpApi(contract = Contract.INTERNAL) @ThreadSafe public final class PermissionsRequestFixture { /** * A date. */ @NonNull public static final String DATE_FIXTURE_1 = "2014-01-01T00:04:00-10:00"; /** * A random permissions request ID. * * @see <a href="http://xkcd.com/221/">xkcd #221 - Random Number</a> */ public static final long PERMISSIONS_REQUEST_ID_FIXTURE_1 = 5; /** * Permissions request web service ID #2 */ public static final long PERMISSIONS_REQUEST_ID_FIXTURE_2 = 7; /** * {@link PermissionsRequest#getAcceptText} fixture. */ @NonNull public static final String ACCEPT_TEXT_FIXTURE_1 = "Sounds Great"; /** * {@link PermissionsRequest#getCreatedAt} fixture. */ @NonNull public static final String CREATED_AT_FIXTURE_1 = DATE_FIXTURE_1; /** * {@link PermissionsRequest#getDescription} fixture. */ @NonNull public static final String DESCRIPTION_FIXTURE_1 = "Ariburgers has requested to be added to your LevelUp account and would like the following permissions"; /** * {@link PermissionsRequest#getPermissions} fixture. */ @NonNull public static final Set<Permission> PERMISSIONS_FIXTURE_1 = NullUtils .nonNullContract(Collections.unmodifiableSet(new HashSet<Permission>(Arrays .asList(new Permission[] { PermissionFixture.getFullModel1(), PermissionFixture.getFullModel2() })))); /** * {@link PermissionsRequest#getRejectText} fixture. */ @NonNull public static final String REJECT_TEXT_FIXTURE_1 = "No Thanks"; /** * {@link PermissionsRequest#getState} fixture. */ @NonNull public static final PermissionsRequest.State STATE_FIXTURE_1 = State.PENDING; /** * {@link PermissionsRequest#getState} fixture's string representation. */ @NonNull public static final String STATE_FIXTURE_STRING_1 = "pending"; /** * {@link PermissionsRequest#getToken} fixture. */ @NonNull public static final String ACCESS_TOKEN_FIXTURE_1 = "my_excellent_token"; /** * @param permissionsRequestId the web service ID of the {@link PermissionsRequest}. * @return a fully-populated {@link PermissionsRequest}. */ @NonNull public static PermissionsRequest getFullModel(final long permissionsRequestId) { return new PermissionsRequest(ACCEPT_TEXT_FIXTURE_1, AppFixture.APP_ID_FIXTURE_1, CREATED_AT_FIXTURE_1, DESCRIPTION_FIXTURE_1, permissionsRequestId, PERMISSIONS_FIXTURE_1, REJECT_TEXT_FIXTURE_1, STATE_FIXTURE_1, ACCESS_TOKEN_FIXTURE_1); } /** * @return a fully-populated {@link PermissionsRequest} with ID * {@link #PERMISSIONS_REQUEST_ID_FIXTURE_1}. */ @NonNull public static PermissionsRequest getFullModel() { return getFullModel(PERMISSIONS_REQUEST_ID_FIXTURE_1); } /** * @return a fully-populated {@link JsonObject} representing a {@link PermissionsRequest}. */ @NonNull public static JsonObject getJsonObject() { return getJsonObject(PermissionsRequestFixture.PERMISSIONS_REQUEST_ID_FIXTURE_1); } /** * @param id the web service ID of the permissions request * @return a fully-populated {@link JsonObject} representing a {@link PermissionsRequest}. */ @NonNull public static JsonObject getJsonObject(final long id) { final JsonObject o = new JsonObject(); o.addProperty("accept_text", PermissionsRequestFixture.ACCEPT_TEXT_FIXTURE_1); o.addProperty("app_id", AppFixture.APP_ID_FIXTURE_1); o.addProperty("created_at", PermissionsRequestFixture.CREATED_AT_FIXTURE_1); o.addProperty("description", PermissionsRequestFixture.DESCRIPTION_FIXTURE_1); o.addProperty("id", id); final JsonArray permissions = new JsonArray(); permissions.add(PermissionFixture.getJsonObject1()); permissions.add(PermissionFixture.getJsonObject2()); o.add("permissions", permissions); o.addProperty("reject_text", PermissionsRequestFixture.REJECT_TEXT_FIXTURE_1); o.addProperty("state", PermissionsRequestFixture.STATE_FIXTURE_STRING_1); o.addProperty("token", PermissionsRequestFixture.ACCESS_TOKEN_FIXTURE_1); final JsonObject container = new JsonObject(); container.add(PermissionsRequestJsonFactory.MODEL_ROOT, o); return container; } private PermissionsRequestFixture() { throw new UnsupportedOperationException("This class is non-instantiable"); } }