Skip to content

Commit

Permalink
Add test for ban user API.
Browse files Browse the repository at this point in the history
  • Loading branch information
amatkivskiy committed Oct 18, 2016
1 parent 531432a commit 27b9926
Show file tree
Hide file tree
Showing 4 changed files with 266 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package com.amatkivskiy.gitter.sdk.rx.ban;

import com.amatkivskiy.gitter.sdk.model.response.ban.BanResponse;
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 rx.observers.TestSubscriber;

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.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;

public class BanUserTest {
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 testBanUserResponseCorrect() throws Exception {
// ARRANGE
String roomId = "test_room_id";
String userName = "amatkivskiy";
this.mockWebServer.enqueue(createMockedResponse("ban/ban_user_response.json"));
TestSubscriber<BanResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.banUser(roomId, userName).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));
// get room id path segment
assertThat(url.pathSegments().get(3), is(roomId));
assertThat(url.pathSegments().get(4), is("bans"));

// check received result
assertSuccessfulResult(testSubscriber);
BanResponse response = getOnNextEvent(testSubscriber);
assertThat(response, is(notNullValue()));

assertThat(response.user, is(notNullValue()));
assertThat(response.bannedBy, is(notNullValue()));

assertThat(response.dateBanned, is("2016-10-05T10:26:45.630Z"));

assertThat(response.user.id, is("554b2e8a15522ed4b3e00c38"));
assertThat(response.user.username, is("amatkivskiy"));
assertThat(response.user.displayName, is("Andriy Matkivskiy"));
assertThat(response.user.url, is("/amatkivskiy"));
assertThat(response.user.avatarUrl, is("https://avatars-04.gitter.im/gh/uv/3/amatkivskiy"));
assertThat(response.user.avatarUrlSmall, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=60"));
assertThat(response.user.avatarUrlMedium, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=128"));
assertThat(response.user.v, is(1));
assertThat(response.user.gv, is("3"));

assertThat(response.bannedBy.id, is("554b2e8a15522ed4b3e00c38"));
assertThat(response.bannedBy.username, is(userName));
assertThat(response.bannedBy.displayName, is("Andriy Matkivskiy"));
assertThat(response.bannedBy.url, is("/amatkivskiy"));
assertThat(response.bannedBy.avatarUrl, is("https://avatars-04.gitter.im/gh/uv/3/amatkivskiy"));
assertThat(response.bannedBy.avatarUrlSmall, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=60"));
assertThat(response.bannedBy.avatarUrlMedium, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=128"));
assertThat(response.bannedBy.v, is(9));
assertThat(response.bannedBy.gv, is("3"));
}

@Test
public void testBanPrivateRoomUserFails() throws Exception {
// ARRANGE
String roomId = "test_room_id";
String userName = "amatkivskiy";
this.mockWebServer.enqueue(createStringMockedResponse("{\"removed\":true}"));
TestSubscriber<BanResponse> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.banUser(roomId, userName).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));
// get room id path segment
assertThat(url.pathSegments().get(3), is(roomId));
assertThat(url.pathSegments().get(4), is("bans"));

// check received result
assertSuccessfulResult(testSubscriber);
BanResponse response = getOnNextEvent(testSubscriber);

assertThat(response, is(notNullValue()));
assertThat(response.user, is(nullValue()));
assertThat(response.bannedBy, is(nullValue()));
assertThat(response.dateBanned, is(nullValue()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package com.amatkivskiy.gitter.sdk.rx.ban;

import com.amatkivskiy.gitter.sdk.model.response.ban.BanResponse;
import com.amatkivskiy.gitter.sdk.rx.TestBuilder;
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterApiClient;

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

import java.util.List;

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

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.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;

public class GetBannedUserTest {
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 testBanUserResponseCorrect() throws Exception {
// ARRANGE
String roomId = "test_room_id";
this.mockWebServer.enqueue(createMockedResponse("ban/get_banned_users_response.json"));
TestSubscriber<List<BanResponse>> testSubscriber = TestSubscriber.create();

// ACT
this.gitterApiClient.getBannedUsers(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));
// get room id path segment
assertThat(url.pathSegments().get(3), is(roomId));
assertThat(url.pathSegments().get(4), is("bans"));

// check received result
assertSuccessfulResult(testSubscriber);
List<BanResponse> response = getOnNextEvent(testSubscriber);
assertThat(response, is(notNullValue()));
assertThat(response.size(), is(1));

BanResponse first = response.get(0);

assertThat(first.user, is(notNullValue()));
assertThat(first.bannedBy, is(notNullValue()));

assertThat(first.dateBanned, is("2016-10-05T10:26:45.630Z"));

assertThat(first.user.id, is("554b2e8a15522ed4b3e00c38"));
assertThat(first.user.username, is("amatkivskiy"));
assertThat(first.user.displayName, is("Andriy Matkivskiy"));
assertThat(first.user.url, is("/amatkivskiy"));
assertThat(first.user.avatarUrl, is("https://avatars-04.gitter.im/gh/uv/3/amatkivskiy"));
assertThat(first.user.avatarUrlSmall, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=60"));
assertThat(first.user.avatarUrlMedium, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=128"));
assertThat(first.user.v, is(1));
assertThat(first.user.gv, is("3"));

assertThat(first.bannedBy.id, is("554b2e8a15522ed4b3e00c38"));
assertThat(first.bannedBy.username, is("amatkivskiy"));
assertThat(first.bannedBy.displayName, is("Andriy Matkivskiy"));
assertThat(first.bannedBy.url, is("/amatkivskiy"));
assertThat(first.bannedBy.avatarUrl, is("https://avatars-04.gitter.im/gh/uv/3/amatkivskiy"));
assertThat(first.bannedBy.avatarUrlSmall, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=60"));
assertThat(first.bannedBy.avatarUrlMedium, is("https://avatars1.githubusercontent.com/u/3864884?v=3&s=128"));
assertThat(first.bannedBy.v, is(9));
assertThat(first.bannedBy.gv, is("3"));
}
}
25 changes: 25 additions & 0 deletions library/rx/src/test/resources/ban/ban_user_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"user": {
"id": "554b2e8a15522ed4b3e00c38",
"username": "amatkivskiy",
"displayName": "Andriy Matkivskiy",
"url": "/amatkivskiy",
"avatarUrl": "https://avatars-04.gitter.im/gh/uv/3/amatkivskiy",
"avatarUrlSmall": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=60",
"avatarUrlMedium": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=128",
"v": 1,
"gv": "3"
},
"bannedBy": {
"id": "554b2e8a15522ed4b3e00c38",
"username": "amatkivskiy",
"displayName": "Andriy Matkivskiy",
"url": "/amatkivskiy",
"avatarUrl": "https://avatars-04.gitter.im/gh/uv/3/amatkivskiy",
"avatarUrlSmall": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=60",
"avatarUrlMedium": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=128",
"v": 9,
"gv": "3"
},
"dateBanned": "2016-10-05T10:26:45.630Z"
}
27 changes: 27 additions & 0 deletions library/rx/src/test/resources/ban/get_banned_users_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[
{
"user": {
"id": "554b2e8a15522ed4b3e00c38",
"username": "amatkivskiy",
"displayName": "Andriy Matkivskiy",
"url": "/amatkivskiy",
"avatarUrl": "https://avatars-04.gitter.im/gh/uv/3/amatkivskiy",
"avatarUrlSmall": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=60",
"avatarUrlMedium": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=128",
"v": 1,
"gv": "3"
},
"bannedBy": {
"id": "554b2e8a15522ed4b3e00c38",
"username": "amatkivskiy",
"displayName": "Andriy Matkivskiy",
"url": "/amatkivskiy",
"avatarUrl": "https://avatars-04.gitter.im/gh/uv/3/amatkivskiy",
"avatarUrlSmall": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=60",
"avatarUrlMedium": "https://avatars1.githubusercontent.com/u/3864884?v=3&s=128",
"v": 9,
"gv": "3"
},
"dateBanned": "2016-10-05T10:26:45.630Z"
}
]

0 comments on commit 27b9926

Please sign in to comment.