| 1 | # -*- coding: utf-8 -*- |
|---|
| 2 | # |
|---|
| 3 | # Copyright (C) 2012 Rob Guttman <guttman@alum.mit.edu> |
|---|
| 4 | # All rights reserved. |
|---|
| 5 | # |
|---|
| 6 | # This software is licensed as described in the file COPYING, which |
|---|
| 7 | # you should have received as part of this distribution. |
|---|
| 8 | # |
|---|
| 9 | |
|---|
| 10 | import os |
|---|
| 11 | import sys |
|---|
| 12 | import shutil |
|---|
| 13 | import time |
|---|
| 14 | import unittest |
|---|
| 15 | |
|---|
| 16 | dir = os.path.abspath(os.path.join(os.path.dirname(__file__),'..')) |
|---|
| 17 | if dir not in sys.path: |
|---|
| 18 | sys.path.append(dir) |
|---|
| 19 | from reviewer import Reviewer |
|---|
| 20 | |
|---|
| 21 | """ |
|---|
| 22 | [Wed May 16 12:39:28 root@vookdev:/home/vook/workspace/myrepo] # git log |
|---|
| 23 | commit 82555dc3c5960646e60df09fb33ab288f209a65b |
|---|
| 24 | Author: rob <rob@example.com> |
|---|
| 25 | Date: Wed May 16 11:13:48 2012 -0400 |
|---|
| 26 | |
|---|
| 27 | ref #3: changeset 4 |
|---|
| 28 | |
|---|
| 29 | commit 71cd80944c7c8cdeff9f394b493a372b2b70ebb1 |
|---|
| 30 | Author: rob <rob@example.com> |
|---|
| 31 | Date: Wed May 16 11:10:57 2012 -0400 |
|---|
| 32 | |
|---|
| 33 | ref #2, #3: changeset 3 |
|---|
| 34 | |
|---|
| 35 | commit d57f050a265b303ef1748a26cecb71d9e9ab92b9 |
|---|
| 36 | Author: rob <rob@example.com> |
|---|
| 37 | Date: Wed May 16 11:04:25 2012 -0400 |
|---|
| 38 | |
|---|
| 39 | ref #2: changeset 2 |
|---|
| 40 | |
|---|
| 41 | commit 8bebe6d50698dccb68586042e3e94de4aecba945 |
|---|
| 42 | Author: rob <rob@example.com> |
|---|
| 43 | Date: Wed May 16 10:11:44 2012 -0400 |
|---|
| 44 | |
|---|
| 45 | ref #1: changeset 1 |
|---|
| 46 | |
|---|
| 47 | commit f79ab3734db0e5230dfc93fa7182591fd900bb87 |
|---|
| 48 | Author: rob <rob@example.com> |
|---|
| 49 | Date: Wed May 16 10:08:23 2012 -0400 |
|---|
| 50 | |
|---|
| 51 | initial commit |
|---|
| 52 | """ |
|---|
| 53 | |
|---|
| 54 | class TestReviewer(unittest.TestCase): |
|---|
| 55 | |
|---|
| 56 | def setUp(self): |
|---|
| 57 | testdata_dir = os.path.join(os.path.dirname(__file__),'testdata') |
|---|
| 58 | |
|---|
| 59 | # clean workdir for each test |
|---|
| 60 | workdir = os.path.join('/tmp','reviewer') |
|---|
| 61 | if os.path.exists(workdir): |
|---|
| 62 | shutil.rmtree(workdir) |
|---|
| 63 | os.mkdir(workdir) |
|---|
| 64 | src_file = os.path.join(testdata_dir,'changeset.dev') |
|---|
| 65 | data_file = os.path.join(workdir,'changeset.dev') |
|---|
| 66 | shutil.copy(src_file, data_file) |
|---|
| 67 | |
|---|
| 68 | # instatiate reviewer |
|---|
| 69 | self.reviewer = Reviewer( |
|---|
| 70 | trac_env=os.path.join(testdata_dir,'trac_env'), |
|---|
| 71 | repo_dir=os.path.join(testdata_dir,'myrepo'), |
|---|
| 72 | target_ref="master", |
|---|
| 73 | data_file=data_file) |
|---|
| 74 | |
|---|
| 75 | def test_is_complete__changeset1(self): |
|---|
| 76 | changeset1 = '8bebe6d50698dccb68586042e3e94de4aecba945' |
|---|
| 77 | self.assertTrue(self.reviewer.is_complete(changeset1)) |
|---|
| 78 | |
|---|
| 79 | def test_is_complete__changeset2(self): |
|---|
| 80 | changeset2 = 'd57f050a265b303ef1748a26cecb71d9e9ab92b9' |
|---|
| 81 | self.assertTrue(self.reviewer.is_complete(changeset2)) |
|---|
| 82 | |
|---|
| 83 | def test_is_complete__changeset3(self): |
|---|
| 84 | changeset3 = '71cd80944c7c8cdeff9f394b493a372b2b70ebb1' |
|---|
| 85 | self.assertFalse(self.reviewer.is_complete(changeset3)) |
|---|
| 86 | |
|---|
| 87 | def test_get_next_changeset__initial(self): |
|---|
| 88 | # expect changeset 3 because ticket #2 is last fully reviewed ticket |
|---|
| 89 | actual = self.reviewer.get_next_changeset() # changeset 3 |
|---|
| 90 | expected = 'd57f050a265b303ef1748a26cecb71d9e9ab92b9' |
|---|
| 91 | self.assertEqual(actual,expected) |
|---|
| 92 | self.assertEqual(self.reviewer.get_current_changeset(),expected) |
|---|
| 93 | |
|---|
| 94 | def test_get_next_changeset__initial_no_save(self): |
|---|
| 95 | # expect changeset 3 because ticket #2 is last fully reviewed ticket |
|---|
| 96 | actual = self.reviewer.get_next_changeset(save=False) # changeset 3 |
|---|
| 97 | expected = 'd57f050a265b303ef1748a26cecb71d9e9ab92b9' |
|---|
| 98 | self.assertEqual(actual,expected) |
|---|
| 99 | self.assertNotEqual(self.reviewer.get_current_changeset(),expected) |
|---|
| 100 | |
|---|
| 101 | def test_get_next_changeset__at_next(self): |
|---|
| 102 | data = '{"current": "d57f050a265b303ef1748a26cecb71d9e9ab92b9"}' |
|---|
| 103 | open(self.reviewer.data_file,'w').write(data) |
|---|
| 104 | actual = self.reviewer.get_next_changeset() # changeset 3 |
|---|
| 105 | expected = 'd57f050a265b303ef1748a26cecb71d9e9ab92b9' |
|---|
| 106 | self.assertEqual(actual,expected) |
|---|
| 107 | self.assertEqual(self.reviewer.get_current_changeset(),expected) |
|---|
| 108 | |
|---|
| 109 | def test_get_next_changeset__at_last(self): |
|---|
| 110 | data = '{"current": "82555dc3c5960646e60df09fb33ab288f209a65b"}' |
|---|
| 111 | open(self.reviewer.data_file,'w').write(data) |
|---|
| 112 | expected = self.reviewer.get_next_changeset() # changeset 4 |
|---|
| 113 | self.assertEqual(expected,'82555dc3c5960646e60df09fb33ab288f209a65b') |
|---|
| 114 | |
|---|
| 115 | def test_get_review__initial(self): |
|---|
| 116 | # ensure this method doesn't go away |
|---|
| 117 | expected = '71cd80944c7c8cdeff9f394b493a372b2b70ebb1' |
|---|
| 118 | review = self.reviewer.get_review(expected) |
|---|
| 119 | self.assertEqual(review.changeset,expected) |
|---|
| 120 | |
|---|
| 121 | def test_get_blocking_changeset__initial(self): |
|---|
| 122 | # expect changeset 3 because ticket #2 is last fully reviewed ticket |
|---|
| 123 | actual = self.reviewer.get_blocking_changeset() # changeset 3 |
|---|
| 124 | expected = '71cd80944c7c8cdeff9f394b493a372b2b70ebb1' |
|---|
| 125 | self.assertEqual(actual,expected) |
|---|
| 126 | |
|---|
| 127 | def test_get_blocked_tickets__initial(self): |
|---|
| 128 | actual = self.reviewer.get_blocked_tickets() |
|---|
| 129 | self.assertEqual([t.id for t in actual],[2,3]) |
|---|
| 130 | |
|---|
| 131 | def test_get_blocked_tickets__at_second_changeset(self): |
|---|
| 132 | data = '{"current": "71cd80944c7c8cdeff9f394b493a372b2b70ebb1"}' |
|---|
| 133 | open(self.reviewer.data_file,'w').write(data) |
|---|
| 134 | actual = self.reviewer.get_blocked_tickets() |
|---|
| 135 | self.assertEqual(len(actual),1) |
|---|
| 136 | self.assertEqual(actual[0].id,3) |
|---|
| 137 | expected = time.mktime(time.strptime("Wed May 16 11:13:48 2012","%a %B %d %H:%M:%S %Y")) |
|---|
| 138 | self.assertEqual(actual[0].first_changeset_when,long(expected*1000000)) # changeset 4 |
|---|
| 139 | |
|---|
| 140 | |
|---|
| 141 | if __name__ == '__main__': |
|---|
| 142 | unittest.main() |
|---|