def test_run(self, mock_path_isfile):
        mock_path_isfile.return_value = True

        expected_cmd = flatten_list([
            "java", "-Xms128M", "-Xmx512M", "-jar", self.executable,
            "--dbconf", self.dbconf, "-t", self.transformations,
            "-o", self.job.output_dir, "--stats",
            "--alt", "2", "--max-transforms", "20", "--noiseCutoff", "0.5",
            "--dict", self.dict_files, "--", self.job.xml_file
        ])
        stdout = "{\"total\":1,\"ignored\":0,\"correct\":0,\"corrected\":1,\"unchanged\":0}"
        results = mock_results_tuple()
        expected_results = results(None, None, 0)
        self.mock_rv.communicate.return_value[0] = stdout

        page_corrector = PageCorrector(self.job)
        retval = page_corrector.run()
        args, kwargs = self.mock_popen.call_args

        self.maxDiff = None
        self.assertTrue(mock_path_isfile.called)
        self.assertTrue(self.mock_popen.called)
        self.assertEqual(expected_cmd, args[0])
        self.assertEqual(self.job.postproc_result.pp_health, stdout)
        self.assertTupleEqual(expected_results, retval)
    def test_should_run_true_all_values_missing(self):
        self.job.postproc_result.pp_health_exists = False
        self.job.page_result.corr_ocr_text_path_exists = False
        self.job.page_result.corr_ocr_xml_path_exists = False
        page_corrector = PageCorrector(self.job)

        self.assertTrue(page_corrector.should_run())
    def test_should_run_false(self):
        self.job.postproc_result.pp_health_exists = True
        self.job.page_result.corr_ocr_text_path_exists = True
        self.job.page_result.corr_ocr_xml_path_exists = True
        page_corrector = PageCorrector(self.job)

        self.assertFalse(page_corrector.should_run())
    def test_do_process_page_corrector(self):
        settings = default_settings()
        job = mock_emop_job(settings)
        page_corrector = PageCorrector(job=job)
        page_corrector.run = mock.MagicMock()
        results = mock_results_tuple()
        page_corrector.should_run = mock.MagicMock()
        page_corrector.should_run.return_value = True
        page_corrector.run.return_value = results(stdout=None, stderr=None, exitcode=0)

        retval = self.run.do_process(obj=page_corrector, job=job)

        self.assertTrue(page_corrector.run.called)
        self.assertTrue(retval)
    def test_do_process_page_corrector_skipped(self):
        settings = default_settings()
        job = mock_emop_job(settings)
        page_corrector = PageCorrector(job=job)
        page_corrector.run = mock.MagicMock()
        results = mock_results_tuple()
        page_corrector.run.return_value = results(stdout=None, stderr="Test", exitcode=1)
        flexmock(page_corrector).should_receive("should_run").and_return(False)
        self.run.append_result = mock.MagicMock()

        retval = self.run.do_process(obj=page_corrector, job=job)

        self.assertFalse(self.run.append_result.called)
        self.assertTrue(retval)
    def test_do_process_page_corrector_not_skipped(self):
        settings = default_settings()
        self.run.settings.controller_skip_existing = False
        job = mock_emop_job(settings)
        page_corrector = PageCorrector(job=job)
        page_corrector.run = mock.MagicMock()
        results = mock_results_tuple()
        page_corrector.run.return_value = results(stdout=None, stderr=None, exitcode=0)
        page_corrector.should_run = mock.MagicMock()
        self.run.append_result = mock.MagicMock()

        retval = self.run.do_process(obj=page_corrector, job=job)

        self.assertFalse(page_corrector.should_run.called)
        self.assertTrue(retval)
    def test_do_process_page_corrector_failed(self):
        settings = default_settings()
        job = mock_emop_job(settings)
        page_corrector = PageCorrector(job=job)
        page_corrector.run = mock.MagicMock()
        results = mock_results_tuple()
        page_corrector.should_run = mock.MagicMock()
        page_corrector.should_run.return_value = True
        page_corrector.run.return_value = results(stdout=None, stderr="Test", exitcode=1)
        self.run.append_result = mock.MagicMock()

        retval = self.run.do_process(obj=page_corrector, job=job)

        self.run.append_result.assert_called_with(job=job, results="PageCorrector Failed: Test", failed=True)
        self.assertFalse(retval)
    def test_run_with_save(self, mock_path_isfile):
        mock_path_isfile.return_value = True

        expected_cmd = flatten_list([
            "java", "-Xms128M", "-Xmx512M", "-jar", self.executable,
            "--dbconf", self.dbconf, "-t", self.transformations,
            "-o", self.job.output_dir, "--stats",
            "--alt", "2", "--max-transforms", "20", "--noiseCutoff", "0.5",
            "--dict", self.dict_files, "--save", "--", self.job.xml_file
        ])

        page_corrector = PageCorrector(self.job)
        page_corrector.save = True
        page_corrector.run()
        args, kwargs = self.mock_popen.call_args

        self.assertEqual(expected_cmd, args[0])