package com.juick.tests; import com.juick.Message; import com.juick.Tag; import com.juick.User; import com.juick.server.MessagesQueries; import com.juick.server.SubscriptionsQueries; import com.juick.server.TagQueries; import com.juick.server.UserQueries; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by vt on 14.01.2016. */ public class ApiTests { JdbcTemplate jdbc; @Before public void setupConnection() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:~/test"); jdbc = new JdbcTemplate(dataSource); jdbc.execute("DROP ALL OBJECTS DELETE FILES"); jdbc.execute("CREATE TABLE bl_users (user_id int(10) unsigned NOT NULL, " + "bl_user_id int(10) unsigned NOT NULL, ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); jdbc.execute("CREATE TABLE messages (" + "message_id int(10) unsigned NOT NULL AUTO_INCREMENT," + "user_id int(10) unsigned NOT NULL," + "place_id int(10) unsigned DEFAULT NULL," + "lat decimal(10,7) DEFAULT NULL," + "lon decimal(10,7) DEFAULT NULL," + "ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + "replies smallint(5) unsigned NOT NULL DEFAULT 0," + "maxreplyid smallint(5) unsigned NOT NULL DEFAULT 0," + "privacy tinyint(4) NOT NULL DEFAULT '1'," + "attach nchar(3) check (attach in ('jpg', 'mp4', 'png'))," + "readonly tinyint(1) NOT NULL DEFAULT 0," + "likes smallint(6) NOT NULL DEFAULT 0," + "hidden tinyint(3) unsigned NOT NULL DEFAULT 0" + ")"); jdbc.execute("CREATE TABLE messages_tags (" + "message_id int(10) unsigned NOT NULL," + "tag_id int(10) unsigned NOT NULL" + ")"); jdbc.execute("CREATE TABLE users (" + "id int(10) unsigned NOT NULL AUTO_INCREMENT," + "nick char(64) NOT NULL," + "passw char(32) NOT NULL," + "banned tinyint(3) unsigned NOT NULL DEFAULT 0)"); jdbc.execute("CREATE TABLE useroptions (" + "user_id int(10) unsigned NOT NULL," + "jnotify tinyint(1) NOT NULL DEFAULT 1," + "subscr_active tinyint(1) NOT NULL DEFAULT 1)"); jdbc.execute("CREATE TABLE subscr_users (" + "user_id int(10) unsigned NOT NULL," + "suser_id int(10) unsigned NOT NULL," + "jid char(64) DEFAULT NULL," + "active tinyint(1) NOT NULL DEFAULT 1," + "ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)"); jdbc.execute("CREATE TABLE subscr_messages (" + "message_id int(10) unsigned NOT NULL," + "suser_id int(10) unsigned NOT NULL)"); jdbc.execute("CREATE TABLE messages_txt (" + "message_id int(10) unsigned NOT NULL," + "tags varchar(255)," + "repliesby varchar(96)," + "txt TEXT)"); jdbc.execute("CREATE TABLE tags(" + "tag_id int(10) unsigned NOT NULL AUTO_INCREMENT," + "synonym_id int(10) unsigned DEFAULT NULL," + "name char(48) NOT NULL," + "top tinyint(1) unsigned NOT NULL DEFAULT 0," + "stat_messages int(10) unsigned NOT NULL DEFAULT 0," + "stat_users smallint(5) unsigned NOT NULL DEFAULT 0)"); jdbc.execute("CREATE TABLE replies (" + "message_id int(10) unsigned NOT NULL," + "reply_id smallint(5) unsigned NOT NULL," + "user_id int(10) unsigned NOT NULL," + "replyto smallint(5) unsigned NOT NULL DEFAULT 0," + "ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," + "attach nchar(3) check (attach in ('jpg', 'mp4', 'png'))," + "txt text)"); } @Test public void messageTests() { int user_id = UserQueries.createUser(jdbc, "me", "secret"); User user = UserQueries.getUserByUID(jdbc, user_id); Assert.assertEquals("it should be me", "me", user.getUName()); int mid = MessagesQueries.createMessage(jdbc, user_id, "yo", null, new ArrayList<>()); Message msg = MessagesQueries.getMessage(jdbc, mid); org.junit.Assert.assertEquals("yo", msg.getText()); Calendar calendar = Calendar.getInstance(); calendar.setTime(msg.getDate()); org.junit.Assert.assertEquals(2016, calendar.get(Calendar.YEAR)); User me = msg.getUser(); Assert.assertEquals("me", me.getUName()); org.junit.Assert.assertEquals("me", MessagesQueries.getMessageAuthor(jdbc, mid).getUName()); int tagID = TagQueries.createTag(jdbc, "weather"); Tag tag = TagQueries.getTag(jdbc, tagID); List tagList = new ArrayList<>(); tagList.add(tag); int mid2 = MessagesQueries.createMessage(jdbc, user_id, "yo2", null, tagList); Message msg2 = MessagesQueries.getMessage(jdbc, mid2); org.junit.Assert.assertEquals(1, msg2.Tags.size()); int ugnich_id = UserQueries.createUser(jdbc, "ugnich", "x"); User ugnich = UserQueries.getUserByUID(jdbc, ugnich_id); int rid = MessagesQueries.createReply(jdbc, msg2.getMID(), 0, ugnich.getUID(), "bla-bla", null); org.junit.Assert.assertEquals(1, rid); Message msg3 = MessagesQueries.getMessage(jdbc, mid2); org.junit.Assert.assertEquals(1, msg3.Replies); org.junit.Assert.assertEquals("weather", msg3.Tags.get(0)); org.junit.Assert.assertEquals(ugnich.getUID(), UserQueries.checkPassword(jdbc, ugnich.getUName(), "x")); org.junit.Assert.assertEquals(-1, UserQueries.checkPassword(jdbc, ugnich.getUName(), "xy")); SubscriptionsQueries.subscribeMessage(jdbc, msg.getMID(), ugnich.getUID()); Assert.assertEquals(1, SubscriptionsQueries.getUsersSubscribedToComments(jdbc, msg.getMID(), user.getUID()).size()); } }