View source
<?php
class TMGMTCRUDTestCase extends TMGMTBaseTestCase {
static function getInfo() {
return array(
'name' => 'CRUD tests',
'description' => 'Basic crud operations for jobs and translators',
'group' => 'Translation Management',
);
}
function testTranslators() {
$translator = $this
->createTranslator();
$loaded_translator = tmgmt_translator_load($translator->tid);
$this
->assertEqual($translator->name, $loaded_translator->name);
$this
->assertEqual($translator->label, $loaded_translator->label);
$this
->assertEqual($translator->settings, $loaded_translator->settings);
$translator->settings['new_key'] = $this
->randomString();
$this
->assertEqual(SAVED_UPDATED, $translator
->save());
$loaded_translator = tmgmt_translator_load($translator->tid);
$this
->assertEqual($translator->name, $loaded_translator->name);
$this
->assertEqual($translator->label, $loaded_translator->label);
$this
->assertEqual($translator->settings, $loaded_translator->settings);
$translator
->delete();
$this
->assertFalse(tmgmt_translator_load($translator->tid));
}
function testJobs() {
$job = $this
->createJob();
$loaded_job = tmgmt_job_load($job->tjid);
$this
->assertEqual($job->source_language, $loaded_job->source_language);
$this
->assertEqual($job->target_language, $loaded_job->target_language);
$this
->assertTrue($loaded_job->created > 0);
$this
->assertTrue($loaded_job->changed > 0);
$this
->assertEqual(0, $loaded_job->state);
$job->reference = 7;
$this
->assertEqual(SAVED_UPDATED, $job
->save());
$loaded_job = tmgmt_job_load($job->tjid);
$this
->assertEqual($job->reference, $loaded_job->reference);
$item1 = $job
->addItem('test_source', 'type', 5);
$item2 = $job
->addItem('test_source', 'type', 4);
$items = $job
->getItems();
$this
->assertEqual(2, count($items));
$this
->assertEqual($item1->plugin, $items[$item1->tjiid]->plugin);
$this
->assertEqual($item1->item_type, $items[$item1->tjiid]->item_type);
$this
->assertEqual($item1->item_id, $items[$item1->tjiid]->item_id);
$this
->assertEqual($item2->plugin, $items[$item2->tjiid]->plugin);
$this
->assertEqual($item2->item_type, $items[$item2->tjiid]->item_type);
$this
->assertEqual($item2->item_id, $items[$item2->tjiid]->item_id);
$job
->delete();
$this
->assertFalse(tmgmt_job_load($job->tjid));
}
function testRemoteMappings() {
$data_key = '5][test_source][type';
$translator = $this
->createTranslator();
$job = $this
->createJob();
$job->translator = $translator->name;
$job
->save();
$item1 = $job
->addItem('test_source', 'type', 5);
$item2 = $job
->addItem('test_source', 'type', 4);
$mapping_data = array(
'remote_identifier_2' => 'id12',
'remote_identifier_3' => 'id13',
'amount' => 1043,
'currency' => 'EUR',
);
$result = $item1
->addRemoteMapping($data_key, 'id11', $mapping_data);
$this
->assertEqual($result, SAVED_NEW);
$job_mappings = $job
->getRemoteMappings();
$item_mappings = $item1
->getRemoteMappings();
$job_mapping = array_shift($job_mappings);
$item_mapping = array_shift($item_mappings);
$_job = $job_mapping
->getJob();
$this
->assertEqual($job->tjid, $_job->tjid);
$_job = $item_mapping
->getJob();
$this
->assertEqual($job->tjid, $_job->tjid);
$_item1 = $item_mapping
->getJobItem();
$this
->assertEqual($item1->tjiid, $_item1->tjiid);
$remote_mapping_controller = entity_get_controller('tmgmt_remote');
$remote_mappings = $remote_mapping_controller
->loadByRemoteIdentifier('id11', 'id12', 'id13');
$remote_mapping = array_shift($remote_mappings);
$this
->assertEqual($remote_mapping->tjiid, $item1->tjiid);
$this
->assertEqual($remote_mapping->amount, $mapping_data['amount']);
$this
->assertEqual($remote_mapping->currency, $mapping_data['currency']);
$this
->assertEqual(count($remote_mapping_controller
->loadByRemoteIdentifier('id11')), 1);
$this
->assertEqual(count($remote_mapping_controller
->loadByRemoteIdentifier('id11', '')), 0);
$this
->assertEqual(count($remote_mapping_controller
->loadByRemoteIdentifier('id11', NULL, '')), 0);
$this
->assertEqual(count($remote_mapping_controller
->loadByRemoteIdentifier(NULL, NULL, 'id13')), 1);
$item_mapping
->addRemoteData('test_data', 'test_value');
entity_save('tmgmt_remote', $item_mapping);
$item_mapping = entity_load_single('tmgmt_remote', $item_mapping->trid);
$this
->assertEqual($item_mapping
->getRemoteData('test_data'), 'test_value');
$item2
->addRemoteMapping($data_key, 'id21', array(
'remote_identifier_2' => 'id22',
'remote_identifier_3' => 'id23',
));
entity_get_controller('tmgmt_job_item')
->delete(array(
$item1->tjiid,
));
$this
->assertEqual(count($remote_mapping_controller
->loadByLocalData(NULL, $item1->tjiid)), 0);
$this
->assertEqual(count($remote_mapping_controller
->loadByLocalData(NULL, $item2->tjiid)), 1);
entity_get_controller('tmgmt_job')
->delete(array(
$job->tjid,
));
$this
->assertEqual(count($remote_mapping_controller
->loadByLocalData(NULL, $item2->tjiid)), 0);
}
function testJobItems() {
$job = $this
->createJob();
$item1 = $job
->addItem('test_source', 'type', 5);
$item2 = $job
->addItem('test_source', 'test_with_long_label', 4);
$item = tmgmt_job_item_load($item1->tjiid);
$this
->assertEqual($item1->plugin, $item->plugin);
$this
->assertEqual($item1->item_type, $item->item_type);
$this
->assertEqual($item1->item_id, $item->item_id);
$items = tmgmt_job_item_load_multiple(array(
$item1->tjiid,
$item2->tjiid,
));
$this
->assertEqual(2, count($items));
$this
->assertEqual($item1->plugin, $items[$item1->tjiid]->plugin);
$this
->assertEqual($item1->item_type, $items[$item1->tjiid]->item_type);
$this
->assertEqual($item1->item_id, $items[$item1->tjiid]->item_id);
$this
->assertEqual($item2->plugin, $items[$item2->tjiid]->plugin);
$this
->assertEqual($item2->item_type, $items[$item2->tjiid]->item_type);
$this
->assertEqual($item2->item_id, $items[$item2->tjiid]->item_id);
$this
->assertTrue(TMGMT_JOB_LABEL_MAX_LENGTH >= strlen($items[$item2->tjiid]
->label()));
}
function testAddingTranslatedData() {
$translator = $this
->createTranslator();
$job = $this
->createJob();
$job->translator = $translator->name;
$job
->save();
$item1 = $job
->addItem('test_source', 'test_with_long_label', 5);
$this
->assertTrue(TMGMT_JOB_LABEL_MAX_LENGTH >= strlen($job
->label()));
$key = array(
'dummy',
'deep_nesting',
);
$translation['dummy']['deep_nesting']['#text'] = 'translated 1';
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$messages = $job
->getMessages();
$this
->assertEqual(count($messages), 1);
$last_message = end($messages);
$this
->assertEqual($last_message->message, 'The translation of !source to @language is finished and can now be <a href="!review_url">reviewed</a>.');
$this
->assertEqual($data['#translation']['#text'], 'translated 1');
$this
->assertTrue(empty($data['#translation']['#text_revisions']));
$this
->assertEqual($data['#translation']['#origin'], 'remote');
$this
->assertEqual($data['#translation']['#timestamp'], REQUEST_TIME);
$item1
->updateData(array(
'dummy',
'deep_nesting',
), array(
'#status' => TMGMT_DATA_ITEM_STATE_PENDING,
));
$translation['dummy']['deep_nesting']['#text'] = 'translated 1';
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$this
->assertEqual($data['#status'], TMGMT_DATA_ITEM_STATE_TRANSLATED);
$translation['dummy']['deep_nesting']['#text'] = 'translated 2';
$translation['dummy']['deep_nesting']['#origin'] = 'local';
$translation['dummy']['deep_nesting']['#timestamp'] = REQUEST_TIME - 5;
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$this
->assertEqual($data['#translation']['#text'], 'translated 2');
$this
->assertEqual($data['#translation']['#timestamp'], REQUEST_TIME - 5);
$this
->assertEqual($data['#translation']['#text_revisions'][0]['#text'], 'translated 1');
$this
->assertEqual($data['#translation']['#text_revisions'][0]['#origin'], 'remote');
$this
->assertEqual($data['#translation']['#text_revisions'][0]['#timestamp'], REQUEST_TIME);
$this
->assertEqual($data['#translation']['#origin'], 'local');
$messages = $job
->getMessages();
$this
->assertEqual(count($messages), 1);
$translation['dummy']['deep_nesting']['#text'] = 'translated 3';
unset($translation['dummy']['deep_nesting']['#origin']);
unset($translation['dummy']['deep_nesting']['#timestamp']);
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$this
->assertEqual($data['#translation']['#text'], 'translated 2');
$this
->assertEqual($data['#translation']['#timestamp'], REQUEST_TIME - 5);
$last_revision = end($data['#translation']['#text_revisions']);
$this
->assertEqual($last_revision['#text'], 'translated 3');
$this
->assertEqual($last_revision['#origin'], 'remote');
$this
->assertEqual($last_revision['#timestamp'], REQUEST_TIME);
$this
->assertEqual($data['#translation']['#origin'], 'local');
$messages = $job
->getMessages();
$this
->assertEqual(count($messages), 2);
$last_message = end($messages);
$this
->assertEqual($last_message->message, 'Translation for customized @key received. Revert your changes if you wish to use it.');
$item1
->dataItemRevert($key);
$data = $item1
->getData($key);
$this
->assertEqual($data['#translation']['#text'], 'translated 3');
$this
->assertEqual($data['#translation']['#origin'], 'remote');
$this
->assertEqual($data['#translation']['#timestamp'], REQUEST_TIME);
$last_revision = end($data['#translation']['#text_revisions']);
$this
->assertTrue($last_revision['#text'], 'translated 2');
$this
->assertTrue($last_revision['#origin'], 'remote');
$this
->assertEqual($last_revision['#timestamp'], REQUEST_TIME - 5);
$messages = $job
->getMessages();
$this
->assertEqual(count($messages), 3);
$last_message = end($messages);
$this
->assertEqual($last_message->message, 'Translation for @key reverted to the latest version.');
$this
->assertEqual(count($data['#translation']['#text_revisions']), 3);
$translation['dummy']['deep_nesting']['#text'] = 'translated 3';
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$this
->assertEqual(count($data['#translation']['#text_revisions']), 3);
$item1
->updateData($key, array(
'#status' => TMGMT_DATA_ITEM_STATE_REVIEWED,
));
$translation['dummy']['deep_nesting']['#text'] = 'translated 4';
$item1
->addTranslatedData($translation);
$data = $item1
->getData($key);
$this
->assertEqual($data['#translation']['#text'], 'translated 3');
$this
->assertEqual(count($data['#translation']['#text_revisions']), 4);
$last_revision = end($data['#translation']['#text_revisions']);
$this
->assertEqual($last_revision['#text'], 'translated 4');
$this
->assertEqual($last_revision['#origin'], 'remote');
$this
->assertEqual($last_revision['#timestamp'], REQUEST_TIME);
$messages = $job
->getMessages();
$this
->assertEqual(count($messages), 4);
$last_message = end($messages);
$this
->assertEqual($last_message->message, 'Translation for already reviewed @key received and stored as a new revision. Revert to it if you wish to use it.');
}
function testJobItemsCounters() {
$job = $this
->createJob();
$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,
);
$this
->assertEqual(0, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountTranslated());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(0, $job
->getCountAccepted());
$this
->assertEqual(0, $job
->getWordCount());
$job_item1 = tmgmt_job_item_create('plugin', 'type', 4, array(
'tjid' => $job->tjid,
));
$job_item1
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
$job_item1 = entity_load_single('tmgmt_job_item', $job_item1->tjiid);
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(0, $job_item1
->getCountPending());
$this
->assertEqual(0, $job_item1
->getCountTranslated());
$this
->assertEqual(0, $job_item1
->getCountReviewed());
$this
->assertEqual(0, $job_item1
->getCountAccepted());
$this
->assertEqual(0, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountTranslated());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(0, $job
->getCountAccepted());
$job_item1->data['data_item1'] = $data1;
$job_item1
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
$job_item1 = entity_load_single('tmgmt_job_item', $job_item1->tjiid);
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(1, $job_item1
->getCountPending());
$this
->assertEqual(0, $job_item1
->getCountTranslated());
$this
->assertEqual(0, $job_item1
->getCountReviewed());
$this
->assertEqual(5, $job_item1
->getWordCount());
$this
->assertEqual(1, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(0, $job
->getCountTranslated());
$this
->assertEqual(5, $job
->getWordCount());
$job_item1->data['data_item1'] = $data2;
$job_item1
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
$job_item1 = entity_load_single('tmgmt_job_item', $job_item1->tjiid);
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(1, $job_item1
->getCountPending());
$this
->assertEqual(0, $job_item1
->getCountTranslated());
$this
->assertEqual(0, $job_item1
->getCountReviewed());
$this
->assertEqual(5, $job_item1
->getWordCount());
$this
->assertEqual(1, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountTranslated());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(5, $job
->getWordCount());
$job_item1->data['data_item1'] = $data3;
$job_item1
->save();
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(0, $job_item1
->getCountPending());
$this
->assertEqual(1, $job_item1
->getCountTranslated());
$this
->assertEqual(0, $job_item1
->getCountReviewed());
$this
->assertEqual(0, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(1, $job
->getCountTranslated());
$job_item1->data['data_item1'] = $data4;
$job_item1
->save();
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(1, $job_item1
->getCountReviewed());
$this
->assertEqual(1, $job
->getCountReviewed());
$job = entity_load_single('tmgmt_job', $job->tjid);
$job_item1 = entity_load_single('tmgmt_job_item', $job_item1->tjiid);
$job_item1->data['data_item1'] = $data1;
$job_item1->data['data_item2'] = $data3;
$job_item1->data['data_item3'] = $data4;
$job_item1
->save();
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(1, $job
->getCountPending());
$this
->assertEqual(1, $job
->getCountTranslated());
$this
->assertEqual(1, $job
->getCountReviewed());
$this
->assertEqual(16, $job
->getWordCount());
$job_item1->data['data_item1'] = $data5;
$job_item1
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
$job_item1 = entity_load_single('tmgmt_job_item', $job_item1->tjiid);
$this
->assertEqual('label', $job_item1->data['data_item1']['#label']);
$this
->assertEqual(3, count($job_item1->data['data_item1']));
for ($index = 1; $index <= 3; $index++) {
$job_item1->data['data_item' . $index] = $data1;
}
for ($index = 4; $index <= 10; $index++) {
$job_item1->data['data_item' . $index] = $data3;
}
for ($index = 11; $index <= 15; $index++) {
$job_item1->data['data_item' . $index] = $data4;
}
$job_item1
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(3, $job
->getCountPending());
$this
->assertEqual(7, $job
->getCountTranslated());
$this
->assertEqual(5, $job
->getCountReviewed());
$job_item2 = tmgmt_job_item_create('plugin', 'type', 5, array(
'tjid' => $job->tjid,
));
for ($index = 1; $index <= 4; $index++) {
$job_item2->data['data_item' . $index] = $data1;
}
for ($index = 5; $index <= 12; $index++) {
$job_item2->data['data_item' . $index] = $data3;
}
for ($index = 13; $index <= 16; $index++) {
$job_item2->data['data_item' . $index] = $data4;
}
$job_item2
->save();
$job = entity_load_single('tmgmt_job', $job->tjid);
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(7, $job
->getCountPending());
$this
->assertEqual(15, $job
->getCountTranslated());
$this
->assertEqual(9, $job
->getCountReviewed());
foreach ($job
->getItems() as $item) {
$item
->setState(TMGMT_JOB_ITEM_STATE_ACCEPTED);
$item
->save();
}
drupal_static_reset('tmgmt_job_statistics_load');
$this
->assertEqual(0, $job
->getCountPending());
$this
->assertEqual(0, $job
->getCountTranslated());
$this
->assertEqual(0, $job
->getCountReviewed());
$this
->assertEqual(31, $job
->getCountAccepted());
}
}