// 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 java.util.ArrayList;
import java.util.Arrays;
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.ApiException;
import com.google.api.adwords.v201008.cm.CountryTarget;
import com.google.api.adwords.v201008.cm.Keyword;
import com.google.api.adwords.v201008.cm.KeywordMatchType;
import com.google.api.adwords.v201008.cm.LanguageTarget;
import com.google.api.adwords.v201008.cm.Paging;
import com.google.api.adwords.v201008.o.AdTypeSearchParameter;
import com.google.api.adwords.v201008.o.AverageTargetedMonthlySearchesSearchParameter;
import com.google.api.adwords.v201008.o.CompetitionSearchParameter;
import com.google.api.adwords.v201008.o.CompetitionSearchParameterLevel;
import com.google.api.adwords.v201008.o.CountryTargetSearchParameter;
import com.google.api.adwords.v201008.o.ExcludedKeywordSearchParameter;
import com.google.api.adwords.v201008.o.GlobalMonthlySearchesSearchParameter;
import com.google.api.adwords.v201008.o.IdeaTextMatchesSearchParameter;
import com.google.api.adwords.v201008.o.IdeaType;
import com.google.api.adwords.v201008.o.KeywordCategoryIdSearchParameter;
import com.google.api.adwords.v201008.o.KeywordMatchTypeSearchParameter;
import com.google.api.adwords.v201008.o.LanguageTargetSearchParameter;
import com.google.api.adwords.v201008.o.LongComparisonOperation;
import com.google.api.adwords.v201008.o.MobileSearchParameter;
import com.google.api.adwords.v201008.o.PlacementTypeSearchParameter;
import com.google.api.adwords.v201008.o.RelatedToKeywordSearchParameter;
import com.google.api.adwords.v201008.o.RelatedToUrlSearchParameter;
import com.google.api.adwords.v201008.o.RequestType;
import com.google.api.adwords.v201008.o.SearchParameter;
import com.google.api.adwords.v201008.o.SeedAdGroupIdSearchParameter;
import com.google.api.adwords.v201008.o.SiteConstantsAdType;
import com.google.api.adwords.v201008.o.SiteConstantsPlacementType;
import com.google.api.adwords.v201008.o.TargetingIdea;
import com.google.api.adwords.v201008.o.TargetingIdeaPage;
import com.google.api.adwords.v201008.o.TargetingIdeaSelector;
import com.google.api.adwords.v201008.o.TargetingIdeaServiceInterface;
/**
* Functional tests for TargetingIdeaService.
*
* @author api.naoki.ishihara@gmail.com (Naoki Ishihara)
*/
public class TargetingIdeaServiceTest extends TestCase {
private AdWordsUser user = null;
private TargetingIdeaServiceInterface service = null;
private long adGroupId;
private TestUtils testUtils = null;
/**
* Set up the test fixtures.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
user = new AdWordsUser("test_data/test.properties");
testUtils = new TestUtils(user);
service = user.getService(AdWordsService.V201008.TARGETING_IDEA_SERVICE);
if (adGroupId == 0) {
adGroupId = testUtils.createAdGroup(testUtils.createCampaign());
}
}
/**
* Test whether we can catch required search parameter error in selector.
*/
public void testGetEmptySelector() throws Exception {
try {
service.get(new TargetingIdeaSelector());
} catch (ApiException e) {
// Expected to catch api exception.
assertNotNull(e.getMessage1());
}
}
/**
* Test whether we can catch required search parameter error in selector.
*/
public void testGetAdTeypSearchParameter() throws Exception {
TargetingIdeaSelector selector = new TargetingIdeaSelector();
AdTypeSearchParameter adTypeSearchParameter = new AdTypeSearchParameter();
adTypeSearchParameter.setAdTypes(
new SiteConstantsAdType[] {SiteConstantsAdType.DISPLAY});
RelatedToUrlSearchParameter relatedToUrlSearchParameter =
new RelatedToUrlSearchParameter();
relatedToUrlSearchParameter.setUrls(new String[] {"http://news.google.com"});
selector.setSearchParameters(new SearchParameter[] {adTypeSearchParameter,
relatedToUrlSearchParameter});
selector.setIdeaType(IdeaType.PLACEMENT);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request average targeted monthly search parameter.
*/
public void testGetAverageTargetedMonthlySearchesSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
AverageTargetedMonthlySearchesSearchParameter averageTargetedMonthlySearchesSearchParameter =
new AverageTargetedMonthlySearchesSearchParameter();
averageTargetedMonthlySearchesSearchParameter
.setOperation(new LongComparisonOperation(1L, 50L));
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("election");
keyword.setMatchType(KeywordMatchType.BROAD);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
averageTargetedMonthlySearchesSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request competition search parameter.
*/
public void testGetCampetitionoSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
CompetitionSearchParameter competitionSearchParameter = new CompetitionSearchParameter();
CompetitionSearchParameterLevel[] levels = {CompetitionSearchParameterLevel.MEDIUM,
CompetitionSearchParameterLevel.HIGH};
competitionSearchParameter.setLevels(levels);
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("election");
keyword.setMatchType(KeywordMatchType.BROAD);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
competitionSearchParameter,relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request country target search parameter.
*/
public void testGetCountryTargetSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
CountryTargetSearchParameter countryTargetSearchParameter =
new CountryTargetSearchParameter();
CountryTarget[] targets = {new CountryTarget(null, null, "US"),
new CountryTarget(null, null, "CN"), new CountryTarget(null, null, "JP")};
countryTargetSearchParameter.setCountryTargets(targets);
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("election");
keyword.setMatchType(KeywordMatchType.BROAD);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
countryTargetSearchParameter,relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request excluded keyword search parameter.
*/
public void testGetExcludedKeyWordSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
ExcludedKeywordSearchParameter excludedKeywordSearchParameter =
new ExcludedKeywordSearchParameter();
Keyword keyword1 = new Keyword();
keyword1.setText("media player");
keyword1.setMatchType(KeywordMatchType.EXACT);
excludedKeywordSearchParameter.setKeywords(new Keyword[] {keyword1});
KeywordMatchTypeSearchParameter keywordMatchTypeSearchParameter =
new KeywordMatchTypeSearchParameter();
keywordMatchTypeSearchParameter.setKeywordMatchTypes(new KeywordMatchType[] {
KeywordMatchType.BROAD, KeywordMatchType.EXACT});
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword2 = new Keyword();
keyword2.setText("dvd player");
keyword2.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword2});
selector.setSearchParameters(new SearchParameter[] {
excludedKeywordSearchParameter, keywordMatchTypeSearchParameter,
relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request global monthly search parameter.
*/
public void testGlobalMonthlySearchesSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
GlobalMonthlySearchesSearchParameter globalMonthlySearchesSearchParameter =
new GlobalMonthlySearchesSearchParameter();
LongComparisonOperation longComparisonOperation = new LongComparisonOperation();
longComparisonOperation.setMinimum(new Long(1000));
longComparisonOperation.setMaximum(new Long(10000));
globalMonthlySearchesSearchParameter.setOperation(longComparisonOperation);
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("dvd player");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
globalMonthlySearchesSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request keyword category id search parameter.
*/
public void testGetIncludeAdultContentSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
KeywordCategoryIdSearchParameter keywordCategoryIdSearchParameter =
new KeywordCategoryIdSearchParameter(null, new Integer(5));
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
keywordCategoryIdSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request keyword match type search parameter.
*/
public void testGetKeywordMatchTypeSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
KeywordMatchTypeSearchParameter keywordMatchTypeSearchParameter =
new KeywordMatchTypeSearchParameter();
keywordMatchTypeSearchParameter.setKeywordMatchTypes(new KeywordMatchType[] {
KeywordMatchType.BROAD, KeywordMatchType.EXACT});
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
keywordMatchTypeSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request language target search parameter.
*/
public void testGetLanguageTargetSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
LanguageTargetSearchParameter languageTargetSearchParameter =
new LanguageTargetSearchParameter();
LanguageTarget[] targets = {
new LanguageTarget(null, "cn"), new LanguageTarget(null, "jp")};
languageTargetSearchParameter.setLanguageTargets(targets);
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
languageTargetSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request mobile search parameter.
*/
public void testGetMobileSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
MobileSearchParameter mobileSearchParameter = new MobileSearchParameter();
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
mobileSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request idea text matches search parameter.
*/
public void testGetIdeaTextMatchesSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
IdeaTextMatchesSearchParameter ideaTextMatchesSearchParameter =
new IdeaTextMatchesSearchParameter();
ideaTextMatchesSearchParameter.setIncluded(new String[] {"presidential vote"});
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
ideaTextMatchesSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request placement type search parameter.
*/
public void testGetPlacementTypeSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
PlacementTypeSearchParameter placementTypeSearchParameter =
new PlacementTypeSearchParameter();
SiteConstantsPlacementType[] types = {SiteConstantsPlacementType.VIDEO,
SiteConstantsPlacementType.GAME};
placementTypeSearchParameter.setPlacementTypes(types);
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("iron man");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
placementTypeSearchParameter, relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.PLACEMENT);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request related keyword search parameter
*/
public void testGetRelatedToKeywordSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("flowers");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {
relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request related to keyword search parameter and
* retrieve complete set of resulting pages.
*/
public void testGetRelatedToKeywordSearchParameterAllPages() throws Exception {
int index = 0;
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("flowers");
keyword.setMatchType(KeywordMatchType.BROAD);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
selector.setSearchParameters(new SearchParameter[] {relatedToKeywordSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(index, 100);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
ArrayList<TargetingIdea> result = new ArrayList<TargetingIdea>();
while (paging.getStartIndex() + 100 <= page.getTotalNumEntries()) {
assertNotNull(page);
result.addAll(Arrays.asList(page.getEntries()));
paging.setStartIndex(paging.getStartIndex() + 100);
selector.setPaging(paging);
page = service.get(selector);
}
assertEquals(page.getTotalNumEntries(), new Integer(result.size()));
}
/**
* Test whether we can request related to url search parameter.
*/
public void testGetRelatedToUrlSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
RelatedToUrlSearchParameter relatedToUrlSearchParameter =
new RelatedToUrlSearchParameter();
relatedToUrlSearchParameter.setUrls(new String[] {"http://finance.google.com"});
selector.setSearchParameters(new SearchParameter[] {relatedToUrlSearchParameter});
selector.setIdeaType(IdeaType.PLACEMENT);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request seed ad group id saerch parameter.
*/
public void testGetSeedAdGroupIdSearchParameter() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
SeedAdGroupIdSearchParameter seedAdGroupIdSearchParameter =
new SeedAdGroupIdSearchParameter(null, adGroupId);
selector.setSearchParameters(new SearchParameter[] {seedAdGroupIdSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
/**
* Test whether we can request bulk keyword ideas.
*/
public void testGetBulkKeywordIdeas() throws Exception {
// Create selector and parameters.
TargetingIdeaSelector selector = new TargetingIdeaSelector();
RelatedToKeywordSearchParameter relatedToKeywordSearchParameter =
new RelatedToKeywordSearchParameter();
Keyword keyword = new Keyword();
keyword.setText("presidential vote");
keyword.setMatchType(KeywordMatchType.EXACT);
relatedToKeywordSearchParameter.setKeywords(new Keyword[] {keyword});
RelatedToUrlSearchParameter relatedToUrlSearchParameter =
new RelatedToUrlSearchParameter();
relatedToUrlSearchParameter.setUrls(new String[] {"http://finance.google.com"});
selector.setSearchParameters(new SearchParameter[] {
relatedToKeywordSearchParameter, relatedToUrlSearchParameter});
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestType(RequestType.IDEAS);
Paging paging = new Paging(0, 1);
selector.setPaging(paging);
TargetingIdeaPage page = service.get(selector);
}
}