// 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 com.google.api.adwords.lib.AdWordsService;
import com.google.api.adwords.lib.AdWordsUser;
import com.google.api.adwords.v201008.cm.AdGroupCriterionIdFilter;
import com.google.api.adwords.v201008.cm.AdGroupCriterionOperation;
import com.google.api.adwords.v201008.cm.AdGroupCriterionPage;
import com.google.api.adwords.v201008.cm.AdGroupCriterionReturnValue;
import com.google.api.adwords.v201008.cm.AdGroupCriterionSelector;
import com.google.api.adwords.v201008.cm.AdGroupCriterionServiceInterface;
import com.google.api.adwords.v201008.cm.Bid;
import com.google.api.adwords.v201008.cm.BiddableAdGroupCriterion;
import com.google.api.adwords.v201008.cm.Criterion;
import com.google.api.adwords.v201008.cm.CriterionUse;
import com.google.api.adwords.v201008.cm.DateRange;
import com.google.api.adwords.v201008.cm.Keyword;
import com.google.api.adwords.v201008.cm.KeywordMatchType;
import com.google.api.adwords.v201008.cm.ManualCPCAdGroupCriterionBids;
import com.google.api.adwords.v201008.cm.Money;
import com.google.api.adwords.v201008.cm.NegativeAdGroupCriterion;
import com.google.api.adwords.v201008.cm.Operator;
import com.google.api.adwords.v201008.cm.StatsSelector;
import com.google.api.adwords.v201008.cm.UserStatus;
/**
* Functional tests for AdGroupAdService.
*
* @author api.naoki.ishihara@gmail.com (Naoki Ishihara)
*/
public class AdGroupCriterionServiceTest extends TestCase {
private AdWordsUser user = null;
private long campaignId;
private long adGroupId;
private long criterionId;
private AdGroupCriterionServiceInterface service = null;
private TestUtils testUtils = null;
/**
* 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.ADGROUP_CRITERION_SERVICE);
testUtils = new TestUtils(user);
campaignId = testUtils.createCampaign();
adGroupId = testUtils.createAdGroup(campaignId);
criterionId = testUtils.createKeyword(adGroupId);
}
/**
* Test adding a biddable ad group criterion.
*/
public void testAddBiddable() throws Exception {
// Create keyword.
Keyword keyword = new Keyword();
keyword.setText("mars cruise");
keyword.setMatchType(KeywordMatchType.BROAD);
// Create biddable ad group criterion.
BiddableAdGroupCriterion criterion = new BiddableAdGroupCriterion();
criterion.setAdGroupId(adGroupId);
criterion.setCriterion(keyword);
criterion.setUserStatus(UserStatus.PAUSED);
criterion.setDestinationUrl("http://www.example.com");
// Create bids.
ManualCPCAdGroupCriterionBids bids = new ManualCPCAdGroupCriterionBids();
bids.setMaxCpc(new Bid(new Money(null, 10000L)));
criterion.setBids(bids);
// Create operations.
AdGroupCriterionOperation keywordAdGroupCriterionOperation = new AdGroupCriterionOperation();
keywordAdGroupCriterionOperation.setOperand(criterion);
keywordAdGroupCriterionOperation.setOperator(Operator.ADD);
AdGroupCriterionOperation[] operations =
new AdGroupCriterionOperation[] {keywordAdGroupCriterionOperation};
// Add ad group criteria.
AdGroupCriterionReturnValue result = service.mutate(operations);
BiddableAdGroupCriterion testCriterion = (BiddableAdGroupCriterion) result.getValue()[0];
// Exclude generated fields.
criterion.getCriterion().setId(testCriterion.getCriterion().getId());
criterion.getCriterion().setCriterionType(testCriterion.getCriterion().getCriterionType());
criterion.setSystemServingStatus(testCriterion.getSystemServingStatus());
criterion.setApprovalStatus(testCriterion.getApprovalStatus());
criterion.setAdGroupCriterionType(testCriterion.getAdGroupCriterionType());
criterion.getBids().setAdGroupCriterionBidsType(
testCriterion.getBids().getAdGroupCriterionBidsType());
((ManualCPCAdGroupCriterionBids) criterion.getBids())
.getMaxCpc()
.getAmount()
.setComparableValueType(
(((ManualCPCAdGroupCriterionBids) testCriterion.getBids()).getMaxCpc().getAmount()
.getComparableValueType()));
((ManualCPCAdGroupCriterionBids) criterion.getBids())
.setBidSource((((ManualCPCAdGroupCriterionBids) testCriterion.getBids()).getBidSource()));
((ManualCPCAdGroupCriterionBids) criterion.getBids())
.setMaxCpc(((ManualCPCAdGroupCriterionBids) testCriterion.getBids()).getMaxCpc());
((ManualCPCAdGroupCriterionBids) criterion.getBids())
.setEnhancedCpcEnabled(((ManualCPCAdGroupCriterionBids) testCriterion.getBids())
.getEnhancedCpcEnabled());
criterion.setFirstPageCpc(testCriterion.getFirstPageCpc());
criterion.setQualityInfo(testCriterion.getQualityInfo());
criterion.setStats(testCriterion.getStats());
TestUtils.assertDeepReflectionEquals(criterion, testCriterion);
}
/**
* Test adding a negative ad group criterion.
*/
public void testAddNegative() throws Exception {
// Create keyword.
Keyword keyword = new Keyword();
keyword.setText("jupiter cruise");
keyword.setMatchType(KeywordMatchType.BROAD);
// Create biddable ad group criterion.
NegativeAdGroupCriterion criterion = new NegativeAdGroupCriterion();
criterion.setAdGroupId(adGroupId);
criterion.setCriterion(keyword);
// Create operations.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.setOperand(criterion);
operation.setOperator(Operator.ADD);
AdGroupCriterionOperation[] operations = new AdGroupCriterionOperation[] {operation};
// Add ad group criteria.
AdGroupCriterionReturnValue result = service.mutate(operations);
NegativeAdGroupCriterion testCriterion = (NegativeAdGroupCriterion) result.getValue()[0];
// Exclude generated fields.
criterion.getCriterion().setId(testCriterion.getCriterion().getId());
criterion.getCriterion().setCriterionType(testCriterion.getCriterion().getCriterionType());
criterion.setAdGroupCriterionType(testCriterion.getAdGroupCriterionType());
TestUtils.assertDeepReflectionEquals(criterion, testCriterion);
}
/**
* Test updating an ad group criterion.
*/
public void testUpdate() throws Exception {
// Create criterion with criterionId
BiddableAdGroupCriterion criterion = new BiddableAdGroupCriterion();
criterion.setAdGroupId(adGroupId);
criterion.setCriterion(new Criterion(criterionId, null));
criterion.setUserStatus(UserStatus.PAUSED);
// Create operations.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.setOperand(criterion);
operation.setOperator(Operator.SET);
AdGroupCriterionOperation[] operations = new AdGroupCriterionOperation[] {operation};
// Update ad group criteria.
AdGroupCriterionReturnValue result = service.mutate(operations);
BiddableAdGroupCriterion testCriterion = (BiddableAdGroupCriterion) result.getValue()[0];
assertEquals(criterion.getUserStatus(), testCriterion.getUserStatus());
}
/**
* Test removing ad group criterion.
*/
public void testRemove() throws Exception {
// Create criterion with criterionId
BiddableAdGroupCriterion criterion = new BiddableAdGroupCriterion();
criterion.setAdGroupId(adGroupId);
criterion.setCriterion(new Criterion(criterionId, null));
// Create operations.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.setOperand(criterion);
operation.setOperator(Operator.SET);
AdGroupCriterionOperation[] operations = new AdGroupCriterionOperation[] {operation};
// Update ad group criteria.
AdGroupCriterionReturnValue result = service.mutate(operations);
BiddableAdGroupCriterion testCriterion = (BiddableAdGroupCriterion) result.getValue()[0];
assertEquals(criterion.getCriterion().getId(), testCriterion.getCriterion().getId());
}
/**
* Test getting an ad group criterion.
*/
public void testGet() throws Exception {
// Create selector and filter.
AdGroupCriterionSelector selector = new AdGroupCriterionSelector();
AdGroupCriterionIdFilter idFilter = new AdGroupCriterionIdFilter(null, adGroupId, criterionId);
selector.setIdFilters(new AdGroupCriterionIdFilter[] {idFilter});
selector.setCriterionUse(CriterionUse.BIDDABLE);
selector.setUserStatuses(new UserStatus[] {UserStatus.ACTIVE});
// Create DateRange.
DateRange range = new DateRange(TestUtils.firstDayOfMonth(), TestUtils.today());
selector.setStatsSelector(new StatsSelector(range, null));
AdGroupCriterionPage page = service.get(selector);
assertNotNull(page);
assertEquals(new Integer(1), page.getTotalNumEntries());
assertNotNull(((BiddableAdGroupCriterion) page.getEntries(0)).getStats());
}
/**
* Test getting all ad group criteria in an ad group.
*/
public void testGetAllInAdGroup() throws Exception {
// Create selector and filter.
AdGroupCriterionSelector selector = new AdGroupCriterionSelector();
AdGroupCriterionIdFilter idFilter = new AdGroupCriterionIdFilter(null, adGroupId, null);
selector.setIdFilters(new AdGroupCriterionIdFilter[] {idFilter});
AdGroupCriterionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
/**
* Test getting all ad group criteria in a campaign.
*/
public void testGetAllIncampaign() throws Exception {
// Create selector and filter.
AdGroupCriterionSelector selector = new AdGroupCriterionSelector();
AdGroupCriterionIdFilter idFilter = new AdGroupCriterionIdFilter(campaignId, null, null);
selector.setIdFilters(new AdGroupCriterionIdFilter[] {idFilter});
AdGroupCriterionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
/**
* Test getting all ad group criteria.
*/
public void testGetAll() throws Exception {
AdGroupCriterionSelector selector = new AdGroupCriterionSelector();
AdGroupCriterionPage page = service.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
}