blob: 6affa741803bdf9abe50a25226abe0dababb4eed [file] [log] [blame]
// Copyright 2019 The Feed Authors.
//
// 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.google.android.libraries.feed.feedrequestmanager;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.MockitoAnnotations.initMocks;
import com.google.android.libraries.feed.testing.actionmanager.FakeActionReader;
import com.google.android.libraries.feed.testing.protocoladapter.FakeProtocolAdapter;
import com.google.protobuf.ByteString;
import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
import com.google.search.now.wire.feed.ActionPayloadForTestProto.ActionPayloadForTest;
import com.google.search.now.wire.feed.ActionPayloadProto.ActionPayload;
import com.google.search.now.wire.feed.ActionPropertiesProto.ActionProperties;
import com.google.search.now.wire.feed.ActionRequestProto.ActionRequest;
import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
import com.google.search.now.wire.feed.ContentIdProto.ContentId;
import com.google.search.now.wire.feed.FeedActionProto.FeedAction;
import com.google.search.now.wire.feed.FeedActionRequestProto.FeedActionRequest;
import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
import java.util.HashSet;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
/** Test of the {@link UploadableActionsRequestBuilder} class. */
@RunWith(RobolectricTestRunner.class)
public class UploadableActionsRequestBuilderTest {
private static final String CONTENT_ID = "contentId";
private static final int TIME = 100;
private final ActionPayload payload =
ActionPayload.newBuilder()
.setExtension(
ActionPayloadForTest.actionPayloadForTestExtension,
ActionPayloadForTest.newBuilder().setId(CONTENT_ID).build())
.build();
private UploadableActionsRequestBuilder builder;
private HashSet<StreamUploadableAction> actionSet = new HashSet<>();
private ConsistencyToken token =
ConsistencyToken.newBuilder().setToken(ByteString.copyFrom(new byte[] {0x1, 0xf})).build();
private ActionRequest.Builder requestBuilder;
private FeedActionRequest.Builder feedActionRequestBuilder;
private OpaqueActionData data;
private FakeProtocolAdapter fakeProtocolAdapter;
private FakeActionReader fakeActionReader;
@Before
public void setUp() {
initMocks(this);
fakeProtocolAdapter = new FakeProtocolAdapter();
fakeActionReader = new FakeActionReader();
data =
OpaqueActionData.newBuilder()
.setExtension(
OpaqueActionDataForTest.opaqueActionDataForTestExtension,
OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID).build())
.build();
fakeActionReader.addActionProperties(CONTENT_ID, data);
fakeProtocolAdapter.addContentId(CONTENT_ID, ContentId.getDefaultInstance());
builder = new UploadableActionsRequestBuilder(fakeActionReader, fakeProtocolAdapter);
actionSet.add(
StreamUploadableAction.newBuilder()
.setFeatureContentId(CONTENT_ID)
.setPayload(payload)
.setTimestampSeconds(TIME)
.build());
requestBuilder =
ActionRequest.newBuilder()
.setRequestVersion(ActionRequest.RequestVersion.FEED_UPLOAD_ACTION);
feedActionRequestBuilder = FeedActionRequest.newBuilder();
}
@Test
public void testUploadableActionsRequest_noToken() throws Exception {
FeedAction.Builder feedAction =
FeedAction.newBuilder()
.setActionProperties(ActionProperties.newBuilder().setActionData(data).build());
feedAction.setContentId(ContentId.getDefaultInstance());
feedAction.setActionPayload(payload);
feedAction.setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build());
feedActionRequestBuilder.addFeedAction(feedAction);
requestBuilder.setExtension(
FeedActionRequest.feedActionRequest, feedActionRequestBuilder.build());
ActionRequest expectedResult = requestBuilder.build();
ActionRequest result = builder.setActions(actionSet).build();
assertThat(result).isEqualTo(expectedResult);
}
@Test
public void testUploadableActionsRequest_noActions() throws Exception {
feedActionRequestBuilder.setConsistencyToken(token);
requestBuilder.setExtension(
FeedActionRequest.feedActionRequest, feedActionRequestBuilder.build());
ActionRequest expectedResult = requestBuilder.build();
ActionRequest result = builder.setConsistencyToken(token).build();
assertThat(result).isEqualTo(expectedResult);
}
@Test
public void testUploadableActionsRequest() throws Exception {
FeedAction.Builder feedAction =
FeedAction.newBuilder()
.setActionProperties(ActionProperties.newBuilder().setActionData(data).build());
feedAction.setContentId(ContentId.getDefaultInstance());
feedAction.setActionPayload(payload);
feedAction.setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build());
feedActionRequestBuilder.addFeedAction(feedAction);
feedActionRequestBuilder.setConsistencyToken(token);
requestBuilder.setExtension(
FeedActionRequest.feedActionRequest, feedActionRequestBuilder.build());
ActionRequest expectedResult = requestBuilder.build();
ActionRequest result = builder.setActions(actionSet).setConsistencyToken(token).build();
assertThat(result).isEqualTo(expectedResult);
}
}