diff --git a/tests/database_test.py b/tests/database_test.py
index 2fbe3c8..0c82e4a 100644
--- a/tests/database_test.py
+++ b/tests/database_test.py
@@ -7,7 +7,6 @@ from faker.providers import misc
 import server.conf
 import server.database as db
 import sqlite3
-import json
 import faker
 from random import randint
 
@@ -129,81 +128,124 @@ class TestCommentCreation(DatabaseTestCase):
         self.assertEqual(reply['parent_id'], comment['comment_id'])
         self.assertEqual(reply['claim_id'], comment['claim_id'])
 
-    def testInvalidUsername(self):
-        self.assertRaises(
-            AssertionError,
-            self.db.create_comment,
+    def testUsernameVariations(self):
+        invalid_comment = self.db.create_comment(
             claim_id=self.claimId,
             channel_name='$#(@#$@#$',
             channel_id='529357c3422c6046d3fec76be2358001ba224b23',
             comment='this is an invalid username'
         )
-        comment = self.db.create_comment(
+        self.assertIsNone(invalid_comment)
+        valid_username = self.db.create_comment(
             claim_id=self.claimId,
             channel_name='@' + 'a'*255,
             channel_id='529357c3422c6046d3fec76be2358001ba224b23',
             comment='this is a valid username'
         )
-        self.assertIsNotNone(comment)
-        self.assertRaises(
-            AssertionError,
-            self.db.create_comment,
+        self.assertIsNotNone(valid_username)
+
+        lengthy_username = self.db.create_comment(
             claim_id=self.claimId,
             channel_name='@' + 'a'*256,
             channel_id='529357c3422c6046d3fec76be2358001ba224b23',
             comment='this username is too long'
         )
+        self.assertIsNone(lengthy_username)
         comment = self.db.create_comment(
             claim_id=self.claimId,
             channel_name='',
             channel_id='529357c3422c6046d3fec76be2358001ba224b23',
-            comment='this username will default to anonymous'
+            comment='this username should not default to anonymous'
         )
-        self.assertIsNotNone(comment)
-        self.assertEqual(comment['channel_name'], server.conf.anonymous['channel_name'])
-        self.assertEqual(comment['channel_id'], server.conf.anonymous['channel_id'])
-        self.assertRaises(
-            AssertionError,
-            self.db.create_comment,
+        self.assertIsNone(comment)
+        short_username = self.db.create_comment(
             claim_id=self.claimId,
             channel_name='@',
             channel_id='529357c3422c6046d3fec76be2358001ba224b23',
             comment='this username is too short'
         )
+        self.assertIsNone(short_username)
 
 
 class PopulatedDatabaseTest(DatabaseTestCase):
+    def setUp(self) -> None:
+        super().setUp()
 
-    def testInsertComments(self):
-        success, total = 0, 0
-        top_comments = generate_top_comments()
+    def test01InsertRandomComments(self):
+        top_comments, claim_ids = generate_top_comments_random()
+        total = 0
+        success = 0
         for _, comments in top_comments.items():
             for i, comment in enumerate(comments):
-                result = self.db.create_comment(**comment)
-                if result:
-                    success += 1
-                del comment
-                comments[i] = result
-
-            total += len(comments)
+                with self.subTest(comment=comment):
+                    result = self.db.create_comment(**comment)
+                    if result:
+                        success += 1
+                    comments[i] = result
+                    del comment
+                total += len(comments)
         self.assertLessEqual(success, total)
         self.assertGreater(success, 0)
         success = 0
-        for reply in generate_replies(top_comments):
+        for reply in generate_replies_random(top_comments):
             reply_id = self.db.create_comment(**reply)
             if reply_id:
                 success += 1
         self.assertGreater(success, 0)
         self.assertLess(success, total)
+        del top_comments
+        del claim_ids
+
+    def test02GenerateAndListComments(self):
+        top_comments, claim_ids = generate_top_comments()
+        total, success = 0, 0
+        for _, comments in top_comments.items():
+            for i, comment in enumerate(comments):
+                result = self.db.create_comment(**comment)
+                if result:
+                    success += 1
+                comments[i] = result
+                del comment
+            total += len(comments)
+        self.assertEqual(total, success)
+        self.assertGreater(total, 0)
+        success, total = 0, 0
+        for reply in generate_replies(top_comments):
+            self.db.create_comment(**reply)
+        self.assertEqual(success, total)
+        for claim_id in claim_ids:
+            comments_ids = self.db.get_comment_ids(claim_id)
+            with self.subTest(comments_ids=comments_ids):
+                self.assertIs(type(comments_ids), list)
+                self.assertGreaterEqual(len(comments_ids), 0)
+                self.assertLessEqual(len(comments_ids), 50)
+                replies = self.db.get_comments_by_id(comments_ids)
+                self.assertLessEqual(len(replies), 50)
+                self.assertEqual(len(replies), len(comments_ids))
 
 
 def generate_replies(top_comments):
+    return [{
+        'claim_id': comment['claim_id'],
+        'parent_id': comment['comment_id'],
+        'comment': ' '.join(fake.text(max_nb_chars=randint(50, 500))),
+        'channel_name': '@' + fake.user_name(),
+        'channel_id': fake.sha1(),
+        'signature': fake.uuid4()
+    }
+        for claim, comments in top_comments.items()
+        for i, comment in enumerate(comments)
+        if comment  # ensures comment is non-null
+    ]
+
+
+def generate_replies_random(top_comments):
     return [{
         'claim_id': comment['claim_id'],
         'parent_id': comment['comment_id'],
         'comment': ' '.join(fake.text(max_nb_chars=randint(50, 2500))),
         'channel_name': '@' + fake.user_name(),
-        'channel_id': fake.sha1() if hash(comment['comment_id']) % 11 == 0 else None,
+        'channel_id': fake.sha1() if hash(comment['comment_id']) % 5 == 0 else '',
         'signature': fake.uuid4() if hash(comment['comment_id']) % 11 == 0 else None
     }
         for claim, comments in top_comments.items()
@@ -217,11 +259,27 @@ def generate_top_comments():
     top_comments = {
         cid: [{
             'claim_id': cid,
-            'comment': ''.join(fake.text(max_nb_chars=randint(50, 2500))),
-            'channel_name': '@' + fake.user_name() if (hash(cid) * i) % 29*i > 0 else None,
-            'channel_id': fake.sha1() if (hash(cid) * i) % 29*i > 0 else None,
-            'signature': fake.uuid4() if (hash(cid) * i) % 29*i > 0 > hash(cid) else None
-        } for i in range(randint(0, hash(cid) % 91))]
+            'comment': ''.join(fake.text(max_nb_chars=randint(50, 500))),
+            'channel_name': '@' + fake.user_name(),
+            'channel_id': fake.sha1(),
+            'signature': fake.uuid4()
+        } for _ in range(100)]
         for cid in claim_ids
     }
-    return top_comments
+    return top_comments, claim_ids
+
+
+def generate_top_comments_random():
+    claim_ids = [fake.sha1() for _ in range(15)]
+    top_comments = {
+        cid: [{
+            'claim_id': cid,
+            'comment': ''.join(fake.text(max_nb_chars=randint(50, 2500))),
+            'channel_name': '@' + fake.user_name() if (hash(cid) * i) % 7 > 0 else '',
+            'channel_id': fake.sha1() if (hash(cid) * i) % 7 > 0 else '',
+            'signature': fake.uuid4() if (hash(cid) * i) % 7 > 0 > hash(cid) else None
+        } for i in range(randint(60, 200))]
+        for cid in claim_ids
+    }
+    return top_comments, claim_ids
+