|
Perforce Chronicle 2012.2/486814
API Documentation
|
Test the content type controller. More...
Public Member Functions | |
| testAdd () | |
| Test the add action. | |
| testBadAddPost () | |
| Test bogus post to add. | |
| testBadEditPost () | |
| Test bogus post to edit. | |
| testDelete () | |
| Test deleting. | |
| testEditBadId () | |
| Test edit with bad type id. | |
| testEditGoodId () | |
| Test edit with legit type id. | |
| testGoodAddPost () | |
| Test good post to add. | |
| testGoodEditPost () | |
| Test good post to edit. | |
| testIcon () | |
| Test that icon is served correctly. | |
| testIndex () | |
| Test the index action. | |
Protected Member Functions | |
| _createContentType () | |
| Create a test content type. | |
Test the content type controller.
| Content_Test_TypeControllerTest::_createContentType | ( | ) | [protected] |
Create a test content type.
{
$type = new P4Cms_Content_Type;
$type->setId("test-type")
->setLabel("Test Type")
->setElements(
array(
"title" => array(
"type" => "text",
"options" => array("label" => "Title", "required" => true)
),
"body" => array(
"type" => "textarea",
"options" => array("label" => "Body")
)
)
)
->setValue('icon', file_get_contents(TEST_ASSETS_PATH . "/images/content-type-icon.png"))
->setFieldMetadata('icon', array("mimeType" => "image/png"))
->setValue('group', 'test')
->save();
}
| Content_Test_TypeControllerTest::testAdd | ( | ) |
Test the add action.
{
$this->utility->impersonate('administrator');
$this->dispatch('/content/type/add');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('add', 'Expected action');
// ensure that form inputs are presented correctly.
$this->assertQuery("#layout-main form.content-type-form", "Expected add form.");
$this->assertQuery("input[name='id']", "Expected id input.");
$this->assertQuery("input[name='label']", "Expected label input.");
$this->assertQuery("input[type='file']", "Expected icon file upload input.");
$this->assertQuery("textarea[name='description']", "Expected description input.");
$this->assertQuery("textarea[name='elements']", "Expected elements input.");
$this->assertQuery("input[type='submit']", "Expected submit button.");
// ensure labels are present.
$labels = array(
'id' => 'Id',
'label' => 'Label',
'icon' => 'Icon',
'description' => 'Description',
'elements' => 'Elements'
);
foreach ($labels as $field => $label) {
$this->assertQueryContentContains("label[for='$field']", $label, "Expected $field label.");
}
}
| Content_Test_TypeControllerTest::testBadAddPost | ( | ) |
Test bogus post to add.
{
$this->utility->impersonate('administrator');
// form request without required fields.
$this->request->setMethod('POST');
$this->request->setPost('description', 'test description');
$this->dispatch('/content/type/add');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('add', 'Expected action');
// check for form w. errors.
$this->assertQuery("#layout-main form.content-type-form", "Expected add form.");
$this->assertQueryCount("ul.errors", 4, "Expected four errors.");
// ensure description value was preserved.
$this->assertQueryContentContains("textarea", "test description");
}
| Content_Test_TypeControllerTest::testBadEditPost | ( | ) |
Test bogus post to edit.
{
$this->utility->impersonate('administrator');
// create content type to be edited.
$this->_createContentType();
// form request without required field (elements).
$this->request->setMethod('POST');
$this->request->setPost('id', 'test-type');
$this->request->setPost('label', 'Edited');
$this->dispatch('/content/type/edit');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('edit', 'Expected action');
// check for form w. errors.
$this->assertQuery("#layout-main form", "Expected edit form.");
$this->assertQueryCount("ul.errors", 2, "Expected two errors.");
// ensure label value was preserved.
$this->assertQuery("input[value='Edited']");
}
| Content_Test_TypeControllerTest::testDelete | ( | ) |
Test deleting.
{
$this->utility->impersonate('administrator');
// create content type to be deleted.
$this->_createContentType();
$this->request->setParam('id', 'test-type');
$this->dispatch('/content/type/delete');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('delete', 'Expected action');
// expect redirect to index.
$this->assertRedirectTo('/type', 'Expect redirect to content type index.');
// ensure content gone.
$this->assertFalse(
P4Cms_Content_Type::exists('test-type'),
"Expected content type id not to exist post delete."
);
}
| Content_Test_TypeControllerTest::testEditBadId | ( | ) |
Test edit with bad type id.
{
$this->utility->impersonate('administrator');
$this->request->setParam('id', '123');
$this->dispatch('/content/type/edit');
$this->assertModule('error', 'Expected module.');
$this->assertController('index', 'Expected controller');
$this->assertAction('error', 'Expected action');
}
| Content_Test_TypeControllerTest::testEditGoodId | ( | ) |
Test edit with legit type id.
{
$this->utility->impersonate('administrator');
// create content entry to be edited.
$this->_createContentType();
$this->request->setParam('id', 'test-type');
$this->dispatch('/content/type/edit');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('edit', 'Expected action');
}
| Content_Test_TypeControllerTest::testGoodAddPost | ( | ) |
Test good post to add.
{
$this->utility->impersonate('administrator');
// form request without required fields.
$this->request->setMethod('POST');
$this->request->setPost('id', 'test-type');
$this->request->setPost('label', 'Test Type');
$this->request->setPost('group', 'test');
$this->request->setPost('elements', "[some_field]\ntype=text");
// fake the icon input field (w. no file selected).
$this->utility->simulateEmptyFileInput('icon');
$this->dispatch('/content/type/add');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('add', 'Expected action');
// expect redirect to index.
$this->assertRedirectTo('/type', 'Expect redirect to content type index.');
// check for saved content type entry.
$this->assertTrue(P4Cms_Content_Type::exists('test-type'), "Expected type to be saved.");
$type = P4Cms_Content_Type::fetch('test-type');
$this->assertSame(
'test-type',
$type->getId(),
"Expected same content type as was posted."
);
$this->assertSame(
'Test Type',
$type->getLabel(),
"Expected same label as was posted."
);
$this->assertSame(
"[some_field]\ntype=text",
$type->getElementsAsIni(),
"Expected same elements as were posted."
);
$this->resetRequest()
->resetResponse();
// test that id must be unique (can't add same type twice).
$this->request->setMethod('POST');
$this->request->setPost('id', 'test-type');
$this->request->setPost('label', 'Test Type');
$this->request->setPost('group', 'test');
$this->request->setPost('elements', "[some-field]\ntype=text");
$this->dispatch('/content/type/add');
$this->assertQueryCount("ul.errors", 1, "Expected id error.");
}
| Content_Test_TypeControllerTest::testGoodEditPost | ( | ) |
Test good post to edit.
{
$this->utility->impersonate('administrator');
// create content type to be edited.
$this->_createContentType();
// form request without required fields.
$this->request->setMethod('POST');
$this->request->setPost('id', 'test-type');
$this->request->setPost('label', 'Test Type');
$this->request->setPost('group', 'Test Group');
$this->request->setPost('elements', "[some_field]\ntype=text");
// fake the icon input field (w. no file selected).
$this->utility->simulateEmptyFileInput('icon');
$this->dispatch('/content/type/edit');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('edit', 'Expected action');
// expect redirect to index.
$this->assertRedirectTo('/type', 'Expect redirect to content type index.');
// check for saved content type entry.
$this->assertTrue(P4Cms_Content_Type::exists('test-type'), "Expected type to be saved.");
$type = P4Cms_Content_Type::fetch('test-type');
$this->assertSame(
'test-type',
$type->getId(),
"Expected same content type as was posted."
);
$this->assertSame(
'Test Type',
$type->getLabel(),
"Expected same label as was posted."
);
$this->assertSame(
"[some_field]\ntype=text",
$type->getElementsAsIni(),
"Expected same elements as were posted."
);
}
| Content_Test_TypeControllerTest::testIcon | ( | ) |
Test that icon is served correctly.
{
$this->utility->impersonate('anonymous');
// create content type w. icon.
$this->_createContentType();
$this->request->setParam('id', 'test-type');
$this->dispatch('/content/type/icon');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('icon', 'Expected action');
$this->assertHeader('content-type', 'image/png');
$this->assertSame(
file_get_contents(TEST_ASSETS_PATH . "/images/content-type-icon.png"),
$this->response->getBody(),
"Expected icon file data."
);
}
| Content_Test_TypeControllerTest::testIndex | ( | ) |
Test the index action.
{
$this->utility->impersonate('administrator');
$this->dispatch('/content/type/index');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('index', 'Expected action');
// ensure no types are listed yet.
$body = $this->response->getBody();
$this->assertQuery("#layout-main div.data-grid", "Expected content type list container.". $body);
// ensure add link appears.
$this->assertQuery("button[class='add-button']", "Expected add button.". $body);
$this->resetRequest()->resetResponse();
$this->dispatch('/content/type/format/json');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('index', 'Expected action');
$body = $this->response->getBody();
$body = json_decode($body);
$this->assertEquals(count($body->items), 0, "Expected no content types.");
// create several content types.
for ($i = 1; $i <= 10; $i++) {
$type = new P4Cms_Content_Type;
$type->setId("test-type-$i")
->setLabel("Test Type $i")
->setElements(
array(
"title" => array(
"type" => "text",
"options" => array("label" => "Title", "required" => true)
),
"body" => array(
"type" => "textarea",
"options" => array("label" => "Body")
)
)
)
->setValue('icon', file_get_contents(TEST_ASSETS_PATH . "/images/content-type-icon.png"))
->setFieldMetadata('icon', array("mimeType" => "image/png"))
->save();
}
// ensure 10 content type entries are listed.
$this->resetRequest()->resetResponse();
$this->dispatch('/content/type/format/json');
$this->assertModule('content', 'Expected module.');
$this->assertController('type', 'Expected controller');
$this->assertAction('index', 'Expected action');
$body = $this->response->getBody();
$body = json_decode($body);
$this->assertEquals(count($body->items), 10, "Expected 10 content types.");
}