// Copyright 2011 Google Inc. All Rights Reserved.
//
// 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.api.adwords.v201008;
import junit.framework.TestCase;
import org.apache.commons.codec.binary.Base64;
import com.google.api.adwords.lib.AdWordsService;
import com.google.api.adwords.lib.AdWordsUser;
import com.google.api.adwords.v201008.cm.AdExtension;
import com.google.api.adwords.v201008.cm.Address;
import com.google.api.adwords.v201008.cm.CampaignAdExtension;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionOperation;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionPage;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionReturnValue;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionSelector;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionServiceInterface;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionStatsSelector;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionStatus;
import com.google.api.adwords.v201008.cm.DateRange;
import com.google.api.adwords.v201008.cm.GeoLocationServiceInterface;
import com.google.api.adwords.v201008.cm.GeoPoint;
import com.google.api.adwords.v201008.cm.LocationExtension;
import com.google.api.adwords.v201008.cm.LocationExtensionSource;
import com.google.api.adwords.v201008.cm.Operator;
/**
* Functional tests for CampaignAdExtensionService.
*
* @author api.naoki.ishihara@gmail.com (Naoki Ishihara)
*/
public class CampaignAdExtensionServiceTest extends TestCase {
private AdWordsUser user = null;
private CampaignAdExtensionServiceInterface service = null;
private GeoLocationServiceInterface geoLocationService = null;
private TestUtils testUtils = null;
private long campaignId;
private long adExtensionId;
/**
* Set up the test fixtures.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
user = new AdWordsUser("test_data/test.properties");
service = user.getService(AdWordsService.V201008.CAMPAIGN_AD_EXTENSION_SERVICE);
geoLocationService = user.getService(AdWordsService.V201008.GEO_LOCATION_SERVICE);
testUtils = new TestUtils(user);
campaignId = testUtils.createCampaign();
adExtensionId = testUtils.createLocationExtension(campaignId);
}
/**
* Test adding an campaign ad extension.
*/
public void testAdd() throws Exception {
// Create campaign ad extension.
CampaignAdExtension extension = new CampaignAdExtension();
extension.setCampaignId(campaignId);
extension.setAdExtension(adExtensionProvider()[0]);
extension.setStatus(CampaignAdExtensionStatus.ACTIVE);
// Create operations.
CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation();
operation.setOperand(extension);
operation.setOperator(Operator.ADD);
CampaignAdExtensionOperation[] operations = new CampaignAdExtensionOperation[] {operation};
// Add campaign ad extension.
CampaignAdExtensionReturnValue result = service.mutate(operations);
CampaignAdExtension testExtension = result.getValue()[0];
// Exclude generated fields.
extension.getAdExtension().setId(testExtension.getAdExtension().getId());
extension.getAdExtension().setAdExtensionType(
testExtension.getAdExtension().getAdExtensionType());
((LocationExtension) extension.getAdExtension()).getAddress().setProvinceCode(
((LocationExtension) testExtension.getAdExtension()).getAddress().getProvinceCode());
((LocationExtension) extension.getAdExtension())
.setEncodedLocation(((LocationExtension) testExtension.getAdExtension())
.getEncodedLocation());
extension.setApprovalStatus(testExtension.getApprovalStatus());
TestUtils.assertDeepReflectionEquals(extension, testExtension);
}
/**
* Test removing a campaign ad extension.
*/
public void testRemove() throws Exception {
// Create campaign ad extension
CampaignAdExtension extension = new CampaignAdExtension();
extension.setCampaignId(campaignId);
extension.setAdExtension(new AdExtension(adExtensionId, null));
// Create operations.
CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation();
operation.setOperand(extension);
operation.setOperator(Operator.REMOVE);
CampaignAdExtensionOperation[] operations = new CampaignAdExtensionOperation[] {operation};
// Add campaign ad extension.
CampaignAdExtensionReturnValue result = service.mutate(operations);
CampaignAdExtension testExtension = result.getValue()[0];
assertEquals(CampaignAdExtensionStatus.DELETED, testExtension.getStatus());
}
/**
* Test getting all campaign ad extension for a campaign.
*/
public void testGetAllForCampaign() throws Exception {
// Create selector.
CampaignAdExtensionSelector selector = new CampaignAdExtensionSelector();
DateRange range = new DateRange(TestUtils.firstDayOfMonth(), TestUtils.today());
selector.setStatsSelector(new CampaignAdExtensionStatsSelector(range, null));
selector.setCampaignIds(new long[] {campaignId});
selector.setStatuses(new CampaignAdExtensionStatus[] {CampaignAdExtensionStatus.ACTIVE,
CampaignAdExtensionStatus.DELETED});
CampaignAdExtensionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
/**
* Test getting all campaign ad extensions for an ad extension.
*/
public void testGetAllForAdExtension() throws Exception {
// Create selector.
CampaignAdExtensionSelector selector = new CampaignAdExtensionSelector();
selector.setAdExtensionIds(new long[] {adExtensionId});
CampaignAdExtensionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
/**
* Test getting all campaign ad extensions.
*/
public void testGetAll() throws Exception {
// Create selector.
CampaignAdExtensionSelector selector = new CampaignAdExtensionSelector();
CampaignAdExtensionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
/**
* Provides ad extensions.
*/
private AdExtension[] adExtensionProvider() {
// Create location extension.
LocationExtension locationExtension = new LocationExtension();
locationExtension.setAddress(new Address("76 9th Ave", null, "New York", "NY", "NY", "10011",
"US"));
locationExtension.setGeoPoint(new GeoPoint(new Integer(40742412), new Integer(-74004378)));
String encoded = "qrvM3QDB3iJsdO58XYyix7YGjYhU+jHs3GR0J6uqpGp55fMTsorT5ZLH69crnCWnM3"
+ "FVAFDO9Un4HNbc5/ORF0Y8hZL/sPevCyxMrjZ2gmwbQwi2fvDB2J7RhyWSV4uWA3LT"
+ "0sdG2b22nH34uDh88XZyTyZMk0Fgc6wmmIwKSlUdYlyCzJ00Qd2JGboNgcWnVeHC8c"
+ "bGd4BzGR839qM7tGXlW5TvuGUs/lz3WjScPbHY8L0TfYcv2JV3c88di7qZJem7XV9I"
+ "Qqm3SFfWOwyC6K3y1v9p+V3twZoBCf02QVZFiohpTzau9Bj6hbXNoB7LKMHK1skduI"
+ "gs854r83tIp1FevrxVNp3S7npNDcQaNAMHoYzX8iDGASwR8sWg2JUYeiTns6AihCAp"
+ "QmwNTdYHhhgh75B9PqYpSA5ghBWr0xWpiZBnM9713DwvG4LCD2smG43VAGUUrCVknw"
+ "rMxS/XSoF6NMzAFi648SglPozoGrLPdQ/4IbaIr91yAJpegOGivQPQ7NMLc2ClnYt5"
+ "mj/IzHjNK7u1WDJFW2CF0Kw+/50zljzvWDVUiBxGha7da7ihyuR32D+uCJOM+HsCgA==";
locationExtension.setEncodedLocation(Base64.decodeBase64(encoded.getBytes()));
locationExtension.setCompanyName("Google");
locationExtension.setPhoneNumber("(212) 565-0000");
locationExtension.setSource(LocationExtensionSource.ADWORDS_FRONTEND);
return new AdExtension[] {locationExtension};
}
}