def test_limit_nested_comments(self): """Transform previously A -> B -> C comment nesting to A -> B, A -> C""" tree = {1: None, 2: None, 3: 2, 4: 3, 7: 3, 5: 2, 6: None} with sqlite3.connect(self.path) as con: con.execute("PRAGMA user_version = 2") con.execute("CREATE TABLE threads (" " id INTEGER PRIMARY KEY," " uri VARCHAR UNIQUE," " title VARCHAR)") con.execute("CREATE TABLE comments (" " tid REFERENCES threads(id)," " id INTEGER PRIMARY KEY," " parent INTEGER," " created FLOAT NOT NULL, modified FLOAT," " text VARCHAR, email VARCHAR, website VARCHAR," " mode INTEGER," " remote_addr VARCHAR," " likes INTEGER DEFAULT 0," " dislikes INTEGER DEFAULT 0," " voters BLOB)") con.execute("INSERT INTO threads (uri, title) VALUES (?, ?)", ("/", "Test")) for (id, parent) in iteritems(tree): con.execute( "INSERT INTO comments (" " id, parent, created)" "VALUEs (?, ?, ?)", (id, parent, id)) conf = config.new( {"general": { "dbpath": "/dev/null", "max-age": "1h" }}) SQLite3(self.path, conf) flattened = list( iteritems({ 1: None, 2: None, 3: 2, 4: 2, 5: 2, 6: None, 7: 2 })) with sqlite3.connect(self.path) as con: rv = con.execute( "SELECT id, parent FROM comments ORDER BY created").fetchall() self.assertEqual(flattened, rv)
def test_limit_nested_comments(self): tree = { 1: None, 2: None, 3: 2, 4: 3, 7: 3, 5: 2, 6: None } with sqlite3.connect(self.path) as con: con.execute("PRAGMA user_version = 2") con.execute("CREATE TABLE threads (" " id INTEGER PRIMARY KEY," " uri VARCHAR UNIQUE," " title VARCHAR)") con.execute("CREATE TABLE comments (" " tid REFERENCES threads(id)," " id INTEGER PRIMARY KEY," " parent INTEGER," " created FLOAT NOT NULL, modified FLOAT," " block VARCHAR, edit VARCHAR," " text VARCHAR, email VARCHAR, website VARCHAR," " mode INTEGER," " remote_addr VARCHAR," " likes INTEGER DEFAULT 0," " voters BLOB)") con.execute("INSERT INTO threads (uri, title) VALUES (?, ?)", ("/", "Test")) for (id, parent) in iteritems(tree): con.execute("INSERT INTO comments (" " tid, parent, created)" "VALUEs (?, ?, ?)", (id, parent, id)) conf = config.new({ "general": { "dbpath": "/dev/null", "max-age": "1h" } }) SQLite3(self.path, conf) flattened = [ (1, None), (2, None), (3, 2), (4, 2), (5, 2), (6, None), (7, 2) ] with sqlite3.connect(self.path) as con: rv = con.execute("SELECT id, parent FROM comments ORDER BY created").fetchall() self.assertEqual(flattened, rv)
def testMultipleCounts(self): expected = {'a': 1, 'b': 2, 'c': 0} for uri, count in iteritems(expected): for _ in range(count): self.post('/new?uri=%s' % uri, data=json.dumps({"text": "..."})) rv = self.post('/count', data=json.dumps(list(expected.keys()))) self.assertEqual(loads(rv.data), list(expected.values()))
def test_limit_nested_comments(self): tree = {1: None, 2: None, 3: 2, 4: 3, 7: 3, 5: 2, 6: None} with sqlite3.connect(self.path) as con: con.execute("PRAGMA user_version = 2") con.execute("CREATE TABLE threads (" " id INTEGER PRIMARY KEY," " uri VARCHAR UNIQUE," " title VARCHAR)") con.execute("CREATE TABLE comments (" " tid REFERENCES threads(id)," " id INTEGER PRIMARY KEY," " parent INTEGER," " created FLOAT NOT NULL, modified FLOAT," " text VARCHAR, email VARCHAR, website VARCHAR," " mode INTEGER," " remote_addr VARCHAR," " likes INTEGER DEFAULT 0," " dislikes INTEGER DEFAULT 0," " voters BLOB)") con.execute("INSERT INTO threads (uri, title) VALUES (?, ?)", ("/", "Test")) for (id, parent) in iteritems(tree): con.execute( "INSERT INTO comments (" " tid, parent, created)" "VALUEs (?, ?, ?)", (id, parent, id)) conf = Config.load(None) SQLite3(self.path, conf) flattened = [(1, None), (2, None), (3, 2), (4, 2), (5, 2), (6, None), (7, 2)] with sqlite3.connect(self.path) as con: rv = con.execute( "SELECT id, parent FROM comments ORDER BY created").fetchall() self.assertEqual(flattened, rv)