// 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.AdGroup;
import com.google.api.adwords.v201008.cm.AdGroupOperation;
import com.google.api.adwords.v201008.cm.AdGroupPage;
import com.google.api.adwords.v201008.cm.AdGroupReturnValue;
import com.google.api.adwords.v201008.cm.AdGroupSelector;
import com.google.api.adwords.v201008.cm.AdGroupServiceInterface;
import com.google.api.adwords.v201008.cm.AdGroupStatus;
import com.google.api.adwords.v201008.cm.Bid;
import com.google.api.adwords.v201008.cm.DateRange;
import com.google.api.adwords.v201008.cm.ManualCPCAdGroupBids;
import com.google.api.adwords.v201008.cm.Money;
import com.google.api.adwords.v201008.cm.Operator;
import com.google.api.adwords.v201008.cm.StatsSelector;
/**
* Functional tests for AdGroupService.
*
* @author api.naoki.ishihara@gmail.com (Naoki Ishihara)
*/
public class AdGroupServiceTest extends TestCase {
private TestUtils testUtils = null;
private AdWordsUser user = null;
private AdGroupServiceInterface adGroupService;
private long campaignId;
private long adGroupId;
/**
* Set up the test fixtures.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
user = TestUtils.createUser("test_data/test.properties");
adGroupService = user.getService(AdWordsService.V201008.ADGROUP_SERVICE);
testUtils = new TestUtils(user);
campaignId = testUtils.createCampaign();
adGroupId = testUtils.createAdGroup(campaignId);
}
/**
* Test whether we can create a ad group.
*/
public void testAdd() throws Exception {
// Create ad group.
AdGroup adGroup = new AdGroup();
adGroup.setName("Ad Group #" + System.currentTimeMillis());
adGroup.setStatus(AdGroupStatus.PAUSED);
adGroup.setCampaignId(campaignId);
// Create ad group bid.
ManualCPCAdGroupBids adGroupBids = new ManualCPCAdGroupBids();
adGroupBids.setKeywordMaxCpc(new Bid(new Money(null, 1000000L)));
adGroup.setBids(adGroupBids);
// Create operations.
AdGroupOperation operation = new AdGroupOperation();
operation.setOperand(adGroup);
operation.setOperator(Operator.ADD);
AdGroupOperation[] operations = new AdGroupOperation[] { operation };
// Add ad group.
AdGroupReturnValue result = adGroupService.mutate(operations);
AdGroup testAdGroup = result.getValue()[0];
// Set the generated fields.
adGroup.setId(testAdGroup.getId());
adGroup.setCampaignName(testAdGroup.getCampaignName());
adGroup.getBids().setAdGroupBidsType(
(testAdGroup.getBids().getAdGroupBidsType()));
((ManualCPCAdGroupBids) adGroup.getBids())
.setEnhancedCpcEnabled(((ManualCPCAdGroupBids) testAdGroup
.getBids()).getEnhancedCpcEnabled());
((ManualCPCAdGroupBids) adGroup.getBids())
.getKeywordMaxCpc()
.getAmount()
.setComparableValueType(
((ManualCPCAdGroupBids) testAdGroup.getBids())
.getKeywordMaxCpc().getAmount()
.getComparableValueType());
TestUtils.assertDeepReflectionEquals(adGroup, testAdGroup);
}
/**
* Test updating an ad group.
*/
public void testUpdate() throws Exception {
// Get the AdGroupService.
adGroupService = user.getService(AdWordsService.V201008.ADGROUP_SERVICE);
// Create ad group.
AdGroup adGroup = new AdGroup();
adGroup.setId(adGroupId);
// Create updated ad group bid.
ManualCPCAdGroupBids adGroupBids = new ManualCPCAdGroupBids();
adGroupBids.setKeywordMaxCpc(new Bid(new Money(null, 2000000L)));
adGroup.setBids(adGroupBids);
// Create operations.
AdGroupOperation operation = new AdGroupOperation();
operation.setOperand(adGroup);
operation.setOperator(Operator.SET);
AdGroupOperation[] operations = new AdGroupOperation[] { operation };
// Update ad group.
AdGroupReturnValue result = adGroupService.mutate(operations);
AdGroup testAdGroup = result.getValue()[0];
// Exclude generated fields.
adGroup.setCampaignName(testAdGroup.getCampaignName());
adGroup.setCampaignId(testAdGroup.getCampaignId());
adGroup.setStatus(testAdGroup.getStatus());
adGroup.setName(testAdGroup.getName());
adGroup.getBids().setAdGroupBidsType(
(testAdGroup.getBids().getAdGroupBidsType()));
((ManualCPCAdGroupBids) adGroup.getBids())
.setEnhancedCpcEnabled(((ManualCPCAdGroupBids) testAdGroup
.getBids()).getEnhancedCpcEnabled());
((ManualCPCAdGroupBids) adGroup.getBids())
.getKeywordMaxCpc()
.getAmount()
.setComparableValueType(
((ManualCPCAdGroupBids) testAdGroup.getBids())
.getKeywordMaxCpc().getAmount()
.getComparableValueType());
TestUtils.assertDeepReflectionEquals(adGroup, testAdGroup);
}
/**
* Test deleting an ad group.
*/
public void testDelete() throws Exception {
// Get the AdGroupService.
adGroupService = user.getService(AdWordsService.V201008.ADGROUP_SERVICE);
// Create ad group with DELETED status.
AdGroup adGroup = new AdGroup();
adGroup.setId(adGroupId);
adGroup.setStatus(AdGroupStatus.DELETED);
// Create operations.
AdGroupOperation operation = new AdGroupOperation();
operation.setOperand(adGroup);
operation.setOperator(Operator.SET);
AdGroupOperation[] operations = new AdGroupOperation[] { operation };
// Delete ad group.
AdGroupReturnValue result = adGroupService.mutate(operations);
AdGroup testAdGroup = result.getValue()[0];
// Exclude generated fields.
adGroup.setCampaignName(testAdGroup.getCampaignName());
adGroup.setCampaignId(testAdGroup.getCampaignId());
adGroup.setName(testAdGroup.getName());
adGroup.setBids(testAdGroup.getBids());
TestUtils.assertDeepReflectionEquals(adGroup, testAdGroup);
}
/**
* Test getting an ad group.
*/
public void testGet() throws Exception{
// Create the AdGroupSelector.
AdGroupSelector selector = new AdGroupSelector();
selector.setAdGroupIds(new long[] {adGroupId});
// Create the DateRange and AdGroupSelector.
DateRange range = new DateRange(TestUtils.firstDayOfMonth(), TestUtils.today());
selector.setStatsSelector(new StatsSelector(range, null));
AdGroupPage page = adGroupService.get(selector);
assertNotNull(page);
assertEquals(new Integer(1), page.getTotalNumEntries());
assertNotNull(page.getEntries(0).getStats());
}
/**
* Test getting all ad groups in a campaign
*/
public void testGetAllInCampaign() throws Exception{
AdGroupSelector selector = new AdGroupSelector ();
selector.setCampaignIds(new long[] {campaignId});
AdGroupPage page = adGroupService.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >=1 );
}
/**
* Test getting all ad groups.
*/
public void testGetAll() throws Exception{
AdGroupSelector selector = new AdGroupSelector();
AdGroupPage page = adGroupService.get(selector);
assertNotNull(page);
assertNotNull(page.getEntries());
assertTrue("Expected at least 1 entry", page.getTotalNumEntries() >= 1);
}
}