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 }