示例#1
0
	public function testAdmin(){

		// Basic Construct should return one result.
		/** @var PageModel $page */
		$page = PageModel::Construct('/admin');

		$this->assertInstanceOf('Model', $page);
		$this->assertInstanceOf('PageModel', $page);

		if(!$page->exists()){
			$this->markTestSkipped('/admin page does not exist, Core must not be installed.');
			return;
		}

		// Test that getAsArray works as expected.
		$asArray = $page->getAsArray();
		$this->assertInternalType('array', $asArray);
		$this->assertGreaterThan(0, sizeof($asArray));

		// And JSON
		$asJSON = $page->getAsJSON();
		$this->assertInternalType('string', $asJSON);
		$this->assertGreaterThan(0, strlen($asJSON));
		$this->assertInternalType('array', json_decode($asJSON, true));


		$this->assertArrayHasKey('title', $asArray);
		$this->assertArrayHasKey('title', $page);
		$this->assertEquals($asArray['title'], $page->get('title'));

		$this->assertArrayHasKey('expires', $asArray);
		$this->assertArrayHasKey('expires', $page);
		$this->assertEquals($asArray['expires'], $page->get('expires'));


		// Test that getLink behaves as expected.
		$this->assertNull($page->getLink('nonexistent'));

		// Pages also have the following linked records,
		// insertables, pagemetas, and rewrites.
		$this->assertInternalType('array', $page->getLink('Insertable'));
		$this->assertInternalType('array', $page->getLink('PageMeta'));
		$this->assertInternalType('array', $page->getLink('RewriteMap'));


		// Ensure that creating meta files works
		$meta_name = 'phpunit-test';
		$meta_val  = 'This is a test meta field from phpunit';
		$page->setMeta($meta_name, $meta_val);

		// Saving the page should also save this new meta.
		$this->assertTrue($page->save());

		// Verify this meta from a separate object
		// (because Construct will use the cached copy)
		$page2 = new PageModel('/admin');

		$this->assertTrue($page2->exists());

		$this->assertEquals($meta_val, $page2->getMetaValue($meta_name));

		// Remove the field from the original object now.
		$page->setMeta($meta_name, null);

		// Test that removing it does not remove the object's data until the parent is saved though!
		$meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, '');
		$this->assertTrue($meta->exists());

		$this->assertTrue($page->save());

		$meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, '');
		$this->assertFalse($meta->exists());
	}