// Copyright 2010 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 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.AdExtensionOverride;
import com.google.api.adwords.v201008.cm.AdExtensionOverrideOperation;
import com.google.api.adwords.v201008.cm.AdExtensionOverrideReturnValue;
import com.google.api.adwords.v201008.cm.AdExtensionOverrideServiceInterface;
import com.google.api.adwords.v201008.cm.AdGroup;
import com.google.api.adwords.v201008.cm.AdGroupAd;
import com.google.api.adwords.v201008.cm.AdGroupAdOperation;
import com.google.api.adwords.v201008.cm.AdGroupAdServiceInterface;
import com.google.api.adwords.v201008.cm.AdGroupCriterionOperation;
import com.google.api.adwords.v201008.cm.AdGroupCriterionServiceInterface;
import com.google.api.adwords.v201008.cm.AdGroupOperation;
import com.google.api.adwords.v201008.cm.AdGroupServiceInterface;
import com.google.api.adwords.v201008.cm.AdGroupStatus;
import com.google.api.adwords.v201008.cm.AdParam;
import com.google.api.adwords.v201008.cm.AdParamOperation;
import com.google.api.adwords.v201008.cm.AdParamServiceInterface;
import com.google.api.adwords.v201008.cm.Address;
import com.google.api.adwords.v201008.cm.Bid;
import com.google.api.adwords.v201008.cm.BiddableAdGroupCriterion;
import com.google.api.adwords.v201008.cm.Budget;
import com.google.api.adwords.v201008.cm.BudgetBudgetDeliveryMethod;
import com.google.api.adwords.v201008.cm.BudgetBudgetPeriod;
import com.google.api.adwords.v201008.cm.Campaign;
import com.google.api.adwords.v201008.cm.CampaignAdExtension;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionOperation;
import com.google.api.adwords.v201008.cm.CampaignAdExtensionServiceInterface;
import com.google.api.adwords.v201008.cm.CampaignCriterionOperation;
import com.google.api.adwords.v201008.cm.CampaignCriterionServiceInterface;
import com.google.api.adwords.v201008.cm.CampaignOperation;
import com.google.api.adwords.v201008.cm.CampaignReturnValue;
import com.google.api.adwords.v201008.cm.CampaignServiceInterface;
import com.google.api.adwords.v201008.cm.CampaignStatus;
import com.google.api.adwords.v201008.cm.GeoLocation;
import com.google.api.adwords.v201008.cm.GeoLocationSelector;
import com.google.api.adwords.v201008.cm.GeoLocationServiceInterface;
import com.google.api.adwords.v201008.cm.Keyword;
import com.google.api.adwords.v201008.cm.KeywordMatchType;
import com.google.api.adwords.v201008.cm.LocationExtension;
import com.google.api.adwords.v201008.cm.LocationExtensionSource;
import com.google.api.adwords.v201008.cm.ManualCPC;
import com.google.api.adwords.v201008.cm.ManualCPCAdGroupBids;
import com.google.api.adwords.v201008.cm.Money;
import com.google.api.adwords.v201008.cm.NegativeCampaignCriterion;
import com.google.api.adwords.v201008.cm.Operator;
import com.google.api.adwords.v201008.cm.Placement;
import com.google.api.adwords.v201008.cm.TextAd;
import junit.framework.TestCase;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* A collection of utility methods used within the testing suite.
*
* @author api.naoki.ishihara@gmail.com (Naoki Ishihara)
*/
public final class TestUtils extends com.google.api.adwords.TestUtils {
private AdWordsUser user;
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
/**
* Constructor
*
* @param user user of AdWords API
*/
public TestUtils(AdWordsUser user) {
this.user = user;
}
/**
* Creates a new AdWordsUser from the properties file.
*
* @param the properties file name
* @return a new {@code AdWordsUser}
*/
public static AdWordsUser createUser(String properties) throws Exception {
// Get AdWordsUser from properties.
return new AdWordsUser(properties);
}
/**
* Create a new Campaign Object
*
* @return the ID of the created campaign
*/
public long createCampaign() throws Exception {
// Get CampaignService
CampaignServiceInterface campaignService =
user.getService(AdWordsService.V201008.CAMPAIGN_SERVICE);
// Create campaign.
Campaign campaign = new Campaign();
campaign.setName("Test Campaign #" + System.currentTimeMillis());
campaign.setBiddingStrategy(new ManualCPC());
campaign.setStatus(CampaignStatus.PAUSED);
// Create budget
Budget budget = new Budget();
budget.setPeriod(BudgetBudgetPeriod.DAILY);
budget.setAmount(new Money(null, 50000000L));
budget.setDeliveryMethod(BudgetBudgetDeliveryMethod.STANDARD);
campaign.setBudget(budget);
// Create operations.
CampaignOperation operation = new CampaignOperation();
operation.setOperand(campaign);
operation.setOperator(Operator.ADD);
CampaignOperation[] operations = new CampaignOperation[] {operation};
// Add campaign and return campaign ID
return campaignService.mutate(operations).getValue()[0].getId();
}
/**
* Delete a campaign specified by campaign ID.
*
* @param campaignId the id of the campaign
*/
public void deleteCampaign(long campaignId) throws Exception {
// Get CampaignService
CampaignServiceInterface campaignService;
campaignService = user.getService(AdWordsService.V201008.CAMPAIGN_SERVICE);
// Create campaign with DELETED status.
Campaign campaign = new Campaign();
campaign.setId(campaignId);
campaign.setStatus(CampaignStatus.DELETED);
// Create operations.
CampaignOperation operation = new CampaignOperation();
operation.setOperand(campaign);
operation.setOperator(Operator.SET);
CampaignOperation[] operations = new CampaignOperation[] {operation};
// Delete campaign.
CampaignReturnValue result = campaignService.mutate(operations);
}
/**
* Creates a new adgroup under the campaign.
*
* @param campaignId the id of the parent campaign
* @return the ID of the created ad group
*/
public long createAdGroup(long campaignId) throws Exception {
// Get the AdGroupService.
AdGroupServiceInterface adGroupService;
adGroupService = user.getService(AdWordsService.V201008.ADGROUP_SERVICE);
// Create ad group.
AdGroup adGroup = new AdGroup();
adGroup.setName("Earth to Mars Cruises #" + System.currentTimeMillis());
adGroup.setStatus(AdGroupStatus.ENABLED);
adGroup.setCampaignId(campaignId);
// Create ad group bid.
ManualCPCAdGroupBids adGroupBids = new ManualCPCAdGroupBids();
adGroupBids.setKeywordMaxCpc(new Bid(new Money(null, 10000000L)));
adGroup.setBids(adGroupBids);
// Create operations.
AdGroupOperation operation = new AdGroupOperation();
operation.setOperand(adGroup);
operation.setOperator(Operator.ADD);
AdGroupOperation[] operations = new AdGroupOperation[] {operation};
// Add ad group and return AdGroup ID.
return adGroupService.mutate(operations).getValue()[0].getId();
}
/**
* Creates a new TextAd
*
* @param adGroupId the id of the parent ad group
* @return the id of the created ad
*/
public long createTextAd(long adGroupId) throws Exception {
// Get the AdGroupAdService.
AdGroupAdServiceInterface adGroupAdService =
user.getService(AdWordsService.V201008.ADGROUP_AD_SERVICE);
// Create text ad.
TextAd textAd = new TextAd();
textAd.setHeadline("Luxury Cruise to Mars");
textAd.setDescription1("Visit the Red Planet in style.");
textAd.setDescription2("Low-gravity fun for everyone!");
textAd.setDisplayUrl("www.example.com");
textAd.setUrl("http://www.example.com");
// Create ad group ad.
AdGroupAd textAdGroupAd = new AdGroupAd();
textAdGroupAd.setAdGroupId(adGroupId);
textAdGroupAd.setAd(textAd);
// Create operations.
AdGroupAdOperation textAdGroupAdOperation = new AdGroupAdOperation();
textAdGroupAdOperation.setOperand(textAdGroupAd);
textAdGroupAdOperation.setOperator(Operator.ADD);
AdGroupAdOperation[] operations = new AdGroupAdOperation[] {textAdGroupAdOperation};
// Add new TextAd and return its ID.
return adGroupAdService.mutate(operations).getValue()[0].getAd().getId();
}
/**
* Creates a new keyword
*
* @param adGroupId the id of the parent ad group
* @return the id of the created criterion
*/
public long createKeyword(long adGroupId) throws Exception {
// Get the AdGroupCriterionService.
AdGroupCriterionServiceInterface adGroupCriterionService =
user.getService(AdWordsService.V201008.ADGROUP_CRITERION_SERVICE);
// Create keyword.
Keyword keyword = new Keyword();
keyword.setText("mars cruise");
keyword.setMatchType(KeywordMatchType.BROAD);
// Create biddable ad group criterion.
BiddableAdGroupCriterion keywordBiddableAdGroupCriterion = new BiddableAdGroupCriterion();
keywordBiddableAdGroupCriterion.setAdGroupId(adGroupId);
keywordBiddableAdGroupCriterion.setCriterion(keyword);
// Create placement.
Placement placement = new Placement();
placement.setUrl("http://mars.google.com");
// Create biddable ad group criterion for placement.
BiddableAdGroupCriterion placementBiddableAdGroupCriterion = new BiddableAdGroupCriterion();
placementBiddableAdGroupCriterion.setAdGroupId(adGroupId);
placementBiddableAdGroupCriterion.setCriterion(placement);
// Create operations.
AdGroupCriterionOperation keywordAdGroupCriterionOperation = new AdGroupCriterionOperation();
keywordAdGroupCriterionOperation.setOperand(keywordBiddableAdGroupCriterion);
keywordAdGroupCriterionOperation.setOperator(Operator.ADD);
AdGroupCriterionOperation placementAdGroupCriterionOperation = new AdGroupCriterionOperation();
placementAdGroupCriterionOperation.setOperand(placementBiddableAdGroupCriterion);
placementAdGroupCriterionOperation.setOperator(Operator.ADD);
AdGroupCriterionOperation[] operations = new AdGroupCriterionOperation[] {
keywordAdGroupCriterionOperation, placementAdGroupCriterionOperation};
// Add ad group criteria and return Criterion ID.
return adGroupCriterionService.mutate(operations).getValue()[0].getCriterion().getId();
}
/**
* Creates negative campaign keyword criterion
*
* @param campaignId the id of the parent campaign
* @return the id of the created criterion
*/
public long createNegativeCampaignKeyword(long campaignId) throws Exception {
// Get the CampaignCriterionService.
CampaignCriterionServiceInterface campaignCriterionService =
user.getService(AdWordsService.V201008.CAMPAIGN_CRITERION_SERVICE);
// Create keyword.
Keyword keyword = new Keyword();
keyword.setText("jupiter cruise");
keyword.setMatchType(KeywordMatchType.BROAD);
// Create negative campaign criterion.
NegativeCampaignCriterion negativeCampaignCriterion = new NegativeCampaignCriterion();
negativeCampaignCriterion.setCampaignId(campaignId);
negativeCampaignCriterion.setCriterion(keyword);
// Create operations.
CampaignCriterionOperation operation = new CampaignCriterionOperation();
operation.setOperand(negativeCampaignCriterion);
operation.setOperator(Operator.ADD);
// Add campaign criteria and return Criterion ID
return campaignCriterionService.mutate(new CampaignCriterionOperation[] {operation})
.getValue()[0].getCriterion().getId();
}
/**
* Sets an ad parameter on a keyword criterion.
*
* @param adGroupId the id of the ad group
* @param keywordId the id of the keyword criterion
*/
public void setAdParam(long adGroupId, long keywordId) throws Exception {
// Get the AdParamService.
AdParamServiceInterface adParamService =
user.getService(AdWordsService.V201008.AD_PARAM_SERVICE);
// Create ad params.
AdParam adParam1 = new AdParam();
adParam1.setAdGroupId(adGroupId);
adParam1.setCriterionId(keywordId);
adParam1.setInsertionText("100");
adParam1.setParamIndex(1);
AdParam adParam2 = new AdParam();
adParam2.setAdGroupId(adGroupId);
adParam2.setCriterionId(keywordId);
adParam2.setInsertionText("$40");
adParam2.setParamIndex(2);
// Create operations.
AdParamOperation adParamOperation1 = new AdParamOperation();
adParamOperation1.setOperand(adParam1);
adParamOperation1.setOperator(Operator.SET);
AdParamOperation adParamOperation2 = new AdParamOperation();
adParamOperation2.setOperand(adParam2);
adParamOperation2.setOperator(Operator.SET);
AdParamOperation[] operations = new AdParamOperation[] {adParamOperation1, adParamOperation2};
// Set ad parameters.
AdParam[] adParams = adParamService.mutate(operations);
}
/**
* Creates a location extension.
*
* @param campaignId the id of the campaign
* @return the id of the created ad extension
*/
public long createLocationExtension(long campaignId) throws Exception {
// Get the CampaignAdExtensionService.
CampaignAdExtensionServiceInterface campaignAdExtensionService =
user.getService(AdWordsService.V201008.CAMPAIGN_AD_EXTENSION_SERVICE);
// Get the GeoLocationService.
GeoLocationServiceInterface geoLocationService =
user.getService(AdWordsService.V201008.GEO_LOCATION_SERVICE);
// Create address.
Address address = new Address();
address.setStreetAddress("1600 Amphitheatre Parkway");
address.setCityName("Mountain View");
address.setProvinceCode("US-CA");
address.setPostalCode("94043");
address.setCountryCode("US");
// Create geo location selector.
GeoLocationSelector selector = new GeoLocationSelector();
selector.setAddresses(new Address[] {address});
// Get geo location.
GeoLocation[] geoLocationResult = geoLocationService.get(selector);
GeoLocation geoLocation = geoLocationResult[0];
// Create location extension.
LocationExtension locationExtension = new LocationExtension();
locationExtension.setAddress(geoLocation.getAddress());
locationExtension.setGeoPoint(geoLocation.getGeoPoint());
locationExtension.setEncodedLocation(geoLocation.getEncodedLocation());
locationExtension.setCompanyName("Google");
locationExtension.setPhoneNumber("650-253-0000");
locationExtension.setSource(LocationExtensionSource.ADWORDS_FRONTEND);
// Create campaign ad extension.
CampaignAdExtension campaignAdExtension = new CampaignAdExtension();
campaignAdExtension.setCampaignId(campaignId);
campaignAdExtension.setAdExtension(locationExtension);
// Create operations.
CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation();
operation.setOperand(campaignAdExtension);
operation.setOperator(Operator.ADD);
CampaignAdExtensionOperation[] operations = new CampaignAdExtensionOperation[] {operation};
// Add campaign ad extension and retrun AdExtension ID.
return campaignAdExtensionService.mutate(operations).getValue()[0].getAdExtension().getId();
}
/**
* Creates an ad extension override.
*
* @param adId the id of the ad
* @param campaignAdExtensionId the id of the ad extension
*/
public void createAdExtensionOverride(long adId, long campaignAdExtensionId) throws Exception {
// Get the AdExtensionOverrideService.
AdExtensionOverrideServiceInterface adExtensionOverrideService =
user.getService(AdWordsService.V201008.AD_EXTENSION_OVERRIDE_SERVICE);
// Create ad extension override.
AdExtensionOverride adExtensionOverride = new AdExtensionOverride();
adExtensionOverride.setAdId(adId);
// Create ad extension using existing id.
AdExtension adExtension = new AdExtension();
adExtension.setId(campaignAdExtensionId);
adExtensionOverride.setAdExtension(adExtension);
// Create operations.
AdExtensionOverrideOperation operation = new AdExtensionOverrideOperation();
operation.setOperand(adExtensionOverride);
operation.setOperator(Operator.ADD);
AdExtensionOverrideOperation[] operations = new AdExtensionOverrideOperation[] {operation};
// Add ad extension override.
AdExtensionOverrideReturnValue result = adExtensionOverrideService.mutate(operations);
}
/**
* Removes an ad extension override.
*
* @param adId the id of the ad
* @param campaignAdExtensionId the id of the ad extension
*/
public void removeAdExtensionOverride(long adId, long campaignAdExtensionId) throws Exception {
// Get the AdExtensionOverrideService.
AdExtensionOverrideServiceInterface adExtensionOverrideService =
user.getService(AdWordsService.V201008.AD_EXTENSION_OVERRIDE_SERVICE);
// Create ad extension override.
AdExtensionOverride adExtensionOverride = new AdExtensionOverride();
adExtensionOverride.setAdId(adId);
// Create ad extension using existing id.
AdExtension adExtension = new AdExtension();
adExtension.setId(campaignAdExtensionId);
adExtensionOverride.setAdExtension(adExtension);
// Create operations.
AdExtensionOverrideOperation operation = new AdExtensionOverrideOperation();
operation.setOperand(adExtensionOverride);
operation.setOperator(Operator.REMOVE);
AdExtensionOverrideOperation[] operations = new AdExtensionOverrideOperation[] {operation};
// Add ad extension override.
AdExtensionOverrideReturnValue result = adExtensionOverrideService.mutate(operations);
}
/**
* Get the string for the first day of the month in the format of "yyyyMMdd"
* This format can be used for
* {@link com.google.api.adwords.v201008.cm.DateRange DateRange}.
*
* @return the string for the first day of the month
*/
static public String firstDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
return dateFormat.format(calendar.getTime());
}
/**
* Get the string for today in the format of "yyyyMMdd" This format can be
* used for {@link com.google.api.adwords.v201008.cm.DateRange DateRange}.
*
* @return the string of today
*/
static public String today() {
return dateFormat.format(new Date());
}
}