class BuildsTest(TestCase): FAILED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' ANOTHER_PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T10:39:22" /> <property name="cctimestamp" value="20091011173900" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="0 minute(s) 2 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' FAILED_LOG = '''<?xml version="1.0" encoding="UTF-8"?> <cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011201149" /> <property name="lastsuccessfulbuild" value="20091011201149" /> <property name="builddate" value="2009-10-17T14:03:24" /> <property name="cctimestamp" value="20091017220324" /> <property name="label" value="build.18" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091017220324.xml" /> </info> <build time="0 minute(s) 4 second(s)" error="exec error"> <target name="exec"> <task name="echa"> <message priority="error"><![CDATA[Could not execute command: echa with arguments: haha]]></message> </task> </target> </build> </cruisecontrol>''' def setUp(self): self.testutils = TestUtils() self.root = settings.PROJECT_DIR self.failed = Build.from_file(self.testutils.write_to_temp('FAILED_LOG.xml', BuildsTest.FAILED_LOG)) self.passed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('PASSED_LOG_AT_OCT_11.xml', BuildsTest.PASSED_LOG_AT_OCT_11)) self.another_passed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('ANOTHER_PASSED_LOG_AT_OCT_11.xml', BuildsTest.ANOTHER_PASSED_LOG_AT_OCT_11)) self.failed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('FAILED_LOG_AT_OCT_11.xml', BuildsTest.FAILED_LOG_AT_OCT_11)) def tearDown(self): self.testutils.cleantemp() def testShouldGroupTheBuilds(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] grouped_builds = builds.group_by_each_day() self.assertEquals(2, len(grouped_builds)) atime = datetime.strptime("20091011000000", "%Y%m%d%H%M%S") btime = datetime.strptime("20091017000000", "%Y%m%d%H%M%S") self.assertEquals(2, len(grouped_builds[atime].builds)) btime = datetime.strptime("20091017000000", "%Y%m%d%H%M%S") self.assertEquals(1, len(grouped_builds[btime].builds)) def testShouldCalculateThePassCount(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] atime = datetime.strptime("20091011000000", "%Y%m%d%H%M%S") self.assertEquals(2, builds.group_by_each_day()[atime].pass_count()) def testShouldCalculateTheFailCount(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] atime = datetime.strptime("20091017000000", "%Y%m%d%H%M%S") self.assertEquals(0, builds.group_by_each_day()[atime].pass_count()) def testShouldCalculateThePassRate(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] atime = datetime.strptime("20091011000000", "%Y%m%d%H%M%S") self.assertEquals(1, builds.group_by_each_day()[atime].pass_rate()) def testShouldTheBuildsTimes(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] atime = datetime.strptime("20091011000000", "%Y%m%d%H%M%S") values, min, max, max_time = builds.build_times() self.assertEquals(3, len(values)) self.assertEquals (util.datetimeutils.cctimestamp_to_unix_timestamp("20091011173900"), min) self.assertEquals (util.datetimeutils.cctimestamp_to_unix_timestamp("20091017220324"), max) self.assertEquals (60, max_time) def testShouldCalculateTheBuildPerDay(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] values, labels, max_time = builds.per_build_time() self.assertEquals('#1C9E05', values[0]['colour']); self.assertEquals('#1C9E05', values[1]['colour']); self.assertEquals('#FF368D', values[2]['colour']); self.assertEquals(60, values[0]['top']); self.assertEquals(2, values[1]['top']); self.assertEquals(4, values[2]['top']); self.assertEquals('2009-10-11 17:39:22', labels[0]) self.assertEquals('2009-10-11 17:39:00', labels[1]) self.assertEquals('2009-10-17 22:03:24', labels[2]) self.assertEquals(60, max_time); def test_should_calculate_pass_rate_by_day(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] n_days_summary = builds.get_n_days_summary() self.assertEquals('67.0', str(n_days_summary.pass_rate_values()[0]['y'])) def test_should_calculate_total_count(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] self.assertEquals(3, builds.total_count()) def test_should_calculate_pass_count(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] self.assertEquals(2, builds.pass_count()) def test_should_calculate_avg_build_time(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] self.assertEquals('40.67', builds.avg_build_time()) def test_should_return_zero_as_avg_build_time_if_no_builds(self): builds = Builds() self.assertEquals('0', builds.avg_build_time()) def testShouldCalcateAvgRunsPerDay(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed] self.assertEquals('1.5', builds.avg_runs()); def testShouldCalcateAvgRunsPerDay(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.passed_at_oct_11, self.passed_at_oct_11] self.assertEquals('3.00', builds.avg_runs()); def testShouldOnlyKeep2digitAfterPoint(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.failed] self.assertEquals('0.33', str(builds.avg_runs()));
class BuildBreakerTests(TestCase): FAILED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' DID_NOT_FIX_IT_LOG = '''<?xml version="1.0" encoding="UTF-8"?> <cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>13</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>xkf</user> <comment><![CDATA[f****d]]></comment> <revision>13</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011201149" /> <property name="lastsuccessfulbuild" value="20091011201149" /> <property name="builddate" value="2009-10-17T14:03:24" /> <property name="cctimestamp" value="20091017220324" /> <property name="label" value="build.18" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091017220324.xml" /> </info> <build time="0 minute(s) 4 second(s)" error="exec error"> <target name="exec"> <task name="echa"> <message priority="error"><![CDATA[Could not execute command: echa with arguments: haha]]></message> </task> </target> </build> </cruisecontrol>''' FIXED_IT_LOG = '''<cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>12</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>khu</user> <comment><![CDATA[f****d]]></comment> <revision>12</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>13</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>xkf</user> <comment><![CDATA[f****d]]></comment> <revision>13</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>14</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>xkf</user> <comment><![CDATA[f****d]]></comment> <revision>14</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' ANOTHER_PASS = '''<cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>15</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>xkf</user> <comment><![CDATA[f****d]]></comment> <revision>15</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T10:39:22" /> <property name="cctimestamp" value="20091011173900" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="0 minute(s) 2 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' def setUp(self): self.testutils = TestUtils() self.root = settings.PROJECT_DIR self.failed = Build.from_file(self.testutils.write_to_temp('FAILED_LOG.xml', BuildBreakerTests.FAILED_LOG_AT_OCT_11)) self.did_not_fix = Build.from_file(self.testutils.write_to_temp('PASSED_LOG_AT_OCT_11.xml', BuildBreakerTests.DID_NOT_FIX_IT_LOG)) self.fixed_it = Build.from_file(self.testutils.write_to_temp('ANOTHER_PASSED_LOG_AT_OCT_11.xml', BuildBreakerTests.FIXED_IT_LOG)) self.another_pass = Build.from_file(self.testutils.write_to_temp('FAILED_LOG_AT_OCT_11.xml', BuildBreakerTests.ANOTHER_PASS)) def tearDown(self): self.testutils.cleantemp() def test_should_group_the_commitors_based_on_(self): builds = Builds() builds.builds = [self.failed, self.did_not_fix, self.fixed_it, self.another_pass] grouped_commitors = builds.build_breakers() commitor = grouped_commitors.find('xkf') self.assertEquals(2, commitor.passed_count()) self.assertEquals(1, commitor.failed_count()) commitor = grouped_commitors.find('khu') self.assertEquals(0, commitor.passed_count()) self.assertEquals(1, commitor.failed_count())
class BuildsByDayTests(TestCase): FAILED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' ANOTHER_PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T10:39:22" /> <property name="cctimestamp" value="20091011173900" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="0 minute(s) 2 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' FAILED_LOG = '''<?xml version="1.0" encoding="UTF-8"?> <cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011201149" /> <property name="lastsuccessfulbuild" value="20091011201149" /> <property name="builddate" value="2009-10-17T14:03:24" /> <property name="cctimestamp" value="20091017220324" /> <property name="label" value="build.18" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091017220324.xml" /> </info> <build time="0 minute(s) 4 second(s)" error="exec error"> <target name="exec"> <task name="echa"> <message priority="error"><![CDATA[Could not execute command: echa with arguments: haha]]></message> </task> </target> </build> </cruisecontrol>''' def setUp(self): self.testutils = TestUtils() self.root = settings.PROJECT_DIR self.failed = Build.from_file(self.testutils.write_to_temp('FAILED_LOG.xml', BuildsByDayTests.FAILED_LOG)) self.passed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('PASSED_LOG_AT_OCT_11.xml', BuildsByDayTests.PASSED_LOG_AT_OCT_11)) self.another_passed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('ANOTHER_PASSED_LOG_AT_OCT_11.xml', BuildsByDayTests.ANOTHER_PASSED_LOG_AT_OCT_11)) self.failed_at_oct_11 = Build.from_file(self.testutils.write_to_temp('FAILED_LOG_AT_OCT_11.xml', BuildsByDayTests.FAILED_LOG_AT_OCT_11)) def tearDown(self): self.testutils.cleantemp() def test_should_total_runs_by_day(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] n_days_summary = builds.get_n_days_summary(); self.assertEquals(3, n_days_summary.total_runs_values()[0].get('y')) def test_should_return_zero_total_runs_if_no_builds(self): builds = Builds() n_days_summary = builds.get_n_days_summary(); self.assertEquals(0, len(n_days_summary.total_runs_values())) def test_should_passed_runs_by_day(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] n_days_summary = builds.get_n_days_summary(); self.assertEquals(2, n_days_summary.passed_runs_values()[0].get('y')) def test_should_return_zero_if_no_passed_build(self): builds = Builds() builds.builds = [self.failed_at_oct_11] n_days_summary = builds.get_n_days_summary(); self.assertEquals(0, n_days_summary.passed_runs_values()[0].get('y')) def test_should_return_zero_passed_build_if_no_builds(self): builds = Builds() n_days_summary = builds.get_n_days_summary(); self.assertEquals(0, len(n_days_summary.passed_runs_values())) def test_should_passed_runs_by_day(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11, self.failed_at_oct_11] n_days_summary = builds.get_n_days_summary(); self.assertEquals(1, n_days_summary.failed_runs_values()[0].get('y')) def test_should_return_zero_if_no_passed_build(self): builds = Builds() builds.builds = [self.passed_at_oct_11, self.another_passed_at_oct_11] n_days_summary = builds.get_n_days_summary(); self.assertEquals(0, n_days_summary.failed_runs_values()[0].get('y')) def test_should_return_zero_passed_build_if_no_builds(self): builds = Builds() n_days_summary = builds.get_n_days_summary(); self.assertEquals(0, len(n_days_summary.failed_runs_values()))
class ProjectGroupTests(TestCase): FAILED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T09:39:22" /> <property name="cctimestamp" value="20091011173922" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="1 minute(s) 0 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' ANOTHER_PASSED_LOG_AT_OCT_11 = '''<cruisecontrol> <modifications /> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011000000" /> <property name="lastsuccessfulbuild" value="20091011000000" /> <property name="builddate" value="2009-10-11T10:39:22" /> <property name="cctimestamp" value="20091011173900" /> <property name="label" value="build.1" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091011173922Lbuild.1.xml" /> </info> <build time="0 minute(s) 2 second(s)"> <target name="exec"> <task name="echo"> <message priority="info"><![CDATA[haha]]></message> </task> </target> </build> </cruisecontrol>''' FAILED_LOG = '''<?xml version="1.0" encoding="UTF-8"?> <cruisecontrol> <modifications> <modification type="mercurial"> <file action="added"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-13T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> <modification type="mercurial"> <file action="modified"> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> <filename>b</filename> </file> <date>2009-10-17T09:48:27</date> <user>twer@localhost</user> <comment><![CDATA[f****d]]></comment> <revision>1:96ad1ef37c2ae7828a66e16d8eb508b7b69465a4</revision> </modification> </modifications> <info> <property name="projectname" value="connectfour4" /> <property name="lastbuild" value="20091011201149" /> <property name="lastsuccessfulbuild" value="20091011201149" /> <property name="builddate" value="2009-10-17T14:03:24" /> <property name="cctimestamp" value="20091017220324" /> <property name="label" value="build.18" /> <property name="interval" value="300" /> <property name="lastbuildsuccessful" value="true" /> <property name="logdir" value="/Users/twer/Desktop/cruisecontrol-bin-2.8.2/logs/connectfour4" /> <property name="logfile" value="log20091017220324.xml" /> </info> <build time="0 minute(s) 4 second(s)" error="exec error"> <target name="exec"> <task name="echa"> <message priority="error"><![CDATA[Could not execute command: echa with arguments: haha]]></message> </task> </target> </build> </cruisecontrol>''' def setUp(self): self.testutils = TestUtils() self.root = settings.PROJECT_DIR def tearDown(self): self.testutils.cleantemp() def testShouldGroupTheBuilds(self): acc_builds = self._builds_obj('acc', [self.failed(), self.another_passed_at_oct_11(), self.passed_at_oct_11()]) safe_builds = self._builds_obj('safe', [self.failed(), self.another_passed_at_oct_11()]) pg = ProjectGroup() pg.append('acc', acc_builds) pg.append('safe', safe_builds) values, names, max = pg.projects_comparation() self.assertEquals(2, values[0][0]) self.assertEquals(1, values[0][1]) self.assertEquals(1, values[1][0]) self.assertEquals(1, values[1][1]) self.assertEquals('acc', names[0]) self.assertEquals('safe', names[1]) self.assertEquals(3, max) def _builds_obj(self, project_id, builds): all_builds = [] builds_obj = Builds() for build in builds: build.project_id = project_id builds_obj.builds = builds return builds_obj def failed(self): return Build.from_file(self.testutils.write_to_temp('FAILED_LOG.xml', ProjectGroupTests.FAILED_LOG)) def passed_at_oct_11(self): return Build.from_file(self.testutils.write_to_temp('PASSED_LOG_AT_OCT_11.xml', ProjectGroupTests.PASSED_LOG_AT_OCT_11)) def another_passed_at_oct_11(self): return Build.from_file(self.testutils.write_to_temp('ANOTHER_PASSED_LOG_AT_OCT_11.xml', ProjectGroupTests.ANOTHER_PASSED_LOG_AT_OCT_11)) def failed_at_oct_11(self): return Build.from_file(self.testutils.write_to_temp('FAILED_LOG_AT_OCT_11.xml', ProjectGroupTests.FAILED_LOG_AT_OCT_11)) # def test_should_not_remove_records_of_other_project(self): # self.assertEqual(0, len(Build.objects.all())) # builds = Builds.create_builds(TestUtils().connectfour_config(), BuildFactoryTest.PATTERN); # self.assertEqual(2, len(Build.objects.all())) # builds = Builds.create_builds(TestUtils().cclive_config(), None); # self.assertEqual(7, len(Build.objects.all())) #