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.api.ApplicationKey;
7 import com.atlassian.marketplace.client.api.ApplicationVersionSpecifier;
8 import com.atlassian.marketplace.client.model.ApplicationVersion;
9 import com.atlassian.marketplace.client.util.UriBuilder;
10
11 import org.junit.Test;
12
13 import static com.atlassian.marketplace.client.TestObjects.HOST_BASE;
14 import static com.atlassian.marketplace.client.api.ApplicationKey.JIRA;
15 import static com.atlassian.marketplace.client.impl.ClientTester.FAKE_APPLICATIONS_PATH;
16 import static com.atlassian.marketplace.client.model.TestModelBuilders.applicationVersion;
17 import static org.hamcrest.MatcherAssert.assertThat;
18 import static org.hamcrest.Matchers.contains;
19 import static org.mockito.Mockito.verify;
20
21 public abstract class ApplicationsImplVersionsTest extends ApiImplTestBaseWithCreateAndUpdate<ApplicationVersion>
22 implements ApplicationsImplTestBase
23 {
24 @Test
25 public void getVersionUsesApplicationsResource() throws Exception
26 {
27 setupAppVersionResource(JIRA, latestVersionUri(JIRA));
28 tester.client.applications().getVersion(JIRA, ApplicationVersionSpecifier.latest());
29
30 verify(tester.httpTransport).get(URI.create(HOST_BASE + FAKE_APPLICATIONS_PATH + "?limit=0"));
31 }
32
33 @Test
34 public void getLatestVersionUsesLatestVersionResource() throws Exception
35 {
36 setupAppVersionResource(JIRA, latestVersionUri(JIRA));
37
38 assertThat(tester.client.applications().getVersion(JIRA, ApplicationVersionSpecifier.latest()),
39 contains(APP_VER_REP));
40 }
41
42 @Test
43 public void getVersionByBuildUsesVersionByBuildResource() throws Exception
44 {
45 setupAppVersionResource(JIRA, versionByBuildUri(JIRA, 100));
46
47 assertThat(tester.client.applications().getVersion(JIRA, ApplicationVersionSpecifier.buildNumber(100)),
48 contains(APP_VER_REP));
49 }
50
51 @Test
52 public void getVersionByNameUsesVersionByNameResource() throws Exception
53 {
54 setupAppVersionResource(JIRA, versionByNameUri(JIRA, "1.0"));
55
56 assertThat(tester.client.applications().getVersion(JIRA, ApplicationVersionSpecifier.versionName("1.0")),
57 contains(APP_VER_REP));
58 }
59
60 @Override
61 protected URI getCollectionUri()
62 {
63 return URI.create(HOST_BASE + FAKE_APP_VERSIONS_PATH);
64 }
65
66 @Override
67 protected ApplicationVersion makeEntityToCreate()
68 {
69 return applicationVersion().build();
70 }
71
72 @Override
73 protected ApplicationVersion makeEntityFromServer()
74 {
75 return applicationVersion().links(APP_LINKS).build();
76 }
77
78 @Override
79 protected ApplicationVersion makeEntityWithUpdates(ApplicationVersion from)
80 {
81 return applicationVersion(from).build();
82 }
83
84 @Override
85 protected ApplicationVersion createEntity(ApplicationVersion entity) throws Exception
86 {
87 setupAppByKeyResource(appByKeyUri(JIRA));
88 return tester.client.applications().createVersion(JIRA, entity);
89 }
90
91 @Override
92 protected ApplicationVersion updateEntity(ApplicationVersion original, ApplicationVersion updated) throws MpacException
93 {
94 return tester.client.applications().updateVersion(original, updated);
95 }
96
97 protected UriBuilder appsApi()
98 {
99 return UriBuilder.fromUri(HOST_BASE + FAKE_APPLICATIONS_PATH);
100 }
101
102 protected UriBuilder appsApiZeroLengthQuery()
103 {
104 return appsApi().queryParam("limit", 0);
105 }
106
107 protected UriBuilder appByKeyUri(ApplicationKey key)
108 {
109 return UriBuilder.fromUri(HOST_BASE + FAKE_APP_BY_KEY_PATH + key.getKey());
110 }
111
112 protected void setupAppsResource(UriBuilder appsUri) throws Exception
113 {
114 setupAppsResource(appsUri, APPS_REP);
115 }
116
117 protected void setupAppsResource(UriBuilder appsUri, InternalModel.Applications rep) throws Exception
118 {
119 tester.mockResource(appsUri.build(), rep);
120 }
121
122 protected void setupAppByKeyResource(UriBuilder uri) throws Exception
123 {
124 setupAppsResource(appsApiZeroLengthQuery());
125 tester.mockResource(uri.build(), APP_REP);
126 }
127
128 protected UriBuilder latestVersionUri(ApplicationKey key)
129 {
130 return UriBuilder.fromUri(HOST_BASE + FAKE_APP_LATEST_PATH + key.getKey());
131 }
132
133 protected UriBuilder versionByBuildUri(ApplicationKey key, int buildNumber)
134 {
135 return UriBuilder.fromUri(HOST_BASE + FAKE_APP_VER_PATH + key.getKey() + "/" + buildNumber);
136 }
137
138 protected UriBuilder versionByNameUri(ApplicationKey key, String name)
139 {
140 return UriBuilder.fromUri(HOST_BASE + FAKE_APP_VER_PATH + "name/" + name);
141 }
142
143 protected void setupAppVersionResource(ApplicationKey key, UriBuilder uri) throws Exception
144 {
145 setupAppByKeyResource(appByKeyUri(key));
146 tester.mockResource(uri.build(), APP_VER_REP);
147 }
148 }