Skip to content

Commit

Permalink
Merge f10df84 into b579fca
Browse files Browse the repository at this point in the history
  • Loading branch information
amatkivskiy committed Oct 3, 2016
2 parents b579fca + f10df84 commit 3de1055
Show file tree
Hide file tree
Showing 12 changed files with 210 additions and 44 deletions.
4 changes: 3 additions & 1 deletion Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@

**Rx,Async,Sync:**
- Add `delete` room API
- Remove channels API
- Remove channels API
- Fix `joinRoom` API
- Add `getRoomById` API
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,20 @@ void searchUsers(
void searchUsers(@Query("q") String searchTerm, Callback<SearchUsersResponse> callback);

// Rooms Api
@GET("/rooms/{roomId}")
void getRoomById(@Path("roomId") String roomId, Callback<RoomResponse> callback);

@POST("/user/{userId}/rooms")
@FormUrlEncoded
void joinRoom(@Path("userId") String userId, @Field("id") String roomId,
Callback<RoomResponse> callback);

@GET("/rooms/{roomId}/users")
void getRoomUsers(@Path("roomId") String roomId, Callback<List<UserResponse>> callback);

@GET("/user/{userId}/rooms")
void getUserRooms(@Path("userId") String userId, Callback<List<RoomResponse>> callback);

@POST("/rooms")
@FormUrlEncoded
void joinRoom(@Field("uri") String roomUri, Callback<RoomResponse> callback);

@PUT("/rooms/{roomId}")
void updateRoom(@Path("roomId") String roomId, @Body UpdateRoomRequestParam param,
Callback<RoomResponse> callback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ public void getCurrentUserRooms(Callback<List<RoomResponse>> callback) {
api.getCurrentUserRooms(callback);
}

public void joinRoom(String roomUri, Callback<RoomResponse> callback) {
api.joinRoom(roomUri, callback);
public void joinRoom(String userId, String roomId, Callback<RoomResponse> callback) {
api.joinRoom(userId, roomId, callback);
}

public void updateRoom(String roomId, UpdateRoomRequestParam params,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public interface RxGitterApi {
Observable<SearchUsersResponse> searchUsers(@Query("q") String searchTerm);

// Rooms API
@GET("/rooms/{roomId}")
Observable<RoomResponse> getRoomById(@Path("roomId") String roomId);

@GET("/user/{userId}/rooms")
Observable<List<RoomResponse>> getUserRooms(@Path("userId") String userId);

Expand All @@ -55,9 +58,9 @@ public interface RxGitterApi {
@GET("/rooms/{roomId}/users")
Observable<List<UserResponse>> getRoomUsers(@Path("roomId") String roomId);

@POST("/rooms")
@POST("/user/{userId}/rooms")
@FormUrlEncoded
Observable<RoomResponse> joinRoom(@Field("uri") String roomUri);
Observable<RoomResponse> joinRoom(@Path("userId") String userId, @Field("id") String roomId);

@PUT("/rooms/{roomId}")
Observable<RoomResponse> updateRoom(@Path("roomId") String roomId, @Body UpdateRoomRequestParam param);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ public List<UserResponse> call(SearchUsersResponse searchUsersResponse) {
}

// Rooms API
public Observable<RoomResponse> getRoomById(String roomId) {
return api.getRoomById(roomId);
}

public Observable<List<RoomResponse>> getUserRooms(String userId) {
return api.getUserRooms(userId);
}
Expand All @@ -80,8 +84,8 @@ public Observable<List<UserResponse>> getRoomUsers(String roomId) {
return api.getRoomUsers(roomId);
}

public Observable<RoomResponse> joinRoom(String roomUri) {
return api.joinRoom(roomUri);
public Observable<RoomResponse> joinRoom(String userId, String roomId) {
return api.joinRoom(userId, roomId);
}

public Observable<RoomResponse> updateRoom(String roomId, UpdateRoomRequestParam params) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterApiClient;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockWebServer;
Expand All @@ -26,10 +24,6 @@

public class DeleteRoomTest {
private MockWebServer mockWebServer;

@Rule
public ExpectedException thrown = ExpectedException.none();

private RxGitterApiClient gitterApiClient;

@Before
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@

public class GetRoomUsersTest {
private MockWebServer mockWebServer;

private RxGitterApiClient gitterApiClient;

@Before
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package com.amatkivskiy.gitter.sdk.rx.room;

import com.amatkivskiy.gitter.sdk.model.response.room.RoomResponse;
import com.amatkivskiy.gitter.sdk.model.response.room.RoomType;
import com.amatkivskiy.gitter.sdk.rx.TestBuilder;
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterApiClient;

import org.junit.Before;
import org.junit.Test;

import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockWebServer;
import retrofit.RetrofitError;
import rx.observers.TestSubscriber;

import static com.amatkivskiy.gitter.sdk.rx.TestUtils.assertErrorTypeResult;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.assertSuccessfulResult;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.createMockedResponse;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.createStringMockedResponse;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.getOnNextEvent;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.getRequestUrl;
import static com.amatkivskiy.gitter.sdk.rx.TestUtils.setupMockWebServer;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class JoinRoomTest {
private MockWebServer mockWebServer;
private RxGitterApiClient gitterApiClient;

@Before
public void setUp() throws Exception {
// Setup mocked WebsServer to received requests from RxGitterApiClient
this.mockWebServer = setupMockWebServer();

// To redirect all requests to our mocked WebServer we need to pass its server URL.
String url = this.mockWebServer.url("").toString();
this.gitterApiClient = new TestBuilder(url)
.withAccountToken("can_be_any_string")
.build();
}

@Test
public void testJoinRoomResponseCorrect() throws Exception {
// ARRANGE
String roomId = "test_room_id";
String userId = "user_id";
this.mockWebServer.enqueue(createMockedResponse("room/join_room_response.json"));
TestSubscriber<RoomResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.joinRoom(userId, roomId).subscribe(testSubscriber);

// ASSERT
// Assert RxGitterApiClient pass correct params in the request URL
HttpUrl url = getRequestUrl(this.mockWebServer);
// check number of path segments in url
assertThat(url.pathSegments().size(), is(5));
assertThat(url.pathSegments().get(3), is(userId));

// check received room
assertSuccessfulResult(testSubscriber);
RoomResponse room = getOnNextEvent(testSubscriber);

assertThat(room.id, is("5790a3a2c2f0db084a24004d"));
assertThat(room.name, is("gitterHQ/api"));
assertThat(room.topic, is("Gitter API and Libraries"));
assertThat(room.avatarUrl, is("https://avatars-01.gitter.im/group/i/57542c12c43b8c601976fa66"));
assertThat(room.uri, is("gitterHQ/api"));
assertThat(room.oneToOne, is(false));
assertThat(room.userCount, is(38));
assertThat(room.unreadItems, is(0));
assertThat(room.mentions, is(0));
assertThat(room.lastAccessTime, is("2016-10-01T16:26:58.327Z"));
// assertThat(room.favourite, is(2));
assertThat(room.lurk, is(true));
assertThat(room.activity, is(false));
assertThat(room.url, is("/gitterHQ/api"));
assertThat(room.githubRoomType, is(RoomType.REPO_CHANNEL));
// assertThat(room.associatedRepo, is(false));
assertThat(room.security, is("PUBLIC"));
assertThat(room.isPremium, is(true));
assertThat(room.noIndex, is(false));
// assertThat(room.permissions.admin, is(false));
assertThat(room.isRoomMember, is(true));
assertThat(room.groupId, is("57542c12c43b8c601976fa66"));
// assertThat(room.group, is(notNullValue()));
// assertThat(room.group.id, is("57542c12c43b8c601976fa66"));
// assertThat(room.group.name, is("gitterHQ"));
// assertThat(room.group.uri, is("gitterHQ"));
// assertThat(room.group.backedBy, is(notNullValue()));
// assertThat(room.group.backedBy.type, is("GH_ORG"));
// assertThat(room.group.backedBy.linkPath, is("gitterHQ"));

assertThat(room.avatarUrl, is("https://avatars-01.gitter.im/group/i/57542c12c43b8c601976fa66"));
// assertThat(room.forumId, is("57e376e3c37b7aa04f4bd325"));
// assertThat(room.backend, is(notNullValue()));
// assertThat(room.backend.backedBy.type, is("GH_ORG"));
// assertThat(room.backend.backedBy.linkPath, is("gitterHQ"));
assertThat(room.isPublic, is(true));
}

@Test
public void testNullUserIdFails() throws Exception {
// ARRANGE
TestSubscriber<RoomResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.joinRoom(null, "").subscribe(testSubscriber);

// ASSERT
assertErrorTypeResult(testSubscriber, RetrofitError.class);
}

@Test
public void testNullRoomIdFails() throws Exception {
// ARRANGE
this.mockWebServer.enqueue(createStringMockedResponse("{\"error\":\"Bad Request\"}")
.setResponseCode(400));
TestSubscriber<RoomResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.joinRoom("user_id", null).subscribe(testSubscriber);

// ASSERT
assertErrorTypeResult(testSubscriber, RetrofitError.class);
}
}
42 changes: 42 additions & 0 deletions library/rx/src/test/resources/room/join_room_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"id": "5790a3a2c2f0db084a24004d",
"name": "gitterHQ/api",
"topic": "Gitter API and Libraries",
"avatarUrl": "https://avatars-01.gitter.im/group/i/57542c12c43b8c601976fa66",
"uri": "gitterHQ/api",
"oneToOne": false,
"userCount": 38,
"unreadItems": 0,
"mentions": 0,
"lastAccessTime": "2016-10-01T16:26:58.327Z",
"favourite": 2,
"lurk": true,
"activity": false,
"url": "/gitterHQ/api",
"githubType": "REPO_CHANNEL",
"associatedRepo": false,
"security": "PUBLIC",
"premium": true,
"noindex": false,
"permissions": {
"admin": false
},
"roomMember": true,
"groupId": "57542c12c43b8c601976fa66",
"group": {
"id": "57542c12c43b8c601976fa66",
"name": "gitterHQ",
"uri": "gitterHQ",
"backedBy": {
"type": "GH_ORG",
"linkPath": "gitterHQ"
},
"avatarUrl": "https://avatars-01.gitter.im/group/i/57542c12c43b8c601976fa66",
"forumId": "57e376e3c37b7aa04f4bd325"
},
"backend": {
"type": "GH_ORG",
"linkPath": "gitterHQ"
},
"public": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,12 @@ public interface SyncGitterApi {
SearchUsersResponse searchUsers(@Query("q") String searchTerm);

// Rooms API
@POST("/rooms")
@GET("/rooms/{roomId}")
RoomResponse getRoomById(@Path("roomId") String roomId);

@POST("/user/{userId}/rooms")
@FormUrlEncoded
RoomResponse joinRoom(@Field("uri") String roomUri);
RoomResponse joinRoom(@Path("userId") String userId, @Field("id") String roomId);

@GET("/rooms/{roomId}/users")
List<UserResponse> getRoomUsers(@Path("roomId") String roomId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ public List<UserResponse> getRoomUsers(String roomId) {
return api.getRoomUsers(roomId);
}

public RoomResponse joinRoom(String roomUri) {
return api.joinRoom(roomUri);
public RoomResponse joinRoom(String userId, String roomId) {
return api.joinRoom(userId, roomId);
}

public RoomResponse updateRoom(String roomId, UpdateRoomRequestParam params) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,16 @@ public static void main(String[] args) {
// This is required only for authentication.
GitterDeveloperCredentials.init(new SimpleGitterCredentialsProvider(OAUTH_KEY, OAUTH_SECRET, REDIRECT_URL));

// getAccessTokenSample();
// getUserSample();
// getRoomChatMessages();
// roomMessagesStreamSample();
// leaveRoomSample();
// searchRoomsSample();
// searchUsersSample();
// markMessagesRead();
// getSuggestedRooms();
// roomEventsStreamSample();
testMethod();
}

private static void testMethod() {
RxGitterApiClient client = new RxGitterApiClient.Builder()
.withAccountToken("c2fc54dc5bc835317b7b29f389383611d8940987")
.build();

BooleanResponse result = client.deleteRooom("57edcee740f3a6eec068229e").toBlocking().first();
System.out.println(String.format("success : %s", result.success));

System.exit(0);
getAccessTokenSample();
getUserSample();
getRoomChatMessages();
roomMessagesStreamSample();
leaveRoomSample();
searchRoomsSample();
searchUsersSample();
markMessagesRead();
getSuggestedRooms();
roomEventsStreamSample();
}

private static void roomEventsStreamSample() {
Expand Down

0 comments on commit 3de1055

Please sign in to comment.