diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found.pat.json b/hivemind/tavern/database_api_negative/find_votes/comment_not_found.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..7fda07159df7368e2132e007c8ee62176431c604
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1280,
+          "method": "find_votes"
+        },
+        "data": {
+          "a": "",
+          "p": ""
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}"
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment /"
+}
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found.tavern.yaml b/hivemind/tavern/database_api_negative/find_votes/comment_not_found.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..75d012a411798a3f7a256b0b7272e18e654eac77
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found.tavern.yaml
@@ -0,0 +1,50 @@
+---
+test_name: Hivemind database_api.find_votes cdomment not found
+
+marks:
+  - patterntest
+  - negative  # on API docs it "shows" {
+            #   "votes": [
+            #     {
+            #       "id": 0,
+            #       "voter": "",
+            #       "author": "",
+            #       "permlink": "",
+            #       "weight": "0",
+            #       "rshares": 0,
+            #       "vote_percent": 0,
+            #       "last_update": "2016-04-07T19:15:36",
+            #       "num_changes": -1
+            #     }
+            #   ]
+            # }
+  - xfail
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_votes cdomment not found
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_votes"
+        params:
+          {
+            "author": "",
+            "permlink": "",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found"
+          directory: "database_api_negative/find_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.pat.json b/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..61ca37bd308e82e1b4616abe150c1496a0ffec0f
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1280,
+          "method": "find_votes"
+        },
+        "data": {
+          "a": "kental",
+          "p": ""
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}"
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment kental/"
+}
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.tavern.yaml b/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ed4f98b5cbaa70f7f9796c9fcfe021b8cdfb7471
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found2.tavern.yaml
@@ -0,0 +1,35 @@
+---
+test_name: Hivemind database_api.find_votes cdomment not found 2
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_votes cdomment not found 2
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_votes"
+        params:
+          {
+            "author": "kental",
+            "permlink": "",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found2"
+          directory: "database_api_negative/find_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.pat.json b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..1b292bf273da8675cdffa302e0c66c8ab9077af5
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1280,
+          "method": "find_votes"
+        },
+        "data": {
+          "a": "",
+          "p": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava"
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}"
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment /hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava"
+}
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.tavern.yaml b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7a0836b6e0effb86dc34929ac5cd5cef2bfcf085
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_by_permlink.tavern.yaml
@@ -0,0 +1,35 @@
+---
+test_name: Hivemind database_api.find_votes cdomment not found by permlink
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_votes cdomment not found by permlink
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_votes"
+        params:
+          {
+            "author": "",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found_by_permlink"
+          directory: "database_api_negative/find_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.pat.json b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..c2cf62fea11e64792ab74e3df4f8b0cb4862503e
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1280,
+          "method": "find_votes"
+        },
+        "data": {
+          "a": "hiveio",
+          "p": "firstpost"
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}"
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment hiveio/firstpost"
+}
diff --git a/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.tavern.yaml b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..52e7e812557995d8cd8662c1061114e6e71fb10c
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/find_votes/comment_not_found_hiveio_firstpost.tavern.yaml
@@ -0,0 +1,35 @@
+---
+test_name: Hivemind database_api.find_votes cdomment not found hiveio firstpost
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_votes cdomment not found hiveio firstpost
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_votes"
+        params:
+          {
+            "author": "hiveio",
+            "permlink": "firstpost",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found_hiveio_firstpost"
+          directory: "database_api_negative/find_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.pat.json b/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..6af5a686563c249e375d896826c7f0ea2977bca7
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.pat.json
@@ -0,0 +1,24 @@
+{
+  "code": -32000,
+  "data": {
+    "code": 13,
+    "message": "Day of month value is out of range 1..31",
+    "name": "N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEE",
+    "stack": [
+      {
+        "context": {
+          "file": "time.cpp",
+          "hostname": "",
+          "level": "warn",
+          "line": 48,
+          "method": "from_iso_string"
+        },
+        "data": {
+          "what": "Day of month value is out of range 1..31"
+        },
+        "format": "${what}: unable to convert ISO-formatted string to fc::time_point_sec"
+      }
+    ]
+  },
+  "message": "Day of month value is out of range 1..31:Day of month value is out of range 1..31: unable to convert ISO-formatted string to fc::time_point_sec"
+}
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.tavern.yaml b/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..04c5786693def21aaf771dfd8ec406fc07ee3af6
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_of_the_month_out_of_range.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_comments day of the month out of range
+
+marks:
+  - patterntest
+  - negative
+  - failing
+  - xfail
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_comments day of the month out of range
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_comments"
+        params:
+          { "start": ["", "", ""], "limit": 10, "order": "by_cashout_time" }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "day_of_the_month_out_of_range"
+          directory: "database_api_negative/list_comments"
+          error_response: true
+          ignore_tags: ["timestamp"]
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.pat.json b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..6af5a686563c249e375d896826c7f0ea2977bca7
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.pat.json
@@ -0,0 +1,24 @@
+{
+  "code": -32000,
+  "data": {
+    "code": 13,
+    "message": "Day of month value is out of range 1..31",
+    "name": "N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEE",
+    "stack": [
+      {
+        "context": {
+          "file": "time.cpp",
+          "hostname": "",
+          "level": "warn",
+          "line": 48,
+          "method": "from_iso_string"
+        },
+        "data": {
+          "what": "Day of month value is out of range 1..31"
+        },
+        "format": "${what}: unable to convert ISO-formatted string to fc::time_point_sec"
+      }
+    ]
+  },
+  "message": "Day of month value is out of range 1..31:Day of month value is out of range 1..31: unable to convert ISO-formatted string to fc::time_point_sec"
+}
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.tavern.yaml b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d351dc6722dd78b5f2017b7bd617e232dab544ce
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_empty.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_comments day of the month out of range "by_last_update"
+
+marks:
+  - patterntest
+  - negative
+  - failing
+  - xfail
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_comments day of the month out of range "by_last_update"
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_comments"
+        params:
+          { "start": ["", "", "", ""], "limit": 10, "order": "by_last_update" }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "day_out_of_range_empty"
+          directory: "database_api_negative/list_comments"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.pat.json b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..6af5a686563c249e375d896826c7f0ea2977bca7
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.pat.json
@@ -0,0 +1,24 @@
+{
+  "code": -32000,
+  "data": {
+    "code": 13,
+    "message": "Day of month value is out of range 1..31",
+    "name": "N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEE",
+    "stack": [
+      {
+        "context": {
+          "file": "time.cpp",
+          "hostname": "",
+          "level": "warn",
+          "line": 48,
+          "method": "from_iso_string"
+        },
+        "data": {
+          "what": "Day of month value is out of range 1..31"
+        },
+        "format": "${what}: unable to convert ISO-formatted string to fc::time_point_sec"
+      }
+    ]
+  },
+  "message": "Day of month value is out of range 1..31:Day of month value is out of range 1..31: unable to convert ISO-formatted string to fc::time_point_sec"
+}
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.tavern.yaml b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6eaf3b447b6b3034628eaaaac48ccc239191f37b
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_0.tavern.yaml
@@ -0,0 +1,38 @@
+---
+test_name: Hivemind database_api.list_comments day of the month out of range start 0
+
+marks:
+  - patterntest # first arg is author, not date (error about date)
+  - negative
+  - failing
+  - xfail
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_comments day of the month out of range start 0
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_comments"
+        params:
+          {
+            "start": ["2016-08-24T21:29:42", "", "", ""],
+            "limit": 10,
+            "order": "by_last_update",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "day_out_of_range_start_0"
+          directory: "database_api_negative/list_comments"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.pat.json b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..6af5a686563c249e375d896826c7f0ea2977bca7
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.pat.json
@@ -0,0 +1,24 @@
+{
+  "code": -32000,
+  "data": {
+    "code": 13,
+    "message": "Day of month value is out of range 1..31",
+    "name": "N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEE",
+    "stack": [
+      {
+        "context": {
+          "file": "time.cpp",
+          "hostname": "",
+          "level": "warn",
+          "line": 48,
+          "method": "from_iso_string"
+        },
+        "data": {
+          "what": "Day of month value is out of range 1..31"
+        },
+        "format": "${what}: unable to convert ISO-formatted string to fc::time_point_sec"
+      }
+    ]
+  },
+  "message": "Day of month value is out of range 1..31:Day of month value is out of range 1..31: unable to convert ISO-formatted string to fc::time_point_sec"
+}
diff --git a/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.tavern.yaml b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..113b7586fbfea9439c3039f5f8c41453ec491504
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_comments/day_out_of_range_start_3.tavern.yaml
@@ -0,0 +1,38 @@
+---
+test_name: Hivemind database_api.list_comments day of the month out of range start 3
+
+marks:
+  - patterntest # first arg is author, not date (error about date)
+  - negative
+  - failing
+  - xfail
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_comments day of the month out of range start 3
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_comments"
+        params:
+          {
+            "start": ["", "2016-04-66T21:29:42", "", ""],
+            "limit": 10,
+            "order": "by_last_update"
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "day_out_of_range_start_3"
+          directory: "database_api_negative/list_comments"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found.pat.json b/hivemind/tavern/database_api_negative/list_votes/comment_not_found.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..4b30b4279b62438ecd0e66ace53d1241fb1ba2b8
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1215,
+          "method": "votes_impl"
+        },
+        "data": {
+          "a": "roelandp",
+          "p": ""
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}."
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment roelandp/."
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/comment_not_found.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4b6fda36c9b13a3fb991e16bc5938509a701029e
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" comment not found
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" comment not found
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["roelandp", "", ""],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.pat.json b/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..4b30b4279b62438ecd0e66ace53d1241fb1ba2b8
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1215,
+          "method": "votes_impl"
+        },
+        "data": {
+          "a": "roelandp",
+          "p": ""
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}."
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment roelandp/."
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..829e9f38e5aca617dbd52fccda23a248d0172fdd
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found2.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" comment not found 2
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" comment not found 2
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "roelandp", ""],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found2"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.pat.json b/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..1910f023a7d81896f94e646d6cdd73fb38cf9de1
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1215,
+          "method": "votes_impl"
+        },
+        "data": {
+          "a": "",
+          "p": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours"
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}."
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment /tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours."
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d99446468411a0987b588c06c80d1adb26048adb
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found3.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" comment not found 3
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" comment not found 3
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "", "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours"],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found3"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.pat.json b/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..f0a0ff39175d52cd1477ba29702a4c2d2273abfb
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1215,
+          "method": "votes_impl"
+        },
+        "data": {
+          "a": "roelandp",
+          "p": "tldr-an-exploration-in-st"
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}."
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment roelandp/tldr-an-exploration-in-st."
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..82545fce823dc60afeed449201945660ae25947c
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/comment_not_found4.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" comment not found 4
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" comment not found 4
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "roelandp", "tldr-an-exploration-in-st"],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "comment_not_found4"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.pat.json b/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3aff64af6232694bbdfb08d722a6643aeae7e66
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32000,
+  "data": {
+    "code": 7,
+    "message": "Bad Cast",
+    "name": "bad_cast_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "exception.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 226,
+          "method": "throw_bad_enum_cast"
+        },
+        "data": {
+          "enum": "steem::plugins::database_api::sort_order_type",
+          "key": "by_author"
+        },
+        "format": "invalid name '${key}' in enum '${enum}'"
+      }
+    ]
+  },
+  "message": "Bad Cast:invalid name 'by_author' in enum 'steem::plugins::database_api::sort_order_type'"
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1647013d99539e60686fb9a55b5b69f09154dd0c
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/invalid_name_by_author.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test invalid name by author
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test invalid name by author
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "roelandp", "tldr-an-exploration-in-st"],
+            "limit": 10,
+            "order": "by_author",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "invalid_name_by_author"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.pat.json b/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..883cb734bbbf36b920a38be4e99b4d4d79913157
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.pat.json
@@ -0,0 +1,25 @@
+{
+  "code": -32003,
+  "data": {
+    "code": 10,
+    "message": "Assert Exception",
+    "name": "assert_exception",
+    "stack": [
+      {
+        "context": {
+          "file": "database_api.cpp",
+          "hostname": "",
+          "level": "error",
+          "line": 1215,
+          "method": "votes_impl"
+        },
+        "data": {
+          "a": "",
+          "p": "re-roelandp-tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours-20160825t212252221z"
+        },
+        "format": "comment != nullptr: Could not find comment ${a}/${p}."
+      }
+    ]
+  },
+  "message": "Assert Exception:comment != nullptr: Could not find comment /re-roelandp-tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours-20160825t212252221z."
+}
diff --git a/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.tavern.yaml b/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f69269f959c4c507a82060bad508f05bb54c8c9d
--- /dev/null
+++ b/hivemind/tavern/database_api_negative/list_votes/permlink_not_found.tavern.yaml
@@ -0,0 +1,36 @@
+---
+test_name: Hivemind database_api.list_votes patterns test "by_comment_voter" permlink not found
+
+marks:
+  - patterntest
+  - negative
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test "by_comment_voter" permlink not found
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "re-roelandp-tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours-20160825t212252221z", ""],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "permlink_not_found"
+          directory: "database_api_negative/list_votes"
+          error_response: true
+          ignore_tags: ["timestamp"]
diff --git a/hivemind/tavern/database_api_patterns/find_comments/all_data.pat.json b/hivemind/tavern/database_api_patterns/find_comments/all_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..8df0feb35eeb7acd4ae2c3eb59e0c8ebde79afda
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_comments/all_data.pat.json
@@ -0,0 +1,53 @@
+{
+    "comments": [
+        {
+            "id": 227413,
+            "author": "magicmonk",
+            "permlink": "hello-steemit-my-name-s-eddie-a-k-a-the-magic-monk-i-am-a-youtuber-and-a-high-school-teacher-let-the-writing-begin",
+            "category": "introduceyourself",
+            "parent_author": "",
+            "parent_permlink": "introduceyourself",
+            "title": "Hello Steemit! My name's Eddie (a.k.a. the Magic Monk), I am a Youtuber and a high school teacher! Let the writing begin!",
+            "body": "**Hello everyone on Steem!!**\n![My picture](https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-xfp1/t31.0-8/12698631_1001956866545660_8622549576218702447_o.jpg)\n\n**I am super excited** to finally be part of Steem! I have so much to share with you all and I look forward to learning with and from everyone here.\n\nMy name is Eddie and I'm 33 years old. I immigrated to New Zealand from Taiwan when I was 11 without speaking any English (except how are you). A lot of my childhood consisted of looking up words in the dictionary in order to do homework, but I am glad to have had that experience. After a bit of struggle, I finally graduated from high school and university and now I'm a permanent high school maths teacher, and my English is now the least of my worries. I currently live in my own house on an acreage in Brisbane Australia, and I wouldn't live anywhere else. I still speak fluent Chinese and a while ago, I went on the world's most viewed dating show \"If You Are The One\" in China as an Australian contestant, you can watch my appearance here:\n\nhttps://www.youtube.com/watch?v=OtTAPhJZ5JE\n\n### My interests and hobbies\n\n![My picture](https://scontent-syd1-1.xx.fbcdn.net/v/t1.0-9/12509060_977260735681940_6691008880673566787_n.jpg?oh=9ae2ac2e72e5f28e50de30857ac88b13&oe=57EB824F)\n\nOther than studying hard at mathematics and computers, I'm passionate about exercise. I have won two Brisbane Night Tennis Association competitions. I have competed in swing dance championships around Australia, and I regularly practice Tai Chi, Shaolin and Praying Mantis Kung Fu. I believe exercising improves health and having good health is important to living a good life.\n\n![My picture](https://scontent-syd1-1.xx.fbcdn.net/v/t1.0-9/1394472_553116498096368_370916207_n.jpg?oh=16881a36fb5ae8938a179ad91f197fc7&oe=58151298)\n\n### My history with Youtube\n\nA few years ago I saw Khan Academy on Youtube. He was a great teacher, however, we have a different maths curriculum here in Australia, so I decided to start my own math teaching on Youtube for Australian students. I have 3.5 million views now, and funnily enough most of my viewers are actually from overseas. I still work as a high school teacher full time so I don't have much time for Youtube, but I make videos when I can :) \n\nMy students were so impressed with my Youtube channel that one of my best students made this video about me. \n\nhttps://www.youtube.com/watch?v=wZskm-oETMY\n\nMy goal is to demystify maths and other difficult subjects such as computer programming and make them accessible to everyone. I use basic terms and I explain slowly so anyone can understand. I'm not very smart myself so if I can learn these things then anyone can. My lessons are structured so if you watch my videos from beginning to end on the playlist, you can learn everything from basic algebra to Calculus. \n\nhttps://www.youtube.com/watch?v=rBf1eYwwQFE\n\nI believe Steem will benefit from my participation as I will link my articles to my website http://magicmonk.org and my Youtube channel so they will bring more users to Steem.\n\n**Please feel free to share your ideas, advice, feedback with me. I look forward to hearing from you all!!**",
+            "json_metadata": "{\"tags\":[\"introduceyourself\"],\"links\":[\"https://www.youtube.com/watch?v=OtTAPhJZ5JE\"]}",
+            "last_update": "2016-07-24T09:39:24",
+            "created": "2016-07-24T04:52:48",
+            "active": "2016-08-03T13:23:48",
+            "last_payout": "2016-08-24T06:35:09",
+            "depth": 0,
+            "children": 60,
+            "net_rshares": 0,
+            "abs_rshares": 0,
+            "vote_rshares": 0,
+            "children_abs_rshares": 0,
+            "cashout_time": "1969-12-31T23:59:59",
+            "max_cashout_time": "1969-12-31T23:59:59",
+            "total_vote_weight": 0,
+            "reward_weight": 10000,
+            "total_payout_value": {
+                "amount": "3020002",
+                "precision": 3,
+                "nai": "@@000000013"
+            },
+            "curator_payout_value": {
+                "amount": "248842",
+                "precision": 3,
+                "nai": "@@000000013"
+            },
+            "author_rewards": 831270,
+            "net_votes": 265,
+            "root_author": "magicmonk",
+            "root_permlink": "hello-steemit-my-name-s-eddie-a-k-a-the-magic-monk-i-am-a-youtuber-and-a-high-school-teacher-let-the-writing-begin",
+            "max_accepted_payout": {
+                "amount": "1000000000",
+                "precision": 3,
+                "nai": "@@000000013"
+            },
+            "percent_steem_dollars": 10000,
+            "allow_replies": true,
+            "allow_votes": true,
+            "allow_curation_rewards": true,
+            "beneficiaries": []
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/find_comments/all_data.tavern.yaml b/hivemind/tavern/database_api_patterns/find_comments/all_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4fb2c6ac7084e859d6ef05cb19332c872a0e602f
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_comments/all_data.tavern.yaml
@@ -0,0 +1,33 @@
+---
+test_name: Hivemind database_api.find_comments all data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_comments all data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_comments"
+        params:
+          {
+            "comments": [["magicmonk","hello-steemit-my-name-s-eddie-a-k-a-the-magic-monk-i-am-a-youtuber-and-a-high-school-teacher-let-the-writing-begin"]],
+            "limit": 0,
+            "order": "",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "all_data"
+          directory: "database_api_patterns/find_comments"
diff --git a/hivemind/tavern/database_api_patterns/find_comments/no_data.pat.json b/hivemind/tavern/database_api_patterns/find_comments/no_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c1c6d2c4ef73a492dcc1124ef74662292d8d566
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_comments/no_data.pat.json
@@ -0,0 +1,3 @@
+{
+    "comments": []
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/find_comments/no_data.tavern.yaml b/hivemind/tavern/database_api_patterns/find_comments/no_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d07daa64f66d9acf0f5585be37070efc01c30e63
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_comments/no_data.tavern.yaml
@@ -0,0 +1,33 @@
+---
+test_name: Hivemind database_api.find_comments no data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_comments no data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_comments"
+        params:
+          {
+            "comments": [["magicmonk",""]],
+            "limit": 0,
+            "order": "",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "no_data"
+          directory: "database_api_patterns/find_comments"
diff --git a/hivemind/tavern/database_api_patterns/find_votes/all_data.pat.json b/hivemind/tavern/database_api_patterns/find_votes/all_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..479a40c487d1c7b575e0b3f10b65ebda0b220a0c
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_votes/all_data.pat.json
@@ -0,0 +1,235 @@
+{
+    "votes": [
+        {
+            "id": 1007667,
+            "voter": "on0tole",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "5725626236557488",
+            "rshares": 2329409778,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:35:57",
+            "num_changes": -1
+        },
+        {
+            "id": 1008825,
+            "voter": "eduardf",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "351204348157886",
+            "rshares": 76250486,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:50:21",
+            "num_changes": -1
+        },
+        {
+            "id": 1019899,
+            "voter": "arian1",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "928099862895377",
+            "rshares": 201580361,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T20:36:12",
+            "num_changes": -1
+        },
+        {
+            "id": 1009222,
+            "voter": "antino",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "577106937499314",
+            "rshares": 125329863,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:55:57",
+            "num_changes": -1
+        },
+        {
+            "id": 1036843,
+            "voter": "mrrobot",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": 0,
+            "rshares": -1073621806,
+            "vote_percent": -10000,
+            "last_update": "2016-07-25T02:13:09",
+            "num_changes": -1
+        },
+        {
+            "id": 1009251,
+            "voter": "greenggc",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "335654507428219",
+            "rshares": 72897437,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:56:21",
+            "num_changes": -1
+        },
+        {
+            "id": 1009129,
+            "voter": "basilisk",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "220961721236518",
+            "rshares": 47975555,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:33",
+            "num_changes": -1
+        },
+        {
+            "id": 1009127,
+            "voter": "jpy",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "143307780795141",
+            "rshares": 31114595,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:30",
+            "num_changes": -1
+        },
+        {
+            "id": 1009143,
+            "voter": "aud",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "155232520602848",
+            "rshares": 33707417,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:45",
+            "num_changes": -1
+        },
+        {
+            "id": 1009152,
+            "voter": "nzd",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "202988781601736",
+            "rshares": 44078823,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:51",
+            "num_changes": -1
+        },
+        {
+            "id": 1009132,
+            "voter": "gaming",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "197019079284514",
+            "rshares": 42778061,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:36",
+            "num_changes": -1
+        },
+        {
+            "id": 1009139,
+            "voter": "fiction",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "226840883735348",
+            "rshares": 49255541,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:42",
+            "num_changes": -1
+        },
+        {
+            "id": 1009157,
+            "voter": "kitchen",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "226812489297147",
+            "rshares": 49254543,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:57",
+            "num_changes": -1
+        },
+        {
+            "id": 1009154,
+            "voter": "vogue",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "238751504226267",
+            "rshares": 51845907,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:54",
+            "num_changes": -1
+        },
+        {
+            "id": 1009137,
+            "voter": "athletes",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "232756730610835",
+            "rshares": 50538830,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:39",
+            "num_changes": -1
+        },
+        {
+            "id": 1009147,
+            "voter": "architecture",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "143224079345927",
+            "rshares": 31100390,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:54:48",
+            "num_changes": -1
+        },
+        {
+            "id": 1006609,
+            "voter": "sharon",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "1930127299213",
+            "rshares": 17937789,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:20:39",
+            "num_changes": -1
+        },
+        {
+            "id": 1006605,
+            "voter": "lillianjones",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "2557201200699",
+            "rshares": 25593390,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:20:36",
+            "num_changes": -1
+        },
+        {
+            "id": 1006561,
+            "voter": "kental",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": 0,
+            "rshares": 55121187,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:19:57",
+            "num_changes": -1
+        },
+        {
+            "id": 1010055,
+            "voter": "miketr",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "83982871266768",
+            "rshares": 18239813,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T18:07:18",
+            "num_changes": -1
+        },
+        {
+            "id": 1006611,
+            "voter": "bison015",
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+            "weight": "3521535165912",
+            "rshares": 32728077,
+            "vote_percent": 10000,
+            "last_update": "2016-07-24T17:20:39",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/find_votes/all_data.tavern.yaml b/hivemind/tavern/database_api_patterns/find_votes/all_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9f3cff49a7ceea2e9c2f72459b3adfc24fec7ecd
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/find_votes/all_data.tavern.yaml
@@ -0,0 +1,32 @@
+---
+test_name: Hivemind database_api.find_votes all data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.find_votes all data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.find_votes"
+        params:
+          {
+            "author": "kental",
+            "permlink": "hi-steem-my-russian-trip-on-the-bike-big-party-in-moscow-tour-of-moscow-by-slava",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "all_data"
+          directory: "database_api_patterns/find_votes"
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..e45c4650c2082f367b16c128a14159f1455b4256
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 3343005,
+            "voter": "winstonwolfe",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "861294373426438",
+            "rshares": "8656137777",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:51:03",
+            "num_changes": -1
+        },
+        {
+            "id": 3342451,
+            "voter": "happyphoenix",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "62433843229167",
+            "rshares": 737544850,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:38:18",
+            "num_changes": -1
+        },
+        {
+            "id": 3342235,
+            "voter": "curator",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "181113788939196",
+            "rshares": 672065480,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:33:48",
+            "num_changes": -1
+        },
+        {
+            "id": 3341523,
+            "voter": "dirty.hera",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "308139772097377",
+            "rshares": 1666197673,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:19:48",
+            "num_changes": -1
+        },
+        {
+            "id": 3341256,
+            "voter": "gomeravibz",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "1695116440663136",
+            "rshares": "45913763443",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:14:30",
+            "num_changes": -1
+        },
+        {
+            "id": 3342963,
+            "voter": "nekromarinist",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "538001334195297",
+            "rshares": "5388352911",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:49:51",
+            "num_changes": -1
+        },
+        {
+            "id": 3343754,
+            "voter": "allasyummyfood",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "2802215769731967",
+            "rshares": "29066230989",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:11:33",
+            "num_changes": -1
+        },
+        {
+            "id": 3351018,
+            "voter": "felixxx",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "650047031947827",
+            "rshares": "11626372889",
+            "vote_percent": 10000,
+            "last_update": "2016-08-26T00:54:48",
+            "num_changes": -1
+        },
+        {
+            "id": 3344113,
+            "voter": "yng-entrepreneur",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "1853467546566796",
+            "rshares": "19752627093",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:17:00",
+            "num_changes": -1
+        },
+        {
+            "id": 3341826,
+            "voter": "laoyao",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "4286839674777575",
+            "rshares": "21674528091",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:27:21",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cc2b9959c31c1bac0066a03b12f4f48094500a58
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_all_good_data.tavern.yaml
@@ -0,0 +1,33 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" all good data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" all good data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["roelandp", "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours", "winstonwolfe"],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_comment_voter_all_good_data"
+          directory: "database_api_patterns/list_votes"
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..4629880d1391172610714f56a9960fd0c9182ea9
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 9,
+            "voter": "dantheman",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": "32866333630",
+            "rshares": 375241,
+            "vote_percent": 100,
+            "last_update": "2016-04-07T19:15:36",
+            "num_changes": -1
+        },
+        {
+            "id": 4,
+            "voter": "mr11acdee",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": "876019385955",
+            "rshares": 886132,
+            "vote_percent": 10000,
+            "last_update": "2016-04-06T19:29:03",
+            "num_changes": -1
+        },
+        {
+            "id": 0,
+            "voter": "steemit78",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": "5100000000",
+            "rshares": 5100,
+            "vote_percent": 10000,
+            "last_update": "2016-03-30T20:13:00",
+            "num_changes": -1
+        },
+        {
+            "id": 88,
+            "voter": "anonymous",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": "312616340416",
+            "rshares": 1259167,
+            "vote_percent": 10000,
+            "last_update": "2016-04-09T17:34:36",
+            "num_changes": -1
+        },
+        {
+            "id": 257,
+            "voter": "hello",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 3369765102,
+            "rshares": 318519,
+            "vote_percent": 10000,
+            "last_update": "2016-04-15T10:12:36",
+            "num_changes": -1
+        },
+        {
+            "id": 255,
+            "voter": "world",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 472619298,
+            "rshares": 153384,
+            "vote_percent": 10000,
+            "last_update": "2016-04-15T10:12:30",
+            "num_changes": -1
+        },
+        {
+            "id": 316,
+            "voter": "ned",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": -936400,
+            "vote_percent": -100,
+            "last_update": "2016-04-16T17:12:54",
+            "num_changes": -1
+        },
+        {
+            "id": 258,
+            "voter": "fufubar1",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 21052793,
+            "rshares": 59412,
+            "vote_percent": 10000,
+            "last_update": "2016-04-15T10:12:39",
+            "num_changes": -1
+        },
+        {
+            "id": 256,
+            "voter": "anonymous1",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 437001,
+            "rshares": 14997,
+            "vote_percent": 10000,
+            "last_update": "2016-04-15T10:12:33",
+            "num_changes": -1
+        },
+        {
+            "id": 6,
+            "voter": "red",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 3754,
+            "rshares": 1441,
+            "vote_percent": 100,
+            "last_update": "2016-04-07T14:55:15",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c8fffafe41475d0fe7728165b36f355db103903c
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_no_data.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" no data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" no data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "", ""],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_comment_voter_no_data"
+          directory: "database_api_patterns/list_votes"
+
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fbab7755481aa58f32b62b8b0f0a8bf1674b826
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 3341364,
+            "voter": "pickoum",
+            "author": "roelandp",
+            "permlink": "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours",
+            "weight": "11168221241042",
+            "rshares": 67807559,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T21:16:24",
+            "num_changes": -1
+        },
+        {
+            "id": 3397159,
+            "voter": "pfunk",
+            "author": "anxietymaven",
+            "permlink": "re-adm-re-anxietymaven-ask-yourself-one-question-fuck-steemit-or-nah-20160825t211407406z",
+            "weight": 0,
+            "rshares": -742966944841,
+            "vote_percent": -10000,
+            "last_update": "2016-08-26T22:06:21",
+            "num_changes": 0
+        },
+        {
+            "id": 3344706,
+            "voter": "boy",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "6006017962432724",
+            "rshares": 2476122539,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:54",
+            "num_changes": -1
+        },
+        {
+            "id": 3344694,
+            "voter": "bue-witness",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "7417167962646132",
+            "rshares": 3005691694,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:45",
+            "num_changes": -1
+        },
+        {
+            "id": 3344711,
+            "voter": "bunny",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "1350783817158092",
+            "rshares": 557353091,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:57",
+            "num_changes": -1
+        },
+        {
+            "id": 3344696,
+            "voter": "bue",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "104552198157919482",
+            "rshares": "42722553918",
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:48",
+            "num_changes": -1
+        },
+        {
+            "id": 3344699,
+            "voter": "mini",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "3221828527667312",
+            "rshares": 1327119432,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:48",
+            "num_changes": -1
+        },
+        {
+            "id": 3344712,
+            "voter": "moon",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "414011598841308",
+            "rshares": 170849766,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:29:00",
+            "num_changes": -1
+        },
+        {
+            "id": 3344702,
+            "voter": "healthcare",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "1207918840148852",
+            "rshares": 497724578,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:51",
+            "num_changes": -1
+        },
+        {
+            "id": 3344709,
+            "voter": "daniel.pan",
+            "author": "jamielefay",
+            "permlink": "ahe-ey-sky-falling-an-original-novel-part-1-audiobook",
+            "weight": "1851065537354896",
+            "rshares": 763593782,
+            "vote_percent": 10000,
+            "last_update": "2016-08-25T22:28:54",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2aa100117ed001f36b9c50a1a27212061dc39b80
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_one_before_last.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" one before last voter
+
+marks:
+  - patterntest
+  - xfail # only first is correct, rest is random
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" one before last voter
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["roelandp", "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours", "pickoum"],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_comment_voter_one_before_last"
+          directory: "database_api_patterns/list_votes"
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..f938989ba76b7d5af7b66bb35b8a0aad608df070
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 603086,
+            "voter": "curator",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 95219365,
+            "vote_percent": 10000,
+            "last_update": "2016-07-19T04:40:30",
+            "num_changes": -1
+        },
+        {
+            "id": 1614263,
+            "voter": "dubovoy",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 232295871,
+            "vote_percent": 10000,
+            "last_update": "2016-07-31T19:55:21",
+            "num_changes": 0
+        },
+        {
+            "id": 4098784,
+            "voter": "solos",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 0,
+            "vote_percent": 10000,
+            "last_update": "2016-09-09T15:34:36",
+            "num_changes": 0
+        },
+        {
+            "id": 650424,
+            "voter": "creatorgalaxy",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 96945805,
+            "vote_percent": 10000,
+            "last_update": "2016-07-19T20:29:33",
+            "num_changes": -1
+        },
+        {
+            "id": 776832,
+            "voter": "trigonice29",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 99813231,
+            "vote_percent": 10000,
+            "last_update": "2016-07-21T12:24:27",
+            "num_changes": -1
+        },
+        {
+            "id": 3479202,
+            "voter": "blysards",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 0,
+            "vote_percent": 10000,
+            "last_update": "2016-08-28T16:49:57",
+            "num_changes": 0
+        },
+        {
+            "id": 2783362,
+            "voter": "uwe69",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 3721016208,
+            "vote_percent": 10000,
+            "last_update": "2016-08-16T10:07:39",
+            "num_changes": 0
+        },
+        {
+            "id": 911514,
+            "voter": "nigmat",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": 1279854,
+            "vote_percent": 10000,
+            "last_update": "2016-07-23T13:32:36",
+            "num_changes": -1
+        },
+        {
+            "id": 2217163,
+            "voter": "magicmonk",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": "13974353753",
+            "vote_percent": 10000,
+            "last_update": "2016-08-07T05:23:48",
+            "num_changes": 0
+        },
+        {
+            "id": 2633913,
+            "voter": "satoshifpv",
+            "author": "steemit",
+            "permlink": "firstpost",
+            "weight": 0,
+            "rshares": "4968585456",
+            "vote_percent": 10000,
+            "last_update": "2016-08-13T15:16:36",
+            "num_changes": 0
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b5e27d27777f68ebdddf48c10b742a4a8db55af9
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_comment_voter_only_voter.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_comment_voter" only voter
+
+marks:
+  - patterntest
+  - xfail # wrong output, shows first post votes
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" only voter
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "", "winstonwolfe"],
+            "limit": 10,
+            "order": "by_comment_voter",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_comment_voter_only_voter"
+          directory: "database_api_patterns/list_votes"
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..d563d841f6dd5d77bff0d04f0ec0bff099abc832
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 54513,
+            "voter": "nxt2",
+            "author": "satoshi",
+            "permlink": "bulk-generate-privkeys",
+            "weight": 287703877,
+            "rshares": "4800000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:52:00",
+            "num_changes": -1
+        },
+        {
+            "id": 54508,
+            "voter": "nxt2",
+            "author": "au1nethyb1",
+            "permlink": "reducing-friction-for-critical-mass-adoption-of-steemit",
+            "weight": 4,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:27",
+            "num_changes": -1
+        },
+        {
+            "id": 54511,
+            "voter": "nxt2",
+            "author": "blocktrades",
+            "permlink": "-blocktrades-adds-support-for-directly-buyingselling-steem",
+            "weight": 1,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:48",
+            "num_changes": -1
+        },
+        {
+            "id": 54512,
+            "voter": "nxt2",
+            "author": "nextgencrypto",
+            "permlink": "request-for-proposal-steem-wordpress-plugin",
+            "weight": 2,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:51:15",
+            "num_changes": -1
+        },
+        {
+            "id": 54509,
+            "voter": "nxt2",
+            "author": "dan",
+            "permlink": "is-the-dao-going-to-be-doa",
+            "weight": 3,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:36",
+            "num_changes": -1
+        },
+        {
+            "id": 54507,
+            "voter": "nxt2",
+            "author": "judyhopps",
+            "permlink": "hi-i-googled-something-and-ended-up-here",
+            "weight": 17,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:03",
+            "num_changes": -1
+        },
+        {
+            "id": 54504,
+            "voter": "nxt2",
+            "author": "clains",
+            "permlink": "hello-world-my-name-is-clains",
+            "weight": 9,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:18",
+            "num_changes": -1
+        },
+        {
+            "id": 54505,
+            "voter": "nxt2",
+            "author": "smooth",
+            "permlink": "voting-is-a-popularity-contest",
+            "weight": 12,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:27",
+            "num_changes": -1
+        },
+        {
+            "id": 54506,
+            "voter": "nxt2",
+            "author": "bleepcoin",
+            "permlink": "hi-im-ollie",
+            "weight": 71,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:30",
+            "num_changes": -1
+        },
+        {
+            "id": 54502,
+            "voter": "nxt2",
+            "author": "donkeypong",
+            "permlink": "my-name-is-ziggy-aka-donkeypongs-companion",
+            "weight": 61,
+            "rshares": "5100000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:12",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5e966749603a3d08100df86aea0b0c5fd51b2039
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_author_permlink.tavern.yaml
@@ -0,0 +1,34 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_voter_comment" author + permlink
+
+marks:
+  - patterntest
+  - xfail # show "voter": "nxt2" votes, not connected with author and permlink (like no data)
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_comment_voter" author + permlink
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "roelandp", "tldr-an-exploration-in-steem-botting-what-i-learned-since-it-s-inception-and-downfall-over-the-course-of-20-hours"],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_voter_comment_author_permlink"
+          directory: "database_api_patterns/list_votes"
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..d563d841f6dd5d77bff0d04f0ec0bff099abc832
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 54513,
+            "voter": "nxt2",
+            "author": "satoshi",
+            "permlink": "bulk-generate-privkeys",
+            "weight": 287703877,
+            "rshares": "4800000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:52:00",
+            "num_changes": -1
+        },
+        {
+            "id": 54508,
+            "voter": "nxt2",
+            "author": "au1nethyb1",
+            "permlink": "reducing-friction-for-critical-mass-adoption-of-steemit",
+            "weight": 4,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:27",
+            "num_changes": -1
+        },
+        {
+            "id": 54511,
+            "voter": "nxt2",
+            "author": "blocktrades",
+            "permlink": "-blocktrades-adds-support-for-directly-buyingselling-steem",
+            "weight": 1,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:48",
+            "num_changes": -1
+        },
+        {
+            "id": 54512,
+            "voter": "nxt2",
+            "author": "nextgencrypto",
+            "permlink": "request-for-proposal-steem-wordpress-plugin",
+            "weight": 2,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:51:15",
+            "num_changes": -1
+        },
+        {
+            "id": 54509,
+            "voter": "nxt2",
+            "author": "dan",
+            "permlink": "is-the-dao-going-to-be-doa",
+            "weight": 3,
+            "rshares": "4900000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:36",
+            "num_changes": -1
+        },
+        {
+            "id": 54507,
+            "voter": "nxt2",
+            "author": "judyhopps",
+            "permlink": "hi-i-googled-something-and-ended-up-here",
+            "weight": 17,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:50:03",
+            "num_changes": -1
+        },
+        {
+            "id": 54504,
+            "voter": "nxt2",
+            "author": "clains",
+            "permlink": "hello-world-my-name-is-clains",
+            "weight": 9,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:18",
+            "num_changes": -1
+        },
+        {
+            "id": 54505,
+            "voter": "nxt2",
+            "author": "smooth",
+            "permlink": "voting-is-a-popularity-contest",
+            "weight": 12,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:27",
+            "num_changes": -1
+        },
+        {
+            "id": 54506,
+            "voter": "nxt2",
+            "author": "bleepcoin",
+            "permlink": "hi-im-ollie",
+            "weight": 71,
+            "rshares": "5000000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:30",
+            "num_changes": -1
+        },
+        {
+            "id": 54502,
+            "voter": "nxt2",
+            "author": "donkeypong",
+            "permlink": "my-name-is-ziggy-aka-donkeypongs-companion",
+            "weight": 61,
+            "rshares": "5100000000",
+            "vote_percent": 10000,
+            "last_update": "2016-06-05T06:48:12",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..859a30b5a8c2b07e65133f5e17b32947da670ce6
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_no_data.tavern.yaml
@@ -0,0 +1,33 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_voter_comment" no data
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_voter_comment" no data
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["", "", ""],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_voter_comment_no_data"
+          directory: "database_api_patterns/list_votes"
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.pat.json b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.pat.json
new file mode 100644
index 0000000000000000000000000000000000000000..8d5069f0c5f70aff8fd6bac1ae3a67139ddc9e45
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.pat.json
@@ -0,0 +1,114 @@
+{
+    "votes": [
+        {
+            "id": 4468,
+            "voter": "bunny",
+            "author": "wackou",
+            "permlink": "wackou-witness-post",
+            "weight": 27,
+            "rshares": 3782373700,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:20:06",
+            "num_changes": -1
+        },
+        {
+            "id": 107,
+            "voter": "bunny",
+            "author": "bue-witness",
+            "permlink": "bue-witness-post",
+            "weight": 5,
+            "rshares": 206,
+            "vote_percent": 10000,
+            "last_update": "2016-04-10T15:31:15",
+            "num_changes": -1
+        },
+        {
+            "id": 193,
+            "voter": "bunny",
+            "author": "boy",
+            "permlink": "news",
+            "weight": 41823962,
+            "rshares": 3936,
+            "vote_percent": 10000,
+            "last_update": "2016-04-13T18:12:15",
+            "num_changes": -1
+        },
+        {
+            "id": 169,
+            "voter": "bunny",
+            "author": "bue",
+            "permlink": "news",
+            "weight": 13204514,
+            "rshares": 3936,
+            "vote_percent": 10000,
+            "last_update": "2016-04-13T12:09:39",
+            "num_changes": -1
+        },
+        {
+            "id": 4460,
+            "voter": "bunny",
+            "author": "pop",
+            "permlink": "china",
+            "weight": 94422,
+            "rshares": 3859565000,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:16:42",
+            "num_changes": -1
+        },
+        {
+            "id": 4459,
+            "voter": "bunny",
+            "author": "pop",
+            "permlink": "taiwanese",
+            "weight": 79128,
+            "rshares": 3936756300,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:16:39",
+            "num_changes": -1
+        },
+        {
+            "id": 4462,
+            "voter": "bunny",
+            "author": "ice",
+            "permlink": "taiwan",
+            "weight": 44360,
+            "rshares": 3859565000,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:16:48",
+            "num_changes": -1
+        },
+        {
+            "id": 11966,
+            "voter": "bunny",
+            "author": "pharesim",
+            "permlink": "witness-post",
+            "weight": 3,
+            "rshares": 3627991100,
+            "vote_percent": 10000,
+            "last_update": "2016-08-27T00:39:00",
+            "num_changes": -1
+        },
+        {
+            "id": 4495,
+            "voter": "bunny",
+            "author": "silver",
+            "permlink": "panama-papers",
+            "weight": 6663372,
+            "rshares": 3319225900,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:21:57",
+            "num_changes": -1
+        },
+        {
+            "id": 4480,
+            "voter": "bunny",
+            "author": "dele-puppy",
+            "permlink": "dele-puppy-witness-thread",
+            "weight": 2464,
+            "rshares": 3550799800,
+            "vote_percent": 10000,
+            "last_update": "2016-05-04T05:20:54",
+            "num_changes": -1
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.tavern.yaml b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.tavern.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ab74e942fd98fd496295a6906752dff9c2076147
--- /dev/null
+++ b/hivemind/tavern/database_api_patterns/list_votes/by_voter_comment_voter.tavern.yaml
@@ -0,0 +1,33 @@
+---
+test_name: Hivemind database_api.list_votes patterns test order "by_voter_comment" voter
+
+marks:
+  - patterntest
+
+includes:
+  - !include ../../common.yaml
+
+stages:
+  - name: database_api.list_votes patterns test order "by_voter_comment" voter
+    request:
+      url: "{service.proto:s}://{service.server:s}:{service.port}/"
+      method: POST
+      headers:
+        content-type: application/json
+      json:
+        jsonrpc: "2.0"
+        id: 1
+        method: "database_api.list_votes"
+        params:
+          {
+            "start": ["bunny", "", ""],
+            "limit": 10,
+            "order": "by_voter_comment",
+          }
+    response:
+      status_code: 200
+      verify_response_with:
+        function: validate_response:compare_response_with_pattern
+        extra_kwargs:
+          method: "by_voter_comment_voter"
+          directory: "database_api_patterns/list_votes"