Skip to content

Commit

Permalink
Merge dd4ecad into b579fca
Browse files Browse the repository at this point in the history
  • Loading branch information
amatkivskiy committed Oct 3, 2016
2 parents b579fca + dd4ecad commit 3cb6f68
Show file tree
Hide file tree
Showing 14 changed files with 365 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
@@ -0,0 +1,112 @@
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.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 GetRoomByIdTest {
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 testGetRoomByIdResponseCorrect() throws Exception {
// ARRANGE
String roomId = "test_room_id";
this.mockWebServer.enqueue(createMockedResponse("room/get_room_by_id_response.json"));
TestSubscriber<RoomResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.getRoomById(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(4));
assertThat(url.pathSegments().get(3), is(roomId));

// 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(39));
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.tags.size(), is(0));
// 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 testNullRoomIdFails() throws Exception {
// ARRANGE
TestSubscriber<RoomResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.getRoomById(null).subscribe(testSubscriber);

// ASSERT
assertErrorTypeResult(testSubscriber, RetrofitError.class);
}
}
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);
}
}
Loading

0 comments on commit 3cb6f68

Please sign in to comment.