Skip to content

Commit 989e56d

Browse files
committed
Merge pull request #47 from Zwergal/test_refactor
Refactored the testcode and added zerodate-test for mysql
2 parents de174eb + 8d3f363 commit 989e56d

File tree

3 files changed

+70
-58
lines changed

3 files changed

+70
-58
lines changed

src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@ trait BaseSqlTests {
1313

1414
private val timeout: Int = 15000
1515

16-
protected def isMysql: Boolean = false
17-
1816
protected def failedTest: PartialFunction[Throwable, Unit] = {
1917
case ex: Throwable =>
2018
logger.warn("failed in test", ex)
2119
fail("test failed. see warning above")
2220
}
2321

24-
private def sendWithTimeout(json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
22+
protected def sendWithTimeout(json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
2523
val p = Promise[(Message[JsonObject], JsonObject)]()
2624
vertx.eventBus.sendWithTimeout(address, json, timeout, {
2725
case Success(reply) => p.success(reply, reply.body())
@@ -30,7 +28,7 @@ trait BaseSqlTests {
3028
p.future
3129
}
3230

33-
private def replyWithTimeout(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
31+
protected def replyWithTimeout(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
3432
val p = Promise[(Message[JsonObject], JsonObject)]()
3533
msg.replyWithTimeout(json, timeout, {
3634
case Success(reply) => p.success(reply, reply.body())
@@ -39,13 +37,13 @@ trait BaseSqlTests {
3937
p.future
4038
}
4139

42-
private def checkOkay(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
40+
protected def checkOkay(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
4341
assertEquals(s"should get 'ok' back when sending ${json.encode()}, but got ${msg._2.encode()}",
4442
"ok", msg._2.getString("status"))
4543
(msg._1, msg._2)
4644
}
4745

48-
private def checkError(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
46+
protected def checkError(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
4947
assertEquals(s"should get an 'error' back when sending ${json.encode()}, but got ${msg._2.encode()}",
5048
"error", msg._2.getString("status"))
5149
(msg._1, msg._2)
@@ -57,19 +55,19 @@ trait BaseSqlTests {
5755
protected def sendFail(json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
5856
sendWithTimeout(json) map checkError(json)
5957

60-
private def replyOk(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
58+
protected def replyOk(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
6159
replyWithTimeout(msg, json) map checkOkay(json)
6260

63-
private def replyFail(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
61+
protected def replyFail(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
6462
replyWithTimeout(msg, json) map checkError(json)
6563

66-
private def setupTableTest(): Future[_] = for {
64+
protected def setupTableTest(): Future[_] = for {
6765
(msg, reply) <- sendOk(raw(createTableStatement("some_test")))
6866
} yield {
6967
assertEquals(0, reply.getInteger("rows"))
7068
}
7169

72-
private def setupTypeTest(): Future[_] = for {
70+
protected def setupTypeTest(): Future[_] = for {
7371
_ <- setupTableTest()
7472
(msg, reply) <- sendOk(insert("some_test",
7573
Json.fromArrayString( """["name","email","is_male","age","money","wedding_date"]"""),
@@ -389,13 +387,7 @@ trait BaseSqlTests {
389387
| name VARCHAR(255),
390388
| PRIMARY KEY (id)
391389
|);""".stripMargin))
392-
(msg, _) <- replyOk(msg, raw(
393-
s"""CREATE TABLE test_two (
394-
| id SERIAL,
395-
| name VARCHAR(255),
396-
| one_id BIGINT ${if (isMysql) "UNSIGNED" else ""} NOT NULL,
397-
| PRIMARY KEY (id)
398-
|);""".stripMargin))
390+
(msg, _) <- replyOk(msg, raw(createTableTestTwo))
399391
(msg, _) <- replyOk(msg, raw(
400392
"""ALTER TABLE test_two ADD CONSTRAINT test_two_one_id_fk
401393
|FOREIGN KEY (one_id)

src/test/scala/io/vertx/asyncsql/test/SqlTestVerticle.scala

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
1212

1313
val address = "campudus.asyncdb"
1414

15-
protected val baseConf = Json.obj("address" -> address, "maxPoolSize" -> 3, "transactionTimeout" -> 5000L)
15+
protected val baseConf = Json.obj("address" -> address, "maxPoolSize" -> 3, "transactionTimeout" -> 5000L)
1616

1717
override final def before() {}
18+
1819
override def asyncBefore(): Future[Unit] = {
1920
val p = Promise[Unit]
2021
container.deployModule(System.getProperty("vertx.modulename"), getConfig(), 1, { deploymentID: AsyncResult[String] =>
@@ -47,6 +48,7 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
4748
Json.obj("action" -> "insert", "table" -> table, "fields" -> fields, "values" -> values)
4849

4950
protected def select(table: String, fields: JsonArray): JsonObject = select(table, Some(fields))
51+
5052
protected def select(table: String, fields: JsonArray, conditions: JsonObject): JsonObject = select(table, Some(fields), Some(conditions))
5153

5254
protected def select(table: String, fields: Option[JsonArray] = None, conditions: Option[JsonObject] = None): JsonObject = {
@@ -71,23 +73,26 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
7173
reply
7274
}
7375

74-
protected def createDateTable(dateDataType :String) = s"""
75-
| CREATE TABLE date_test (
76-
| id SERIAL,
77-
| test_date $dateDataType
78-
| );
79-
""".stripMargin
80-
81-
protected def createTableStatement(tableName: String) = """
82-
DROP TABLE IF EXISTS """ + tableName + """;
83-
CREATE TABLE """ + tableName + """ (
84-
id SERIAL,
85-
name VARCHAR(255),
86-
email VARCHAR(255) UNIQUE,
87-
is_male BOOLEAN,
88-
age INT,
89-
money DOUBLE PRECISION,
90-
wedding_date DATE
91-
);
92-
"""
76+
protected def createDateTable(dateDataType: String) = s"""CREATE TABLE date_test (
77+
| id SERIAL,
78+
| test_date $dateDataType
79+
|);""".stripMargin
80+
81+
protected def createTableStatement(tableName: String) = s"""DROP TABLE IF EXISTS $tableName;
82+
CREATE TABLE $tableName (
83+
| id SERIAL,
84+
| name VARCHAR(255),
85+
| email VARCHAR(255) UNIQUE,
86+
| is_male BOOLEAN,
87+
| age INT,
88+
| money DOUBLE PRECISION,
89+
| wedding_date DATE
90+
|);""".stripMargin
91+
92+
protected def createTableTestTwo: String = s"""CREATE TABLE test_two (
93+
| id SERIAL,
94+
| name VARCHAR(255),
95+
| one_id BIGINT NOT NULL,
96+
| PRIMARY KEY (id)
97+
|);""".stripMargin
9398
}

src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,33 @@ import org.vertx.testtools.VertxAssert._
77

88
class MySqlTest extends SqlTestVerticle with BaseSqlTests {
99

10-
override def isMysql = true
11-
1210
override def doBefore() = expectOk(raw("DROP TABLE IF EXISTS `some_test`"))
1311

1412
override def getConfig() = baseConf.putString("connection", "MySQL")
1513

16-
override def createDateTable(dateDataType: String) = s"""
17-
| CREATE TABLE date_test (
18-
| id INT NOT NULL AUTO_INCREMENT,
19-
| test_date $dateDataType,
20-
| PRIMARY KEY(id)
21-
| );
22-
""".stripMargin
23-
24-
override def createTableStatement(tableName: String) = """
25-
CREATE TABLE """ + tableName + """ (
26-
id INT NOT NULL AUTO_INCREMENT,
27-
name VARCHAR(255),
28-
email VARCHAR(255) UNIQUE,
29-
is_male BOOLEAN,
30-
age INT,
31-
money FLOAT,
32-
wedding_date DATE,
33-
PRIMARY KEY (id)
34-
);"""
14+
override def createDateTable(dateDataType: String) = s"""CREATE TABLE date_test (
15+
| id INT NOT NULL AUTO_INCREMENT,
16+
| test_date $dateDataType,
17+
| PRIMARY KEY(id)
18+
|);""".stripMargin
19+
20+
override def createTableStatement(tableName: String) = s"""CREATE TABLE $tableName (
21+
| id INT NOT NULL AUTO_INCREMENT,
22+
| name VARCHAR(255),
23+
| email VARCHAR(255) UNIQUE,
24+
| is_male BOOLEAN,
25+
| age INT,
26+
| money FLOAT,
27+
| wedding_date DATE,
28+
| PRIMARY KEY (id)
29+
|);""".stripMargin
30+
31+
override def createTableTestTwo: String = """CREATE TABLE test_two (
32+
| id SERIAL,
33+
| name VARCHAR(255),
34+
| one_id BIGINT UNSIGNED NOT NULL,
35+
| PRIMARY KEY (id)
36+
|);""".stripMargin
3537

3638
@Test
3739
def datetimeTest(): Unit =
@@ -48,4 +50,17 @@ CREATE TABLE """ + tableName + """ (
4850
testComplete()
4951
}) recover failedTest
5052

53+
@Test
54+
def zeroDateTest(): Unit = (for {
55+
_ <- setupTableTest()
56+
(msg, insertReply) <- sendOk(raw("INSERT INTO some_test (name, wedding_date) VALUES ('tester', '0000-00-00');"))
57+
(msg, reply) <- sendOk(prepared("SELECT wedding_date FROM some_test WHERE name=?", Json.arr("tester")))
58+
} yield {
59+
val receivedFields = reply.getArray("fields")
60+
logger.info(reply.getArray("results").get[JsonArray](0).get[String](0))
61+
assertEquals(Json.arr("wedding_date"), receivedFields)
62+
assertEquals(null, reply.getArray("results").get[JsonArray](0).get[String](0))
63+
testComplete()
64+
}) recover failedTest
65+
5166
}

0 commit comments

Comments
 (0)