From faab8f7d165c158768ef4a01a5e86866897e2b8a Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Thu, 3 Dec 2009 06:09:57 +0000 Subject: [PATCH] MINOR Added tests methods for Member::can*() methods to MemberTest MINOR Added test Extension classes for testing decorated can*() methods git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@94359 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- tests/security/MemberTest.php | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tests/security/MemberTest.php b/tests/security/MemberTest.php index b06f0e3b5..2fc0047f4 100644 --- a/tests/security/MemberTest.php +++ b/tests/security/MemberTest.php @@ -348,6 +348,45 @@ class MemberTest extends FunctionalTest { $this->session()->inst_set('loggedInAs', null); } + public function testDecoratedCan() { + $extensions = $this->removeExtensions(Object::get_extensions('Member')); + $member = $this->objFromFixture('Member', 'test'); + + /* Normal behaviour is that you can't view a member unless canView() on an extension returns true */ + $this->assertFalse($member->canView()); + $this->assertFalse($member->canDelete()); + $this->assertFalse($member->canEdit()); + + /* Apply a decorator that allows viewing in any case (most likely the case for member profiles) */ + Object::add_extension('Member', 'MemberTest_ViewingAllowedExtension'); + $member2 = $this->objFromFixture('Member', 'staffmember'); + + $this->assertTrue($member2->canView()); + $this->assertFalse($member2->canDelete()); + $this->assertFalse($member2->canEdit()); + + /* Apply a decorator that denies viewing of the Member */ + Object::remove_extension('Member', 'MemberTest_ViewingAllowedExtension'); + Object::add_extension('Member', 'MemberTest_ViewingDeniedExtension'); + $member3 = $this->objFromFixture('Member', 'managementmember'); + + $this->assertFalse($member3->canView()); + $this->assertFalse($member3->canDelete()); + $this->assertFalse($member3->canEdit()); + + /* Apply a decorator that allows viewing and editing but denies deletion */ + Object::remove_extension('Member', 'MemberTest_ViewingDeniedExtension'); + Object::add_extension('Member', 'MemberTest_EditingAllowedDeletingDeniedExtension'); + $member4 = $this->objFromFixture('Member', 'accountingmember'); + + $this->assertTrue($member4->canView()); + $this->assertFalse($member4->canDelete()); + $this->assertTrue($member4->canEdit()); + + Object::remove_extension('Member', 'MemberTest_EditingAllowedDeletingDeniedExtension'); + $this->addExtensions($extensions); + } + /** * Add the given array of member extensions as class names. * This is useful for re-adding extensions after being removed @@ -379,4 +418,33 @@ class MemberTest extends FunctionalTest { return $extensions; } +} +class MemberTest_ViewingAllowedExtension extends DataObjectDecorator implements TestOnly { + + public function canView() { + return true; + } + +} +class MemberTest_ViewingDeniedExtension extends DataObjectDecorator implements TestOnly { + + public function canView() { + return false; + } + +} +class MemberTest_EditingAllowedDeletingDeniedExtension extends DataObjectDecorator implements TestOnly { + + public function canView() { + return true; + } + + public function canEdit() { + return true; + } + + public function canDelete() { + return false; + } + } \ No newline at end of file