-
Notifications
You must be signed in to change notification settings - Fork 251
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #560 from andy-may-at/issue/559/implement_content_…
…tags_resource
- Loading branch information
Showing
7 changed files
with
419 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
94 changes: 94 additions & 0 deletions
94
src/main/java/org/zendesk/client/v2/model/hc/ContentTag.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
package org.zendesk.client.v2.model.hc; | ||
|
||
import com.fasterxml.jackson.annotation.JsonProperty; | ||
|
||
import java.util.Date; | ||
import java.util.Objects; | ||
|
||
/** | ||
* You can assign a content tag to posts and articles to loosely group them together. | ||
* For more information, see <a href="https://support.zendesk.com/hc/en-us/articles/4848925672730">About Content tags</a> | ||
* in Zendesk help. | ||
*/ | ||
public class ContentTag { | ||
|
||
/** Automatically assigned when the content tag is created. | ||
* N.B. unlike many other entities, the id field is a String, not a Long */ | ||
private String id; | ||
|
||
/** The name of the content tag */ | ||
private String name; | ||
|
||
/** The time the content tag was created */ | ||
@JsonProperty("created_at") | ||
private Date createdAt; | ||
|
||
/** The time the content tag was last updated */ | ||
@JsonProperty("updated_at") | ||
private Date updatedAt; | ||
|
||
public ContentTag() { | ||
} | ||
|
||
public ContentTag(String id, String name, Date createdAt, Date updatedAt) { | ||
this.id = id; | ||
this.name = name; | ||
this.createdAt = createdAt; | ||
this.updatedAt = updatedAt; | ||
} | ||
|
||
public String getId() { | ||
return id; | ||
} | ||
|
||
public void setId(String id) { | ||
this.id = id; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public void setName(String name) { | ||
this.name = name; | ||
} | ||
|
||
public Date getCreatedAt() { | ||
return createdAt; | ||
} | ||
|
||
public void setCreatedAt(Date createdAt) { | ||
this.createdAt = createdAt; | ||
} | ||
|
||
public Date getUpdatedAt() { | ||
return updatedAt; | ||
} | ||
|
||
public void setUpdatedAt(Date updatedAt) { | ||
this.updatedAt = updatedAt; | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) return true; | ||
if (o == null || getClass() != o.getClass()) return false; | ||
ContentTag that = (ContentTag) o; | ||
return Objects.equals(id, that.id) && Objects.equals(name, that.name) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(id, name, createdAt, updatedAt); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "ContentTag{" + | ||
"id='" + id + '\'' + | ||
", name='" + name + '\'' + | ||
", createdAt=" + createdAt + | ||
", updatedAt=" + updatedAt + | ||
'}'; | ||
} | ||
} |
117 changes: 117 additions & 0 deletions
117
src/test/java/org/zendesk/client/v2/ContentTagsTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
package org.zendesk.client.v2; | ||
|
||
import com.github.tomakehurst.wiremock.junit.WireMockClassRule; | ||
import org.apache.commons.text.RandomStringGenerator; | ||
import org.junit.After; | ||
import org.junit.Before; | ||
import org.junit.ClassRule; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
import org.zendesk.client.v2.model.hc.ContentTag; | ||
|
||
import java.text.SimpleDateFormat; | ||
import java.util.TimeZone; | ||
|
||
import static com.github.tomakehurst.wiremock.client.WireMock.*; | ||
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
|
||
public class ContentTagsTest { | ||
|
||
private static final String MOCK_URL_FORMATTED_STRING = "http://localhost:%d"; | ||
public static final RandomStringGenerator RANDOM_STRING_GENERATOR = | ||
new RandomStringGenerator.Builder().withinRange('a', 'z').build(); | ||
private static final String MOCK_API_TOKEN = RANDOM_STRING_GENERATOR.generate(15); | ||
private static final String MOCK_USERNAME = RANDOM_STRING_GENERATOR.generate(10).toLowerCase() + "@cloudbees.com"; | ||
|
||
@ClassRule | ||
public static WireMockClassRule zendeskApiClass = new WireMockClassRule(options() | ||
.dynamicPort() | ||
.dynamicHttpsPort() | ||
.usingFilesUnderClasspath("wiremock") | ||
); | ||
|
||
@Rule | ||
public WireMockClassRule zendeskApiMock = zendeskApiClass; | ||
|
||
private Zendesk client; | ||
|
||
@Before | ||
public void setUp() throws Exception { | ||
int ephemeralPort = zendeskApiMock.port(); | ||
|
||
String hostname = String.format(MOCK_URL_FORMATTED_STRING, ephemeralPort); | ||
|
||
client = new Zendesk.Builder(hostname) | ||
.setUsername(MOCK_USERNAME) | ||
.setToken(MOCK_API_TOKEN) | ||
.build(); | ||
} | ||
|
||
@After | ||
public void closeClient() { | ||
if (client != null) { | ||
client.close(); | ||
} | ||
client = null; | ||
} | ||
|
||
@Test | ||
public void getContentTags_willPageOverMultiplePages() throws Exception { | ||
zendeskApiMock.stubFor( | ||
get( | ||
urlPathEqualTo("/api/v2/guide/content_tags")) | ||
.withQueryParam("page%5Bsize%5D", equalTo("2")) | ||
.willReturn(ok() | ||
.withBodyFile("content_tags/content_tag_search_first_page.json") | ||
) | ||
); | ||
zendeskApiMock.stubFor( | ||
get( | ||
urlPathEqualTo("/api/v2/guide/content_tags")) | ||
.withQueryParam("page%5Bsize%5D", equalTo("2")) | ||
.withQueryParam("page%5Bafter%5D", equalTo("first_after_cursor")) | ||
.willReturn(ok() | ||
.withBodyFile("content_tags/content_tag_search_second_page.json") | ||
) | ||
); | ||
zendeskApiMock.stubFor( | ||
get( | ||
urlPathEqualTo("/api/v2/guide/content_tags")) | ||
.withQueryParam("page%5Bsize%5D", equalTo("2")) | ||
.withQueryParam("page%5Bafter%5D", equalTo("second_after_cursor")) | ||
.willReturn(ok() | ||
.withBodyFile("content_tags/content_tag_search_third_page.json") | ||
) | ||
); | ||
|
||
Iterable<ContentTag> actualResults = client.getContentTags(2); | ||
|
||
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); | ||
df.setTimeZone(TimeZone.getTimeZone("UTC")); | ||
|
||
assertThat(actualResults).containsExactly( | ||
new ContentTag("11111111111111111111111111", "first name", | ||
df.parse("2023-03-13 10:01:00"), | ||
df.parse("2023-03-13 10:01:01") | ||
), | ||
new ContentTag("22222222222222222222222222", "second name", | ||
df.parse("2023-03-13 10:02:00"), | ||
df.parse("2023-03-13 10:02:02") | ||
), | ||
new ContentTag("33333333333333333333333333", "third name", | ||
df.parse("2023-03-13 10:03:00"), | ||
df.parse("2023-03-13 10:03:03") | ||
), | ||
new ContentTag("44444444444444444444444444", "fourth name", | ||
df.parse("2023-03-13 10:04:00"), | ||
df.parse("2023-03-13 10:04:04") | ||
), | ||
new ContentTag("55555555555555555555555555", "fifth name", | ||
df.parse("2023-03-13 10:05:00"), | ||
df.parse("2023-03-13 10:05:05") | ||
) | ||
); | ||
} | ||
} |
Oops, something went wrong.