package cc.blynk.integration.tcp;
import cc.blynk.integration.IntegrationBase;
import cc.blynk.integration.model.tcp.ClientPair;
import cc.blynk.server.application.AppServer;
import cc.blynk.server.core.BaseServer;
import cc.blynk.server.core.model.Profile;
import cc.blynk.server.core.model.auth.App;
import cc.blynk.server.core.model.enums.ProvisionType;
import cc.blynk.server.core.model.enums.Theme;
import cc.blynk.server.hardware.HardwareServer;
import cc.blynk.utils.JsonParser;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.nio.file.Files;
import java.nio.file.Paths;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 2/2/2015.
*
*/
@RunWith(MockitoJUnitRunner.class)
public class AppWorkflowTest extends IntegrationBase {
private BaseServer appServer;
private BaseServer hardwareServer;
private ClientPair clientPair;
@Before
public void init() throws Exception {
this.hardwareServer = new HardwareServer(holder).start();
this.appServer = new AppServer(holder).start();
this.clientPair = initAppAndHardPair();
Files.deleteIfExists(Paths.get(getDataFolder(), "blynk", "userProfiles"));
}
@After
public void shutdown() {
this.appServer.close();
this.hardwareServer.close();
this.clientPair.stop();
}
@Test
public void testPrintApp() throws Exception {
App app = new App();
app.id = "1";
app.projectIds = new int[] {1};
app.name = "My App";
app.provisionType = ProvisionType.STATIC;
app.color = 0;
app.icon = "myIcon";
app.theme = Theme.Blynk;
System.out.println(JsonParser.mapper.writeValueAsString(app));
}
@Test
public void testAppCreated() throws Exception {
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"isMultiFace\":true,\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
assertEquals(13, app.id.length());
assertEquals(Theme.Blynk, app.theme);
assertEquals(ProvisionType.STATIC, app.provisionType);
assertEquals(0, app.color);
assertEquals("My App", app.name);
assertEquals("myIcon", app.icon);
assertTrue(app.isMultiFace);
assertArrayEquals(new int[]{1}, app.projectIds);
}
@Test
public void testAppCreated2() throws Exception {
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[2]}");
app = JsonParser.parseApp(clientPair.appClient.getBody(2));
assertNotNull(app);
assertNotNull(app.id);
}
@Test
public void testUnicodeName() throws Exception {
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"Моя апка\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
assertEquals("Моя апка", app.name);
}
@Test
public void testCantCreateWithSameId() throws Exception {
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
clientPair.appClient.send("createApp {\"id\":\"" + app.id + "\",\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[2]}");
app = JsonParser.parseApp(clientPair.appClient.getBody(2));
assertNotNull(app);
assertNotNull(app.id);
}
@Test
public void testAppUpdated() throws Exception {
clientPair.appClient.send("createApp {\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
clientPair.appClient.send("updateApp {\"id\":\"" + app.id + "\",\"theme\":\"BlynkLight\",\"provisionType\":\"DYNAMIC\",\"color\":1,\"name\":\"My App 2\",\"icon\":\"myIcon2\",\"projectIds\":[1,2]}");
verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(ok(2)));
clientPair.appClient.send("loadProfileGzipped");
String s = clientPair.appClient.getBody(3);
Profile profile = parseProfile(s);
assertNotNull(profile);
assertNotNull(profile.apps);
assertEquals(1, profile.apps.length);
App app2 = profile.apps[0];
assertEquals(app.id, app2.id);
assertEquals(Theme.BlynkLight, app2.theme);
assertEquals(ProvisionType.DYNAMIC, app2.provisionType);
assertEquals(1, app2.color);
assertEquals("My App 2", app2.name);
assertEquals("myIcon2", app2.icon);
assertArrayEquals(new int[]{1, 2}, app2.projectIds);
}
@Test
public void testAppDelete() throws Exception {
clientPair.appClient.send("createApp {\"id\":1,\"theme\":\"Blynk\",\"provisionType\":\"STATIC\",\"color\":0,\"name\":\"My App\",\"icon\":\"myIcon\",\"projectIds\":[1]}");
App app = JsonParser.parseApp(clientPair.appClient.getBody());
assertNotNull(app);
assertNotNull(app.id);
clientPair.appClient.send("deleteApp " + app.id);
verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(ok(2)));
clientPair.appClient.send("loadProfileGzipped");
String s = clientPair.appClient.getBody(3);
Profile profile = parseProfile(s);
assertNotNull(profile);
assertNotNull(profile.apps);
assertEquals(0, profile.apps.length);
}
}