X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fgabordemooij%2Fredbean%2Ftesting%2FRedUNIT%2FBase%2FPrefixes.php;fp=vendor%2Fgabordemooij%2Fredbean%2Ftesting%2FRedUNIT%2FBase%2FPrefixes.php;h=73d2564bcbf7e57954c620f88f0653ec325ec54e;hp=0000000000000000000000000000000000000000;hb=eba34333e3c89f208d2f72fa91351ad019a71583;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae diff --git a/vendor/gabordemooij/redbean/testing/RedUNIT/Base/Prefixes.php b/vendor/gabordemooij/redbean/testing/RedUNIT/Base/Prefixes.php new file mode 100644 index 000000000..73d2564bc --- /dev/null +++ b/vendor/gabordemooij/redbean/testing/RedUNIT/Base/Prefixes.php @@ -0,0 +1,269 @@ +dispense($type); +}); + +define('BOOK', 'tbl_book'); +define('AUTHOR', 'tbl_author'); +define('COAUTHOR', 'coAuthor'); +define('FRIEND', 'tbl_friend'); +define('PUBLISHER', 'tbl_publisher'); +define('BOOKLIST', 'ownTbl_book'); +define('FRIENDLIST', 'sharedTbl_friend'); + +/** + * Prefixes + * + * Tests whether we can use tables with prefixes. + * Some people seem to like that. + * + * @file RedUNIT/Base/Prefixes.php + * @desc Tests whether you can use RedBeanPHP with table prefixes. + * @author Gabor de Mooij and the RedBeanPHP Community + * @license New BSD/GPLv2 + * + * (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community. + * This source file is subject to the New BSD/GPLv2 License that is bundled + * with this source code in the file license.txt. + */ +class Prefixes extends Base +{ + /** + * Test prerequisites. + */ + public function testPrerequisites() + { + R::nuke(); + $bean = R::xdispense( 'type_with_underscore' ); + asrt( ( $bean instanceof OODBBean ), TRUE ); + asrt( constant( 'BOOK' ), 'tbl_book' ); + asrt( constant( 'AUTHOR' ), 'tbl_author' ); + asrt( constant( 'PUBLISHER' ), 'tbl_publisher' ); + asrt( constant( 'FRIEND' ), 'tbl_friend' ); + asrt( constant( 'BOOKLIST' ), 'ownTbl_book' ); + asrt( constant( 'FRIENDLIST' ), 'sharedTbl_friend' ); + asrt( constant( 'COAUTHOR' ), 'coAuthor' ); + } + + /** + * Test basic CRUD operations. + */ + public function testBasicOperations() + { + //Can we dispense a naughty bean? (with underscore) + $author = R::xdispense( AUTHOR ); + asrt( ( $author instanceof OODBBean ), TRUE ); + asrt( $author->getMeta('type'), AUTHOR ); + $author->name = 'Mr. Quill'; + $book = R::xdispense( BOOK ); + asrt( ( $book instanceof OODBBean ), TRUE ); + asrt( $book->getMeta('type'), BOOK ); + $book->title = 'Good Stories'; + $friend = R::xdispense( FRIEND ); + $friend->name = 'Muse'; + asrt( ( $friend instanceof OODBBean ), TRUE ); + asrt( $friend->getMeta('type'), FRIEND ); + $publisher = R::xdispense( PUBLISHER ); + $publisher->name = 'Good Books'; + asrt( ( $publisher instanceof OODBBean ), TRUE ); + asrt( $publisher->getMeta('type'), PUBLISHER ); + asrt( is_array( $author->{BOOKLIST} ), TRUE ); + //add books to the book list using the constant + $author->{BOOKLIST}[] = $book; + asrt( count( $author->{BOOKLIST} ), 1 ); + //can we also add friends? (N-M) + $author->{FRIENDLIST}[] = $friend; + $author->{PUBLISHER} = $publisher; + $id = R::store( $author ); + asrt( ( $id > 0 ), TRUE ); + $author = $author->fresh(); + //Can we add another friend after reload? + $author->{FRIENDLIST}[] = R::xdispense( FRIEND )->setAttr( 'name', 'buddy' ); + R::store($author); + $author = $author->fresh(); + //Now check the contents of the bean, its lists (books,friends) and parent (publisher) + asrt( $author->name, 'Mr. Quill' ); + asrt( count( $author->{BOOKLIST} ), 1 ); + $firstBook = reset( $author->{BOOKLIST} ); + asrt( $firstBook->title, 'Good Stories' ); + asrt( count( $author->{FRIENDLIST} ), 2 ); + $firstFriend = reset( $author->{FRIENDLIST} ); + $parent = $author->{PUBLISHER}; + asrt( ( $parent instanceof OODBBean ), TRUE ); + $tables = R::inspect(); + //have all tables been prefixed? + foreach( $tables as $table ) asrt( strpos( $table, 'tbl_' ), 0 ); + //Can we make an export? + $export = R::exportAll( R::findOne( AUTHOR ), TRUE ); + $export = reset( $export ); + asrt( isset( $export[ PUBLISHER ] ), TRUE ); + asrt( isset( $export[ BOOKLIST ] ), TRUE ); + asrt( isset( $export[ FRIENDLIST ] ), TRUE ); + asrt( isset( $export[ 'ownBook' ] ), FALSE ); + asrt( isset( $export[ 'sharedFriend' ] ), FALSE ); + asrt( isset( $export[ 'publisher' ] ), FALSE ); + //Can we duplicate? + $copy = R::dup( $author ); + $copy->name = 'Mr. Clone'; + R::store( $copy ); + $copy = $copy->fresh(); + asrt( $copy->name, 'Mr. Clone' ); + asrt( count( $copy->{BOOKLIST} ), 1 ); + $firstBook = reset( $copy->{BOOKLIST} ); + asrt( $firstBook->title, 'Good Stories' ); + asrt( count( $copy->{FRIENDLIST} ), 2 ); + $firstFriend = reset( $copy->{FRIENDLIST} ); + $parent = $copy->{PUBLISHER}; + asrt( ( $parent instanceof OODBBean ), TRUE ); + //Can we count? + asrt( R::count( AUTHOR ), 2 ); + $copy = $copy->fresh(); + asrt( $copy->countOwn( BOOK ), 1 ); + asrt( $copy->countShared( FRIEND ), 2 ); + //Can we delete? + R::trash( $author ); + asrt( R::count( AUTHOR ), 1 ); + //Can we nuke? + R::nuke(); + asrt( R::count( AUTHOR ), 0 ); + asrt( count( R::inspect() ), 0 ); + } + + /** + * Test basic operations in frozen mode. + */ + public function testBasicOperationsFrozen() + { + R::nuke(); + $author = R::xdispense( AUTHOR ); + $author->name = 'Mr. Quill'; + $book = R::xdispense( BOOK ); + $book->title = 'Good Stories'; + $book2 = R::xdispense( BOOK ); + $book2->title = 'Good Stories 2'; + $friend = R::xdispense( FRIEND ); + $friend->name = 'Muse'; + $publisher = R::xdispense( PUBLISHER ); + $publisher->name = 'Good Books'; + $author->{BOOKLIST} = array( $book, $book2 ); + $author->{FRIENDLIST}[] = $friend; + $author->{PUBLISHER} = $publisher; + $coAuthor = R::xdispense( AUTHOR ); + $coAuthor->name = 'Xavier'; + $book2->{COAUTHOR} = $coAuthor; + R::store( $author ); + R::freeze( TRUE ); + asrt( $author->name, 'Mr. Quill' ); + asrt( count( $author->{BOOKLIST} ), 2 ); + $firstBook = reset( $author->{BOOKLIST} ); + asrt( $firstBook->title, 'Good Stories' ); + asrt( count( $author->{FRIENDLIST} ), 1 ); + $firstFriend = reset( $author->{FRIENDLIST} ); + $parent = $author->{PUBLISHER}; + asrt( ( $parent instanceof OODBBean ), TRUE ); + $tables = R::inspect(); + //have all tables been prefixed? + foreach( $tables as $table ) asrt( strpos( $table, 'tbl_' ), 0 ); + //Can we make an export? + $export = R::exportAll( R::findOne( AUTHOR ), TRUE ); + $export = reset( $export ); + asrt( isset( $export[ PUBLISHER ] ), TRUE ); + asrt( isset( $export[ BOOKLIST ] ), TRUE ); + asrt( isset( $export[ FRIENDLIST ] ), TRUE ); + asrt( isset( $export[ 'ownBook' ] ), FALSE ); + asrt( isset( $export[ 'sharedFriend' ] ), FALSE ); + asrt( isset( $export[ 'publisher' ] ), FALSE ); + R::freeze( FALSE ); + } + + /** + * Test conditions and aliases. + */ + public function testConditionsAndAliases() + { + R::nuke(); + $author = R::xdispense( AUTHOR ); + $author->name = 'Mr. Quill'; + $book = R::xdispense( BOOK ); + $book->title = 'Good Stories'; + $book2 = R::xdispense( BOOK ); + $book2->title = 'Good Stories 2'; + $friend = R::xdispense( FRIEND ); + $friend->name = 'Muse'; + $publisher = R::xdispense( PUBLISHER ); + $publisher->name = 'Good Books'; + $author->{BOOKLIST} = array( $book, $book2 ); + $author->{FRIENDLIST}[] = $friend; + $author->{PUBLISHER} = $publisher; + $coAuthor = R::xdispense( AUTHOR ); + $coAuthor->name = 'Xavier'; + $book2->{COAUTHOR} = $coAuthor; + R::store( $author ); + $author = $author->fresh(); + asrt( R::count( AUTHOR ), 2 ); + //Can we use with and withCondition? + asrt( count( $author->{BOOKLIST} ), 2 ); + asrt( count( $author->with(' LIMIT 1 ')->{BOOKLIST} ), 1 ); + asrt( count( $author->withCondition(' title LIKE ? ', array( '%2%' ) )->{BOOKLIST} ), 1 ); + //Can we use an alias? + $book2 = $book2->fresh(); + asrt( $book2->fetchAs( AUTHOR )->{COAUTHOR}->name, 'Xavier' ); + $coAuthor = $book2->fetchAs( AUTHOR )->{COAUTHOR}->fresh(); + asrt( count( $coAuthor->alias( COAUTHOR )->{BOOKLIST} ), 1 ); + } + + /** + * Test prettier tables using via(). + */ + public function testViaPrettification() + { + R::nuke(); + R::renameAssociation( 'tbl_author_tbl_friend', 'tbl_author_friend' ); + $author = R::xdispense( AUTHOR ); + $author->name = 'Mr. Quill'; + $friend = R::xdispense( FRIEND ); + $friend->name = 'Muse'; + $author->{FRIENDLIST}[] = $friend; + $id = R::store( $author ); + //print_r(R::inspect()); exit; + $author = R::load( AUTHOR, $id ); + $tables = array_flip( R::inspect() ); + asrt( isset( $tables[ 'tbl_author_friend' ] ), TRUE ); + asrt( isset( $tables[ 'tbl_author_tbl_friend' ] ), FALSE ); + asrt( count( $author->{FRIENDLIST} ), 1 ); + AQueryWriter::clearRenames(); + } + + /** + * Test self-referential N-M relations. + */ + public function testSelfRefNM() + { + R::nuke(); + $friend1 = R::xdispense( FRIEND ); + $friend1->name = 'f1'; + $friend2 = R::xdispense( FRIEND ); + $friend2->name = 'f2'; + $friend3 = R::xdispense( FRIEND ); + $friend3->name = 'f3'; + $friend1->{FRIENDLIST} = array( $friend2, $friend3 ); + $friend3->{FRIENDLIST} = array( $friend1 ); + R::storeAll( array( $friend1, $friend2, $friend3 ) ); + $friend1 = $friend1->fresh(); + $friend2 = $friend2->fresh(); + $friend3 = $friend3->fresh(); + asrt( count( $friend1->{FRIENDLIST} ), 2 ); + asrt( count( $friend2->{FRIENDLIST} ), 1 ); + asrt( count( $friend3->{FRIENDLIST} ), 1 ); + $friend = reset( $friend3->{FRIENDLIST} ); + asrt( $friend->name, 'f1' ); + } +}