| 1 | # -*- coding: utf-8 -*- |
|---|
| 2 | # |
|---|
| 3 | # Copyright (C) 2016 Cinc |
|---|
| 4 | # All rights reserved. |
|---|
| 5 | # |
|---|
| 6 | # This software is licensed as described in the file COPYING.txt, which |
|---|
| 7 | # you should have received as part of this distribution. |
|---|
| 8 | # |
|---|
| 9 | # Author: Cinc |
|---|
| 10 | # |
|---|
| 11 | |
|---|
| 12 | import unittest |
|---|
| 13 | from trac.test import * |
|---|
| 14 | from ..model import PeerReviewModelProvider |
|---|
| 15 | |
|---|
| 16 | __author__ = 'Cinc' |
|---|
| 17 | __copyright__ = "Copyright 2016" |
|---|
| 18 | __license__ = "BSD" |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | class TestDbInitialUpgrade(unittest.TestCase): |
|---|
| 22 | """Note that this only tests a clean install atm.""" |
|---|
| 23 | |
|---|
| 24 | @classmethod |
|---|
| 25 | def setUpClass(cls): |
|---|
| 26 | cls.env = EnvironmentStub(enable=['trac.*', 'codereview.*']) |
|---|
| 27 | |
|---|
| 28 | @classmethod |
|---|
| 29 | def tearDownClass(cls): |
|---|
| 30 | cls.env.shutdown() |
|---|
| 31 | |
|---|
| 32 | def test_db_init(self): |
|---|
| 33 | # Update database schema |
|---|
| 34 | self.assertIsNone(PeerReviewModelProvider(self.env).environment_created()) |
|---|
| 35 | # Check for correct versions |
|---|
| 36 | db = self.env.get_read_db() |
|---|
| 37 | cursor = db.cursor() |
|---|
| 38 | tables = [ |
|---|
| 39 | ['peerreview_version', 6], |
|---|
| 40 | ['peerreviewfile_version', 5], |
|---|
| 41 | ['peerreviewcomment_version', 6], |
|---|
| 42 | ['peerreviewer_version', 5], |
|---|
| 43 | ['peerreviewdata_version', 3], |
|---|
| 44 | ] |
|---|
| 45 | for name, ver in tables: |
|---|
| 46 | cursor.execute("select value FROM system WHERE name = %s", (name,)) |
|---|
| 47 | row = cursor.fetchone() |
|---|
| 48 | self.assertEqual(ver, int(row[0])) |
|---|
| 49 | # Check row len |
|---|
| 50 | table_len = [ |
|---|
| 51 | ['peerreview', 10], |
|---|
| 52 | ['peerreviewfile', 11], |
|---|
| 53 | ['peerreviewcomment', 11], |
|---|
| 54 | ['peerreviewer', 5], |
|---|
| 55 | ['peerreviewdata', 9], |
|---|
| 56 | ] |
|---|
| 57 | @self.env.with_transaction() |
|---|
| 58 | def do_insert(db): |
|---|
| 59 | cursor = db.cursor() |
|---|
| 60 | cursor.execute("INSERT INTO peerreview (owner) VALUES('tester'); ") |
|---|
| 61 | cursor.execute("INSERT INTO peerreviewer (review_id) VALUES(1); ") |
|---|
| 62 | cursor.execute("INSERT INTO peerreviewfile (path) VALUES('/foo/bar'); ") |
|---|
| 63 | cursor.execute("INSERT INTO peerreviewcomment (author) VALUES('tester'); ") |
|---|
| 64 | cursor.execute("INSERT INTO peerreviewdata (review_id) VALUES(1); ") |
|---|
| 65 | for name, row_len in table_len: |
|---|
| 66 | cursor.execute("SELECT * FROM %s " % name) |
|---|
| 67 | row = cursor.fetchone() |
|---|
| 68 | self.assertEqual(row_len, len(row)) |
|---|
| 69 | |
|---|
| 70 | |
|---|
| 71 | def db_suite(): |
|---|
| 72 | suite = unittest.TestSuite() |
|---|
| 73 | |
|---|
| 74 | suite.addTest(unittest.makeSuite(TestDbInitialUpgrade)) |
|---|
| 75 | |
|---|
| 76 | return suite |
|---|