use of com.github.jamesnetherton.zulip.client.api.stream.Stream in project zulip-java-client by jamesnetherton.
the class ZulipIntegrationTestBase method afterEach.
@AfterEach
public void afterEach() throws Exception {
if (zulip != null) {
// Clean up messages
List<Message> messages = zulip.messages().getMessages(100, 0, Anchor.NEWEST).execute();
if (messages != null) {
for (Message message : messages) {
try {
zulip.messages().deleteMessage(message.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
List<Message> privateMessages = zulip.messages().getMessages(100, 0, Anchor.NEWEST).withNarrows(Narrow.of("is", "private")).execute();
if (privateMessages != null) {
for (Message message : privateMessages) {
try {
zulip.messages().deleteMessage(message.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up streams
List<Stream> streams = zulip.streams().getAll().withIncludeDefault(false).execute();
if (streams != null) {
for (Stream stream : streams) {
try {
zulip.streams().delete(stream.getStreamId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up user groups
List<UserGroup> groups = zulip.users().getUserGroups().execute();
if (groups != null) {
for (UserGroup group : groups) {
try {
zulip.users().deleteUserGroup(group.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
// Clean up profile fields
List<ProfileField> fields = zulip.server().getCustomProfileFields().execute();
if (fields != null) {
for (ProfileField field : fields) {
try {
zulip.server().deleteCustomProfileField(field.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
}
// Clean up drafts
List<Draft> drafts = zulip.drafts().getDrafts().execute();
if (drafts != null) {
for (Draft draft : drafts) {
try {
zulip.drafts().deleteDraft(draft.getId()).execute();
} catch (ZulipClientException e) {
// Ignore
}
}
}
}
use of com.github.jamesnetherton.zulip.client.api.stream.Stream in project zulip-java-client by jamesnetherton.
the class ZulipEventIT method messageEventsWithNarrow.
@Test
public void messageEventsWithNarrow() throws Exception {
CountDownLatch latch = new CountDownLatch(5);
List<String> messages = new ArrayList<>();
String streamA = UUID.randomUUID().toString().split("-")[0];
String streamB = UUID.randomUUID().toString().split("-")[0];
zulip.streams().subscribe(StreamSubscriptionRequest.of(streamA, streamA), StreamSubscriptionRequest.of(streamB, streamB)).execute();
for (int i = 0; i < 10; i++) {
List<Stream> streams = zulip.streams().getAll().execute();
List<Stream> matches = streams.stream().filter(stream -> stream.getName().equals(streamA) || stream.getName().equals(streamB)).collect(Collectors.toList());
if (matches.size() == 2) {
break;
}
Thread.sleep(500);
}
EventPoller eventPoller = zulip.events().captureMessageEvents(new MessageEventListener() {
@Override
public void onEvent(Message event) {
messages.add(event.getContent());
latch.countDown();
}
}, Narrow.of("stream", streamA));
try {
eventPoller.start();
MessageService messageService = zulip.messages();
for (int i = 0; i < 10; i++) {
String streamName = i % 2 == 0 ? streamA : streamB;
messageService.sendStreamMessage("Stream " + streamName + " Content " + i, streamName, "testtopic").execute();
}
assertTrue(latch.await(10, TimeUnit.SECONDS));
int count = 0;
for (int i = 0; i < 5; i++) {
assertEquals("Stream " + streamA + " Content " + count, messages.get(i));
count += 2;
}
} catch (ZulipClientException e) {
e.printStackTrace();
throw e;
} finally {
eventPoller.stop();
}
}
use of com.github.jamesnetherton.zulip.client.api.stream.Stream in project zulip-java-client by jamesnetherton.
the class ZulipEventIT method messageEvents.
@Test
public void messageEvents() throws Exception {
CountDownLatch latch = new CountDownLatch(3);
List<String> messages = new ArrayList<>();
String streamName = UUID.randomUUID().toString().split("-")[0];
StreamSubscriptionRequest subscriptionRequest = StreamSubscriptionRequest.of(streamName, streamName);
StreamService streamService = zulip.streams();
streamService.subscribe(subscriptionRequest).execute();
for (int i = 0; i < 10; i++) {
List<Stream> streams = streamService.getAll().execute();
List<Stream> matches = streams.stream().filter(stream -> stream.getName().equals(streamName)).collect(Collectors.toList());
if (matches.size() == 1) {
break;
}
Thread.sleep(500);
}
EventPoller eventPoller = zulip.events().captureMessageEvents(new MessageEventListener() {
@Override
public void onEvent(Message event) {
messages.add(event.getContent());
latch.countDown();
}
});
try {
eventPoller.start();
MessageService messageService = zulip.messages();
for (int i = 0; i < 3; i++) {
messageService.sendStreamMessage("Test Content " + i, streamName, "testtopic").execute();
}
assertTrue(latch.await(5, TimeUnit.SECONDS));
for (int i = 0; i < 3; i++) {
assertEquals("Test Content " + i, messages.get(i));
}
} catch (ZulipClientException e) {
e.printStackTrace();
throw e;
} finally {
eventPoller.stop();
}
}
use of com.github.jamesnetherton.zulip.client.api.stream.Stream in project zulip-java-client by jamesnetherton.
the class ZulipStreamIT method streamCrudOperations.
@Test
public void streamCrudOperations() throws Exception {
// Create
StreamSubscriptionResult result = zulip.streams().subscribe(StreamSubscriptionRequest.of("Test Stream 1", "Test Stream 1"), StreamSubscriptionRequest.of("Test Stream 2", "Test Stream 2"), StreamSubscriptionRequest.of("Test Stream 3", "Test Stream 3")).withAuthorizationErrorsFatal(false).withHistoryPublicToSubscribers(true).withInviteOnly(false).withMessageRetention(RetentionPolicy.FOREVER).withStreamPostPolicy(StreamPostPolicy.ANY).execute();
Map<String, List<String>> created = result.getSubscribed();
assertTrue(created.containsKey("test@test.com"));
assertEquals(3, created.get("test@test.com").size());
// Read
List<Stream> streams = zulip.streams().getAll().withIncludeDefault(true).execute();
List<Stream> createdStreams = streams.stream().filter(stream -> stream.getDescription().startsWith("Test Stream")).collect(Collectors.toList());
for (int i = 1; i < createdStreams.size(); i++) {
Stream stream = createdStreams.get(i - 1);
assertEquals("Test Stream " + i, stream.getDescription());
assertEquals("<p>Test Stream " + i + "</p>", stream.getRenderedDescription());
assertTrue(stream.getDateCreated().toEpochMilli() > 0);
assertFalse(stream.isInviteOnly());
assertEquals("Test Stream " + i, stream.getName());
assertTrue(stream.getStreamId() > 0);
assertFalse(stream.isWebPublic());
assertEquals(StreamPostPolicy.ANY, stream.getStreamPostPolicy());
assertTrue(stream.isHistoryPublicToSubscribers());
assertEquals(-1, stream.getMessageRetentionDays());
assertFalse(stream.isDefault());
assertFalse(stream.isAnnouncementOnly());
}
long firstStreamId = createdStreams.get(0).getStreamId();
// Update
zulip.streams().updateStream(firstStreamId).withDescription("Updated Description").withName("Updated Name").withMessageRetention(30).withHistoryPublicToSubscribers(true).withStreamPostPolicy(StreamPostPolicy.ADMIN_ONLY).execute();
Optional<Stream> updatedStreamOptional = zulip.streams().getAll().execute().stream().filter(stream -> stream.getStreamId() == firstStreamId).findFirst();
Stream updatedStream = updatedStreamOptional.get();
assertEquals("Updated Description", updatedStream.getDescription());
assertEquals("<p>Updated Description</p>", updatedStream.getRenderedDescription());
if (updatedStream.getDateCreated() != null) {
assertTrue(updatedStream.getDateCreated().toEpochMilli() > 0);
}
assertFalse(updatedStream.isInviteOnly());
assertEquals("Updated Name", updatedStream.getName());
assertEquals(firstStreamId, updatedStream.getStreamId());
assertFalse(updatedStream.isWebPublic());
assertEquals(StreamPostPolicy.ADMIN_ONLY, updatedStream.getStreamPostPolicy());
assertTrue(updatedStream.isHistoryPublicToSubscribers());
assertEquals(30, updatedStream.getMessageRetentionDays());
assertFalse(updatedStream.isDefault());
assertTrue(updatedStream.isAnnouncementOnly());
// Delete
zulip.streams().delete(firstStreamId).execute();
// Verify deletion
streams = zulip.streams().getAll().withIncludeDefault(true).execute();
assertEquals(2, streams.size());
}
use of com.github.jamesnetherton.zulip.client.api.stream.Stream in project zulip-java-client by jamesnetherton.
the class ZulipDraftIT method draftCrudOperations.
@Test
public void draftCrudOperations() throws Exception {
// Create stream
StreamSubscriptionResult result = zulip.streams().subscribe(StreamSubscriptionRequest.of("Test Stream For Draft", "Test Stream For Draft")).withAuthorizationErrorsFatal(false).withHistoryPublicToSubscribers(true).withInviteOnly(false).withMessageRetention(RetentionPolicy.FOREVER).withStreamPostPolicy(StreamPostPolicy.ANY).execute();
Map<String, List<String>> created = result.getSubscribed();
assertEquals(1, created.get("test@test.com").size());
List<Stream> streams = zulip.streams().getAll().withIncludeDefault(true).execute();
Stream stream = streams.stream().filter(s -> s.getName().equals("Test Stream For Draft")).findFirst().get();
// Create drafts
List<Draft> drafts = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
Draft draft = new Draft();
draft.setTimestamp(Instant.now());
draft.setContent("Draft Content " + i);
draft.setTopic("Test Draft Topic " + i);
if (i < 3) {
draft.setType(DraftType.STREAM);
draft.setTo(Arrays.asList(stream.getStreamId()));
} else {
draft.setType(DraftType.PRIVATE);
draft.setTo(Arrays.asList(ownUser.getUserId()));
}
drafts.add(draft);
}
List<Long> createdIds = zulip.drafts().createDrafts(drafts).execute();
assertEquals(3, createdIds.size());
// Read drafts
List<Draft> createdDrafts = zulip.drafts().getDrafts().execute();
assertEquals(3, createdDrafts.size());
for (int i = 1; i <= createdDrafts.size(); i++) {
Draft draft = createdDrafts.get(i - 1);
assertTrue(draft.getTimestamp().toEpochMilli() > 0);
assertEquals("Draft Content " + i, draft.getContent());
if (i < 3) {
assertEquals(DraftType.STREAM, draft.getType());
assertEquals("Test Draft Topic " + i, draft.getTopic());
assertTrue(draft.getTo().contains(stream.getStreamId()));
} else {
assertEquals(DraftType.PRIVATE, draft.getType());
assertTrue(draft.getTo().contains(ownUser.getUserId()));
}
}
// Update drafts
for (int i = 1; i <= createdDrafts.size(); i++) {
Draft draft = createdDrafts.get(i - 1);
draft.setContent("Updated Draft " + i);
draft.setTopic("Updated Topic " + i);
if (i < 3) {
draft.setType(DraftType.PRIVATE);
draft.setTo(Arrays.asList(ownUser.getUserId()));
draft.setTopic("");
} else {
draft.setType(DraftType.STREAM);
draft.setTo(Arrays.asList(stream.getStreamId()));
}
zulip.drafts().editDraft(draft).execute();
}
// Verify updates
List<Draft> updatedDrafts = zulip.drafts().getDrafts().execute();
assertEquals(3, updatedDrafts.size());
for (int i = 1; i <= updatedDrafts.size(); i++) {
Draft draft = updatedDrafts.get(i - 1);
assertTrue(draft.getTimestamp().toEpochMilli() > 0);
assertEquals("Updated Draft " + i, draft.getContent());
if (i < 3) {
assertEquals(DraftType.PRIVATE, draft.getType());
assertTrue(draft.getTo().contains(ownUser.getUserId()));
} else {
assertEquals(DraftType.STREAM, draft.getType());
assertEquals("Updated Topic " + i, draft.getTopic());
assertTrue(draft.getTo().contains(stream.getStreamId()));
}
}
// Delete drafts
for (Draft draft : updatedDrafts) {
zulip.drafts().deleteDraft(draft.getId()).execute();
}
// Verify deletion
drafts = zulip.drafts().getDrafts().execute();
assertEquals(0, drafts.size());
}
Aggregations