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 }