From de1218e8db4f0b47478d7467bffa925980f81de4 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Thu, 9 Oct 2008 14:29:48 +0000 Subject: [PATCH] ENHANCEMENT Using fixtures in CheckboxSetFieldTest?, restructured from hard-to-debug manymany-join on self to a Article<->Tag relation git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@63995 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- tests/forms/CheckboxSetFieldTest.php | 79 ++++++++++++++++++---------- tests/forms/CheckboxSetFieldTest.yml | 22 ++++++++ 2 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 tests/forms/CheckboxSetFieldTest.yml diff --git a/tests/forms/CheckboxSetFieldTest.php b/tests/forms/CheckboxSetFieldTest.php index d486d17c7..c8d487c96 100644 --- a/tests/forms/CheckboxSetFieldTest.php +++ b/tests/forms/CheckboxSetFieldTest.php @@ -2,56 +2,81 @@ class CheckboxSetFieldTest extends SapphireTest { + static $fixture_file = 'sapphire/tests/forms/CheckboxSetFieldTest.yml'; + function testSaveWithNothingSelected() { - /* Set up a test data object */ - $one = new CheckboxSetFieldTest_Obj(); - $one->A = "A1"; - $one->write(); + $article = $this->fixture->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithouttags'); /* Create a CheckboxSetField with nothing selected */ - $field = new CheckboxSetField("Relation", "Test field", DataObject::get("CheckboxSetFieldTest_Obj")->map()); + $field = new CheckboxSetField("Tags", "Test field", DataObject::get("CheckboxSetFieldTest_Tag")->map()); /* Saving should work */ - $field->saveInto($one); + $field->saveInto($article); - /* Nothing should go into CheckboxSetFieldTest_Obj_Relation */ - $this->assertNull(DB::query("SELECT * FROM CheckboxSetFieldTest_Obj_Relation")->value()); + $this->assertNull( + DB::query(" + SELECT * + FROM CheckboxSetFieldTest_Article_Tags + WHERE CheckboxSetFieldTest_Article_Tags.CheckboxSetFieldTest_ArticleID = $article->ID + ")->value(), + 'Nothing should go into manymany join table for a saved field without any ticked boxes' + ); } function testSaveWithArrayValueSet() { - /* Set up two test data object */ - $one = new CheckboxSetFieldTest_Obj(); - $one->A = "A1"; - $one->write(); - - $two = new CheckboxSetFieldTest_Obj(); - $two->A = "A2"; - $two->write(); + $article = $this->fixture->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithouttags'); + $articleWithTags = $this->fixture->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithtags'); + $tag1 = $this->fixture->objFromFixture('CheckboxSetFieldTest_Tag', 'tag1'); + $tag2 = $this->fixture->objFromFixture('CheckboxSetFieldTest_Tag', 'tag2'); /* Create a CheckboxSetField with 2 items selected. Note that the array is in the format (key) => (selected) */ - $field = new CheckboxSetField("Relation", "Test field", DataObject::get("CheckboxSetFieldTest_Obj")->map()); + $field = new CheckboxSetField("Tags", "Test field", DataObject::get("CheckboxSetFieldTest_Tag")->map()); $field->setValue(array( - 1 => true, - 2 => true)); + $tag1->ID => true, + $tag2->ID => true + )); /* Saving should work */ - $field->saveInto($one); + $field->saveInto($article); - /* Data shold be saved into CheckboxSetField */ - $this->assertEquals(array($one->ID,$one->ID), DB::query("SELECT CheckboxSetFieldTest_ObjID FROM CheckboxSetFieldTest_Obj_Relation")->column()); - $this->assertEquals(array(1,2), DB::query("SELECT ChildID FROM CheckboxSetFieldTest_Obj_Relation")->column()); + $this->assertEquals( + array($tag1->ID,$tag2->ID), + DB::query(" + SELECT CheckboxSetFieldTest_TagID + FROM CheckboxSetFieldTest_Article_Tags + WHERE CheckboxSetFieldTest_Article_Tags.CheckboxSetFieldTest_ArticleID = $article->ID + ")->column(), + 'Data shold be saved into CheckboxSetField manymany relation table on the "right end"' + ); + $this->assertEquals( + array($articleWithTags->ID,$article->ID), + DB::query(" + SELECT CheckboxSetFieldTest_ArticleID + FROM CheckboxSetFieldTest_Article_Tags + WHERE CheckboxSetFieldTest_Article_Tags.CheckboxSetFieldTest_TagID = $tag1->ID + ")->column(), + 'Data shold be saved into CheckboxSetField manymany relation table on the "left end"' + ); } + function testLoadDataFrom() { + + } } -class CheckboxSetFieldTest_Obj extends DataObject implements TestOnly { +class CheckboxSetFieldTest_Article extends DataObject implements TestOnly { static $db = array( - "A" => "Varchar", - "B" => "Varchar", + "Content" => "Text", ); static $many_many = array( - "Relation" => "CheckboxSetFieldTest_Obj", + "Tags" => "CheckboxSetFieldTest_Tag", ); +} + +class CheckboxSetFieldTest_Tag extends DataObject implements TestOnly { + static $belongs_many_many = array( + 'Articles' => 'CheckboxSetFieldTest_Article' + ); } \ No newline at end of file diff --git a/tests/forms/CheckboxSetFieldTest.yml b/tests/forms/CheckboxSetFieldTest.yml new file mode 100644 index 000000000..34ea7f275 --- /dev/null +++ b/tests/forms/CheckboxSetFieldTest.yml @@ -0,0 +1,22 @@ +CheckboxSetFieldTest_Tag: + tag1: + Title: Tag 1 + tag2: + Title: Tag 2 +CheckboxSetFieldTest_Article: + articlewithouttags: + Content: Article 1 + articlewithtags: + Content: Article 2 + Tags: =>CheckboxSetFieldTest_Tag.tag1,=>CheckboxSetFieldTest_Tag.tag2 +CheckboxSetFieldTest_Tag: + tag1: + Title: Tag 1 + tag2: + Title: Tag 2 +CheckboxSetFieldTest_Article: + articlewithouttags: + Content: Article 1 + articlewithtags: + Content: Article 2 + Tags: =>CheckboxSetFieldTest_Tag.tag1,=>CheckboxSetFieldTest_Tag.tag2 \ No newline at end of file