/* * 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.net.request.factory; import android.content.Context; import android.support.annotation.NonNull; import android.test.suitebuilder.annotation.SmallTest; import com.scvngr.levelup.core.model.Feedback; import com.scvngr.levelup.core.model.FeedbackFixture; import com.scvngr.levelup.core.model.OrderFixture; import com.scvngr.levelup.core.model.factory.json.FeedbackJsonFactory; import com.scvngr.levelup.core.net.AbstractRequest; import com.scvngr.levelup.core.net.AbstractRequest.BadRequestException; import com.scvngr.levelup.core.net.HttpMethod; import com.scvngr.levelup.core.net.LevelUpRequest; import com.scvngr.levelup.core.net.MockAccessTokenRetriever; import com.scvngr.levelup.core.test.SupportAndroidTestCase; import com.scvngr.levelup.core.util.NullUtils; import com.google.gson.JsonObject; import java.util.Locale; /** * Tests {@link com.scvngr.levelup.core.net.request.factory.FeedbackRequestFactory}. */ public final class FeedbackRequestFactoryTest extends SupportAndroidTestCase { @SmallTest public void testNewPostFeedbackRequest() throws BadRequestException { final FeedbackRequestFactory builder = new FeedbackRequestFactory(getContext(), new MockAccessTokenRetriever()); final Feedback expectedFeedback = FeedbackFixture.getFullModel(); final AbstractRequest request = builder.buildFeedbackRequest(OrderFixture.UUID_FIXTURE_1, expectedFeedback); assertEquals(HttpMethod.POST, request.getMethod()); assertTrue( "hits orders/:id/feedback endpoint", request.getUrl(getContext()).getPath() .contains( String.format(Locale.US, "orders/%s/feedback", OrderFixture.UUID_FIXTURE_1))); assertTrue("Url points to proper api version", request.getUrl(getContext()).getPath() .contains(LevelUpRequest.API_VERSION_CODE_V15)); final String body = NullUtils.nonNullContract(((LevelUpRequest) request).getBody(getContext())); final Feedback actualFeedback = new FeedbackJsonFactory().from(body); assertEquals(expectedFeedback.getRating(), actualFeedback.getRating()); assertEquals(expectedFeedback.getComment(), actualFeedback.getComment()); assertEquals(expectedFeedback.getQuestionText(), actualFeedback.getQuestionText()); } @SmallTest public void testNewPostFeedbackRequest_nullComment() throws BadRequestException { final FeedbackRequestFactory builder = new FeedbackRequestFactory(getContext(), new MockAccessTokenRetriever()); final JsonObject feedbackJson = FeedbackFixture.getFullJsonObject(); feedbackJson.addProperty("comment", (String) null); final Feedback expectedFeedback = new FeedbackJsonFactory().from(feedbackJson); final AbstractRequest request = builder.buildFeedbackRequest(OrderFixture.UUID_FIXTURE_1, expectedFeedback); assertEquals(HttpMethod.POST, request.getMethod()); assertTrue( "hits orders/:id/feedback endpoint", request.getUrl(getContext()).getPath() .contains( String.format(Locale.US, "orders/%s/feedback", OrderFixture.UUID_FIXTURE_1))); assertTrue("Url points to proper api version", request.getUrl(getContext()).getPath() .contains(LevelUpRequest.API_VERSION_CODE_V15)); final String body = NullUtils.nonNullContract(((LevelUpRequest) request).getBody(getContext())); final Feedback actualFeedback = new FeedbackJsonFactory().from(body); assertNull(actualFeedback.getComment()); assertEquals(expectedFeedback.getQuestionText(), actualFeedback.getQuestionText()); assertEquals(expectedFeedback.getRating(), actualFeedback.getRating()); } @Override @NonNull public Context getContext() { return NullUtils.nonNullContract(super.getContext()); } }