View Javadoc

1   package com.atlassian.marketplace.client.impl;
2   
3   import java.net.URI;
4   
5   import com.atlassian.marketplace.client.model.Addon;
6   import com.atlassian.marketplace.client.model.AddonReference;
7   import com.atlassian.marketplace.client.model.AddonSummary;
8   import com.atlassian.marketplace.client.model.AddonVersion;
9   import com.atlassian.marketplace.client.model.AddonVersionSummary;
10  import com.atlassian.marketplace.client.model.Entity;
11  import com.atlassian.marketplace.client.model.Links;
12  import com.atlassian.marketplace.client.util.UriBuilder;
13  
14  import com.google.common.collect.ImmutableList;
15  
16  import static com.atlassian.marketplace.client.TestObjects.HOST_BASE;
17  import static com.atlassian.marketplace.client.TestObjects.LINKS_WITH_NEXT;
18  import static com.atlassian.marketplace.client.TestObjects.LINKS_WITH_PREV;
19  import static com.atlassian.marketplace.client.impl.ClientTester.FAKE_ADDONS_PATH;
20  import static com.atlassian.marketplace.client.model.ModelBuilders.links;
21  import static com.atlassian.marketplace.client.model.TestModelBuilders.addon;
22  import static com.atlassian.marketplace.client.model.TestModelBuilders.addonReference;
23  import static com.atlassian.marketplace.client.model.TestModelBuilders.addonSummary;
24  import static com.atlassian.marketplace.client.model.TestModelBuilders.addonVersion;
25  
26  public abstract class AddonsImplTestBase<T extends Entity> extends ApiImplTestBaseWithCreateAndUpdate<T>
27  {
28      protected static final String FAKE_ADDON_BY_KEY_PATH = "/fake/addons/by/key/";
29      protected static final String FAKE_ADDON_VERSIONS_PATH = FAKE_ADDON_BY_KEY_PATH + "versions";
30      protected static final String FAKE_ADDON_VERSION_BY_BUILD_PATH = FAKE_ADDON_VERSIONS_PATH + "/build/";
31      protected static final String FAKE_ADDON_VERSION_BY_NAME_PATH = FAKE_ADDON_VERSIONS_PATH + "/name/";
32      protected static final String FAKE_TOKENS_PATH = FAKE_ADDON_BY_KEY_PATH + "tokens";
33      protected static final String FAKE_LATEST_VERSION_PATH = FAKE_ADDON_VERSIONS_PATH + "/latest";
34      protected static final String FAKE_PRICING_TEMPLATE = "/fake/pricing/{cloudOrServer}/{liveOrPending}";
35      protected static final String FAKE_BANNERS_PATH = "/fake/banners";
36      protected static final String FAKE_RECOMMENDATIONS_PATH = "/fake/recommendations";
37      protected static final Links ADDONS_LINKS = links()
38              .putTemplate("byKey", FAKE_ADDON_BY_KEY_PATH + "{addonKey}")
39              .putTemplate("banners", FAKE_BANNERS_PATH + "{?whatever}")
40              .build();
41      protected static final Links ADDON_VERSIONS_LINKS = links()
42              .putTemplate("byBuild", FAKE_ADDON_VERSION_BY_BUILD_PATH + "{pluginBuildNumber}")
43              .putTemplate("byName", FAKE_ADDON_VERSION_BY_NAME_PATH + "{name}")
44              .put("latest", URI.create(FAKE_LATEST_VERSION_PATH))
45              .build();
46      protected static final Links TOKENS_LINKS = links()
47              .putTemplate("byToken", FAKE_TOKENS_PATH + "/{token}")
48              .build();
49      protected static final Links ADDON_LINKS = links()
50              .put("self", URI.create(FAKE_ADDON_BY_KEY_PATH))
51              .putTemplate("pricing", FAKE_PRICING_TEMPLATE)
52              .put("recommendations", URI.create(FAKE_RECOMMENDATIONS_PATH))
53              .put("tokens", URI.create(FAKE_TOKENS_PATH))
54              .put("versions", URI.create(FAKE_ADDON_VERSIONS_PATH))
55              .build();
56      protected static final Addon ADDON_REP = addon().links(ADDON_LINKS).build();
57      protected static final AddonSummary ADDON_SUMMARY_REP = addonSummary().build();
58      protected static final AddonReference ADDON_REF_REP = addonReference().build();
59      protected static final AddonVersion ADDON_VERSION_REP = addonVersion().build();
60      protected static final InternalModel.Addons ADDONS_REP =
61              InternalModel.addons(ADDONS_LINKS, ImmutableList.of(ADDON_SUMMARY_REP), 2);
62      protected static final InternalModel.Addons ADDONS_REP_WITH_NEXT =
63              InternalModel.addons(LINKS_WITH_NEXT, ImmutableList.of(ADDON_SUMMARY_REP), 2);
64      protected static final InternalModel.Addons ADDONS_REP_WITH_PREV =
65              InternalModel.addons(LINKS_WITH_PREV, ImmutableList.of(ADDON_SUMMARY_REP), 2);
66      protected static final InternalModel.AddonVersions ADDON_VERSIONS_REP =
67              InternalModel.addonVersions(ADDON_VERSIONS_LINKS, ImmutableList.<AddonVersionSummary>of(), 0);
68      protected static final InternalModel.AddonReferences BANNERS_REP =
69              InternalModel.addonReferences(links().build(), ImmutableList.of(ADDON_REF_REP), 2);
70      protected static final InternalModel.AddonReferences RECOMMENDATIONS_REP =
71              InternalModel.addonReferences(links().build(), ImmutableList.of(ADDON_REF_REP), 2);
72      protected static final InternalModel.MinimalLinks TOKENS_REP =
73              new InternalModel.MinimalLinks(TOKENS_LINKS);
74      
75      protected UriBuilder addonsApi()
76      {
77          return UriBuilder.fromUri(HOST_BASE + FAKE_ADDONS_PATH);
78      }
79  
80      protected UriBuilder addonsApiZeroLengthQuery()
81      {
82          return UriBuilder.fromUri(HOST_BASE + FAKE_ADDONS_PATH).queryParam("limit", 0);
83      }
84  
85      protected UriBuilder addonByKeyUri(String key)
86      {
87          return UriBuilder.fromUri(HOST_BASE + FAKE_ADDON_BY_KEY_PATH + key);
88      }
89  
90      protected UriBuilder addonVersionZeroLengthQuery()
91      {
92          return UriBuilder.fromUri(HOST_BASE + FAKE_ADDON_VERSIONS_PATH).queryParam("limit", 0);
93      }
94  
95      protected UriBuilder latestVersionUri(String key)
96      {
97          return UriBuilder.fromUri(HOST_BASE + FAKE_LATEST_VERSION_PATH);
98      }
99  
100     protected UriBuilder recommendationsUri()
101     {
102         return UriBuilder.fromUri(HOST_BASE + FAKE_RECOMMENDATIONS_PATH);
103     }
104 
105     protected UriBuilder tokensUri()
106     {
107         return UriBuilder.fromUri(HOST_BASE + FAKE_TOKENS_PATH);
108     }
109     
110     protected URI tokenUri(String token)
111     {
112         return URI.create(HOST_BASE + FAKE_TOKENS_PATH + "/" + token);
113     }
114 
115     protected UriBuilder versionByBuildUri(int buildNumber)
116     {
117         return UriBuilder.fromUri(HOST_BASE + FAKE_ADDON_VERSION_BY_BUILD_PATH + + buildNumber);
118     }
119 
120     protected UriBuilder versionByNameUri(String name)
121     {
122         return UriBuilder.fromUri(HOST_BASE + FAKE_ADDON_VERSION_BY_NAME_PATH + name);
123     }
124     
125     protected UriBuilder bannersApi()
126     {
127         return UriBuilder.fromUri(HOST_BASE + FAKE_BANNERS_PATH);
128     }
129     
130     protected void setupAddonsResource(UriBuilder addonsUri) throws Exception
131     {
132         setupAddonsResource(addonsUri, ADDONS_REP);
133     }
134     
135     protected void setupAddonsResource(UriBuilder addonsUri, InternalModel.Addons rep) throws Exception
136     {
137         tester.mockResource(addonsUri.build(), rep);
138     }
139 
140     protected void setupAddonBannersResource(UriBuilder addonsUri) throws Exception
141     {
142         setupAddonBannersResource(addonsUri, BANNERS_REP);
143     }
144     
145     protected void setupAddonBannersResource(UriBuilder addonsUri, InternalModel.AddonReferences rep) throws Exception
146     {
147         setupAddonsResource(addonsApiZeroLengthQuery());
148         tester.mockResource(addonsUri.build(), rep);
149     }
150 
151     protected void setupAddonByKeyResource(UriBuilder uri) throws Exception
152     {
153         setupAddonsResource(addonsApiZeroLengthQuery());
154         tester.mockResource(uri.build(), ADDON_REP);
155     }
156 
157     protected void setupVersionResource(String addonKey, UriBuilder uri) throws Exception
158     {
159         setupAddonByKeyResource(addonByKeyUri(addonKey));
160         tester.mockResource(addonVersionZeroLengthQuery().build(), ADDON_VERSIONS_REP);
161         tester.mockResource(uri.build(), ADDON_VERSION_REP);
162     }
163     
164     protected void setupRecommendationsResource(String addonKey, UriBuilder uri) throws Exception
165     {
166         setupAddonsResource(addonsApiZeroLengthQuery());
167         setupAddonByKeyResource(addonByKeyUri(addonKey));
168         tester.mockResource(uri.build(), RECOMMENDATIONS_REP);
169     }
170     
171     protected void setupClaimTokenResource(String addonKey, String token, int status) throws Exception
172     {
173         setupAddonByKeyResource(addonByKeyUri("x").queryParam("accessToken", token));
174         tester.mockResource(tokensUri().queryParam("accessToken", token).queryParam("limit", "0").build(),
175             TOKENS_REP);
176         tester.mockPostResource(tokenUri("t"), status);
177     }
178 }