Test the calculations of the counters.
function testJobItemsCounters() {
$job = $this
->createJob();
// Some test data items.
$data1 = array(
'#text' => 'The text to be translated.',
);
$data2 = array(
'#text' => 'The text to be translated.',
'#translation' => '',
);
$data3 = array(
'#text' => 'The text to be translated.',
'#translation' => 'The translated data. Set by the translator plugin.',
);
$data4 = array(
'#text' => 'Another, longer text to be translated.',
'#translation' => 'The translated data. Set by the translator plugin.',
'#status' => TMGMT_DATA_ITEM_STATE_REVIEWED,
);
$data5 = array(
'#label' => 'label',
'data1' => $data1,
'data4' => $data4,
);
$data6 = array(
'#text' => '<p>Test the HTML tags count.</p>',
);
// No data items.
$this
->assertEquals(0, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountTranslated());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(0, $job
->getCountAccepted());
$this
->assertEquals(0, $job
->getWordCount());
// Add a test items.
$job_item1 = tmgmt_job_item_create('plugin', 'type', 4, array(
'tjid' => $job
->id(),
));
$job_item1
->save();
// No pending, translated and confirmed data items.
$job = Job::load($job
->id());
$job_item1 = JobItem::load($job_item1
->id());
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(0, $job_item1
->getCountPending());
$this
->assertEquals(0, $job_item1
->getCountTranslated());
$this
->assertEquals(0, $job_item1
->getCountReviewed());
$this
->assertEquals(0, $job_item1
->getCountAccepted());
$this
->assertEquals(0, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountTranslated());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(0, $job
->getCountAccepted());
// Add an untranslated data item.
$job_item1
->updateData('data_item1', $data1);
$job_item1
->save();
// One pending data items.
$job = Job::load($job
->id());
$job_item1 = JobItem::load($job_item1
->id());
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(1, $job_item1
->getCountPending());
$this
->assertEquals(0, $job_item1
->getCountTranslated());
$this
->assertEquals(0, $job_item1
->getCountReviewed());
$this
->assertEquals(5, $job_item1
->getWordCount());
$this
->assertEquals(1, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(0, $job
->getCountTranslated());
$this
->assertEquals(5, $job
->getWordCount());
// Add another untranslated data item.
// Test with an empty translation set.
$job_item1
->updateData('data_item1', $data2, TRUE);
$job_item1
->save();
// One pending data items.
$job = Job::load($job
->id());
$job_item1 = JobItem::load($job_item1
->id());
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(1, $job_item1
->getCountPending());
$this
->assertEquals(0, $job_item1
->getCountTranslated());
$this
->assertEquals(0, $job_item1
->getCountReviewed());
$this
->assertEquals(5, $job_item1
->getWordCount());
$this
->assertEquals(1, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountTranslated());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(5, $job
->getWordCount());
// Add a translated data item.
$job_item1
->updateData('data_item1', $data3, TRUE);
$job_item1
->save();
// One translated data items.
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(0, $job_item1
->getCountPending());
$this
->assertEquals(1, $job_item1
->getCountTranslated());
$this
->assertEquals(0, $job_item1
->getCountReviewed());
$this
->assertEquals(0, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(1, $job
->getCountTranslated());
// Add a confirmed data item.
$job_item1
->updateData('data_item1', $data4, TRUE);
$job_item1
->save();
// One reviewed data item.
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(1, $job_item1
->getCountReviewed());
$this
->assertEquals(1, $job
->getCountReviewed());
// Add a translated and an untranslated and a confirmed data item
$job = Job::load($job
->id());
$job_item1 = JobItem::load($job_item1
->id());
$job_item1
->updateData('data_item1', $data1, TRUE);
$job_item1
->updateData('data_item2', $data3, TRUE);
$job_item1
->updateData('data_item3', $data4, TRUE);
$job_item1
->save();
// One pending and translated data items each.
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(1, $job
->getCountPending());
$this
->assertEquals(1, $job
->getCountTranslated());
$this
->assertEquals(1, $job
->getCountReviewed());
$this
->assertEquals(16, $job
->getWordCount());
// Add nested data items.
$job_item1
->updateData('data_item1', $data5, TRUE);
$job_item1
->save();
// One pending data items.
$job = Job::load($job
->id());
$job_item1 = JobItem::load($job_item1
->id());
$this
->assertEquals('label', $job_item1
->getData()['data_item1']['#label']);
$this
->assertCount(3, $job_item1
->getData()['data_item1']);
// Add a greater number of data items
for ($index = 1; $index <= 3; $index++) {
$job_item1
->updateData('data_item' . $index, $data1, TRUE);
}
for ($index = 4; $index <= 10; $index++) {
$job_item1
->updateData('data_item' . $index, $data3, TRUE);
}
for ($index = 11; $index <= 15; $index++) {
$job_item1
->updateData('data_item' . $index, $data4, TRUE);
}
$job_item1
->save();
// 3 pending and 7 translated data items each.
$job = Job::load($job
->id());
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(3, $job
->getCountPending());
$this
->assertEquals(7, $job
->getCountTranslated());
$this
->assertEquals(5, $job
->getCountReviewed());
// Check for HTML tags count.
$job_item1
->updateData('data_item1', $data6);
$job_item1
->save();
$this
->assertEquals(2, $job_item1
->getTagsCount());
// Add several job items
$job_item2 = tmgmt_job_item_create('plugin', 'type', 5, array(
'tjid' => $job
->id(),
));
for ($index = 1; $index <= 4; $index++) {
$job_item2
->updateData('data_item' . $index, $data1, TRUE);
}
for ($index = 5; $index <= 12; $index++) {
$job_item2
->updateData('data_item' . $index, $data3, TRUE);
}
for ($index = 13; $index <= 16; $index++) {
$job_item2
->updateData('data_item' . $index, $data4, TRUE);
}
$job_item2
->save();
// 3 pending and 7 translated data items each.
$job = Job::load($job
->id());
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(7, $job
->getCountPending());
$this
->assertEquals(15, $job
->getCountTranslated());
$this
->assertEquals(9, $job
->getCountReviewed());
// Accept the job items.
foreach ($job
->getItems() as $item) {
// Set the state directly to avoid triggering translator and source
// controllers that do not exist.
$item
->setState(JobItem::STATE_ACCEPTED);
$item
->save();
}
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEquals(0, $job
->getCountPending());
$this
->assertEquals(0, $job
->getCountTranslated());
$this
->assertEquals(0, $job
->getCountReviewed());
$this
->assertEquals(31, $job
->getCountAccepted());
}