View Javadoc

1   package com.atlassian.marketplace.client.impl;
2   
3   import java.net.URI;
4   
5   import com.atlassian.marketplace.client.MpacException;
6   import com.atlassian.marketplace.client.model.AddonCategorySummary;
7   import com.atlassian.marketplace.client.model.Application;
8   import com.atlassian.marketplace.client.model.Links;
9   import com.atlassian.marketplace.client.model.ModelBuilders;
10  import com.atlassian.marketplace.client.util.UriBuilder;
11  
12  import com.google.common.collect.ImmutableList;
13  
14  import org.junit.Test;
15  
16  import static com.atlassian.marketplace.client.TestObjects.HOST_BASE;
17  import static com.atlassian.marketplace.client.api.ApplicationKey.JIRA;
18  import static com.atlassian.marketplace.client.impl.ClientTester.FAKE_APPLICATIONS_PATH;
19  import static com.atlassian.marketplace.client.model.ModelBuilders.links;
20  import static com.atlassian.marketplace.client.model.TestModelBuilders.addonCategorySummary;
21  import static com.atlassian.marketplace.client.model.TestModelBuilders.application;
22  import static org.hamcrest.MatcherAssert.assertThat;
23  import static org.hamcrest.Matchers.contains;
24  import static org.mockito.Mockito.verify;
25  
26  public class AddonCategoriesImplTest extends ApiImplTestBase
27  {
28      private static final String FAKE_APP_BY_KEY_PATH = "/fake/applications/";
29      private static final String FAKE_CATEGORIES_BY_APP_PATH = "/fake/categories/";
30      private static final AddonCategorySummary CAT_REP = addonCategorySummary().build();
31      private static final Links APPS_LINKS =
32          ModelBuilders.links().putTemplate("byKey", FAKE_APP_BY_KEY_PATH + "{applicationKey}")
33                               .build();
34      private static final InternalModel.Applications APPS_REP =
35              InternalModel.applications(APPS_LINKS, ImmutableList.<Application>of());
36      private static final Application APP_REP =
37              application().addLink("addonCategories", URI.create(FAKE_CATEGORIES_BY_APP_PATH)).build();
38      private static final InternalModel.AddonCategories CATS_REP =
39              InternalModel.addonCategories(links().build(), ImmutableList.of(CAT_REP));
40      
41      @Test
42      public void categoriesAccessorQueriesRootResource() throws Exception
43      {
44          tester.client.addonCategories();
45          
46          verify(tester.httpTransport).get(tester.apiBase);
47      }
48      
49      @Test(expected=MpacException.class)
50      public void categoriesAccessorThrowsExceptionIfRootResourceNotAvailable() throws Exception
51      {
52          tester.mockResourceError(tester.apiBase, 404);
53          tester.client.addonCategories();
54      }
55  
56      @Test
57      public void getByApplicationUsesAppByKeyResource() throws Exception
58      {
59          URI appsApiZeroLengthQuery = UriBuilder.fromUri(HOST_BASE + FAKE_APPLICATIONS_PATH).queryParam("limit", 0).build();
60          URI appQuery = UriBuilder.fromUri(HOST_BASE + FAKE_APP_BY_KEY_PATH + JIRA.getKey()).build();
61          URI catsQuery = UriBuilder.fromUri(HOST_BASE + FAKE_CATEGORIES_BY_APP_PATH).build();
62          tester.mockResource(appsApiZeroLengthQuery, APPS_REP);
63          tester.mockResource(appQuery, APP_REP);
64          tester.mockResource(catsQuery, CATS_REP);
65  
66          assertThat(tester.client.addonCategories().findForApplication(JIRA), contains(CAT_REP));
67      }
68  }