mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-28 09:19:40 -05:00
-- tests improvement
This commit is contained in:
@@ -1,110 +1,51 @@
|
||||
package io.github.jwdeveloper.tiktok;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.data.requests.LiveData;
|
||||
import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
|
||||
import io.github.jwdeveloper.dependance.implementation.DependanceContainerBuilder;
|
||||
import io.github.jwdeveloper.tiktok.data.events.TikTokConnectedEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.TikTokDisconnectedEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.TikTokErrorEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.control.TikTokConnectingEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent;
|
||||
import io.github.jwdeveloper.tiktok.data.events.room.TikTokRoomInfoEvent;
|
||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
||||
import io.github.jwdeveloper.tiktok.http.LiveHttpClient;
|
||||
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
|
||||
import io.github.jwdeveloper.tiktok.live.GiftsManager;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveEventsHandler;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveMessagesHandler;
|
||||
import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder;
|
||||
import io.github.jwdeveloper.tiktok.models.ConnectionState;
|
||||
import io.github.jwdeveloper.tiktok.websocket.LiveSocketClient;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
public class TikTokLiveClientTests extends TikTokTestBase {
|
||||
|
||||
public class TikTokLiveClientTests {
|
||||
@Override
|
||||
public void onBeforeEachTest(LiveClientBuilder liveClientBuilder,
|
||||
DependanceContainerBuilder containerBuilder) {
|
||||
|
||||
private LiveClient sut;
|
||||
LiveMessagesHandler messageHandler;
|
||||
GiftsManager giftsManager;
|
||||
TikTokRoomInfo tikTokLiveMeta;
|
||||
LiveHttpClient tiktokHttpClient;
|
||||
LiveSocketClient webSocketClient;
|
||||
LiveEventsHandler tikTokEventHandler;
|
||||
LiveClientSettings clientSettings;
|
||||
ListenersManager listenersManager;
|
||||
Logger logger;
|
||||
|
||||
@Before
|
||||
public void onBefore() {
|
||||
messageHandler = Mockito.mock(LiveMessagesHandler.class);
|
||||
giftsManager = Mockito.mock(GiftsManager.class);
|
||||
tikTokLiveMeta = Mockito.mock(TikTokRoomInfo.class);
|
||||
tiktokHttpClient = Mockito.mock(LiveHttpClient.class);
|
||||
webSocketClient = Mockito.mock(LiveSocketClient.class);
|
||||
tikTokEventHandler = Mockito.mock(LiveEventsHandler.class);
|
||||
clientSettings = Mockito.mock(LiveClientSettings.class);
|
||||
listenersManager = Mockito.mock(ListenersManager.class);
|
||||
logger = Mockito.mock(Logger.class);
|
||||
|
||||
sut = new TikTokLiveClient(messageHandler,
|
||||
giftsManager,
|
||||
tikTokLiveMeta,
|
||||
tiktokHttpClient,
|
||||
webSocketClient,
|
||||
tikTokEventHandler,
|
||||
clientSettings,
|
||||
listenersManager,
|
||||
logger);
|
||||
liveClientBuilder.onMappings()
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldThrownWhenAlreadyConnected() {
|
||||
tikTokLiveMeta.setConnectionState(ConnectionState.CONNECTED);
|
||||
roomInfoMock().setConnectionState(ConnectionState.CONNECTED);
|
||||
Assert.assertThrows(TikTokLiveException.class, () ->
|
||||
{
|
||||
sut.connect();
|
||||
liveClient().connect();
|
||||
});
|
||||
Assert.assertEquals(ConnectionState.DISCONNECTED, roomInfoMock().getConnectionState());
|
||||
AssertEvents(
|
||||
TikTokErrorEvent.class,
|
||||
TikTokDisconnectedEvent.class
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowWhenUserIsOffline() {
|
||||
|
||||
var request = new LiveData.Request("X");
|
||||
var response = new LiveData.Response();
|
||||
response.setLiveStatus(LiveData.LiveStatus.HostOffline);
|
||||
Mockito.when(tiktokHttpClient.fetchLiveData(request)).thenReturn(response);
|
||||
Assert.assertThrows(TikTokLiveException.class, () ->
|
||||
{
|
||||
sut.connect();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowWhenUserNotFound()
|
||||
{
|
||||
var request = new LiveData.Request("X");
|
||||
var response = new LiveData.Response();
|
||||
response.setLiveStatus(LiveData.LiveStatus.HostNotFound);
|
||||
Mockito.when(tiktokHttpClient.fetchLiveData(request)).thenReturn(response);
|
||||
Assert.assertThrows(TikTokLiveException.class, () ->
|
||||
{
|
||||
sut.connect();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowWhenAgeRestricted()
|
||||
{
|
||||
Mockito.when(tiktokHttpClient.fetchLiveData(new LiveData.Request("X")))
|
||||
.thenReturn(new LiveData.Response());
|
||||
Assert.assertThrows(TikTokLiveException.class, () ->
|
||||
{
|
||||
sut.connect();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldConnect() {
|
||||
// sut.connect();
|
||||
liveClient().connect();
|
||||
Assert.assertEquals(ConnectionState.CONNECTED, roomInfoMock().getConnectionState());
|
||||
AssertEvents(
|
||||
TikTokConnectingEvent.class,
|
||||
TikTokRoomDataResponseEvent.class,
|
||||
TikTokPreConnectionEvent.class,
|
||||
TikTokConnectedEvent.class,
|
||||
TikTokRoomInfoEvent.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package io.github.jwdeveloper.tiktok;
|
||||
|
||||
import io.github.jwdeveloper.dependance.implementation.DependanceContainerBuilder;
|
||||
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveEventsHandler;
|
||||
import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder;
|
||||
import io.github.jwdeveloper.tiktok.mocks.EventsHandlerMock;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.junit.Before;
|
||||
|
||||
/**
|
||||
* Base class for the unit tests
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Accessors(fluent = true)
|
||||
public abstract class TikTokTestBase {
|
||||
|
||||
private LiveClient liveClient;
|
||||
|
||||
private EventsHandlerMock eventsHandlerMock;
|
||||
|
||||
private TikTokRoomInfo roomInfoMock;
|
||||
|
||||
public void AssertEvents(Class<? extends TikTokEvent>... events) {
|
||||
eventsHandlerMock.assertEvents(events);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
|
||||
var builder = TikTokLive.newClient("test");
|
||||
eventsHandlerMock = new EventsHandlerMock();
|
||||
roomInfoMock = new TikTokRoomInfo();
|
||||
roomInfoMock.setHostName("test");
|
||||
liveClient = builder
|
||||
.configure(liveClientSettings ->
|
||||
{
|
||||
liveClientSettings.setOffline(true);
|
||||
liveClientSettings.setFetchGifts(false);
|
||||
})
|
||||
.customize(containerBuilder ->
|
||||
{
|
||||
containerBuilder.registerSingleton(LiveEventsHandler.class, eventsHandlerMock);
|
||||
containerBuilder.registerSingleton(TikTokRoomInfo.class, roomInfoMock);
|
||||
onBeforeEachTest(builder, containerBuilder);
|
||||
}).build();
|
||||
}
|
||||
|
||||
public abstract void onBeforeEachTest(LiveClientBuilder liveClientBuilder, DependanceContainerBuilder containerBuilder);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package io.github.jwdeveloper.tiktok.mocks;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler;
|
||||
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
|
||||
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Cache published events,
|
||||
*/
|
||||
public class EventsHandlerMock extends TikTokLiveEventHandler {
|
||||
private final List<TikTokEvent> publishedEvents = new ArrayList<TikTokEvent>();
|
||||
|
||||
|
||||
@Override
|
||||
public void publish(LiveClient tikTokLiveClient, TikTokEvent tikTokEvent) {
|
||||
super.publish(tikTokLiveClient, tikTokEvent);
|
||||
publishedEvents.add(tikTokEvent);
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public final void assertEvents(Class<? extends TikTokEvent>... events) {
|
||||
|
||||
if (events.length == 0 && !publishedEvents.isEmpty()) {
|
||||
var classNames = publishedEvents.stream()
|
||||
.map(e -> e.getClass().getSimpleName())
|
||||
.toList();
|
||||
var invokedEvents = String.join("\n", classNames);
|
||||
throw new IllegalArgumentException("Not events should be invoked but there was: \n" + invokedEvents);
|
||||
}
|
||||
|
||||
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
var expectedEvent = events[i];
|
||||
var invokedEvent = publishedEvents.get(i);
|
||||
if (expectedEvent.equals(invokedEvent.getClass())) {
|
||||
continue;
|
||||
}
|
||||
throw new RuntimeException("Expected event was " + expectedEvent + " but acctuall was " + invokedEvent.getClass());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user