[ ArticleExtension::class ] ]; protected static $extra_dataobjects = [ Article::class, Tag::class, Author::class, ]; public function testGetCMSFieldsSingleton() { $article = new Article; $fields = $article->getCMSFields(); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom($article); $this->assertTrue( $fields->hasTabSet(), 'getCMSFields() produces a TabSet' ); $this->assertNotNull( $fields->dataFieldByName('Title'), 'getCMSFields() includes db fields' ); $this->assertNotNull( $fields->dataFieldByName('Content'), 'getCMSFields() includes db fields' ); $this->assertNotNull( $fields->dataFieldByName('AuthorID'), 'getCMSFields() includes has_one fields on singletons' ); $this->assertNull( $fields->dataFieldByName('Tags'), "getCMSFields() doesn't include many_many fields if no ID is present" ); } public function testGetCMSFieldsInstance() { $article1 = $this->objFromFixture(Article::class, 'article1'); $fields = $article1->getCMSFields(); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom($article1); $this->assertNotNull( $fields->dataFieldByName('AuthorID'), 'getCMSFields() includes has_one fields on instances' ); $this->assertNotNull( $fields->dataFieldByName('Tags'), 'getCMSFields() includes many_many fields if ID is present on instances' ); $this->assertNotNull( $fields->dataFieldByName('SubjectOfArticles'), 'getCMSFields() includes polymorphic has_many fields if ID is present on instances' ); $this->assertNull( $fields->dataFieldByName('Subject'), "getCMSFields() doesn't include polymorphic has_one field" ); $this->assertNull( $fields->dataFieldByName('SubjectID'), "getCMSFields() doesn't include polymorphic has_one id field" ); $this->assertNull( $fields->dataFieldByName('SubjectClass'), "getCMSFields() doesn't include polymorphic has_one class field" ); } public function testUpdateCMSFields() { $article1 = $this->objFromFixture(Article::class, 'article1'); $fields = $article1->getCMSFields(); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom($article1); $this->assertNotNull( $fields->dataFieldByName('AddedExtensionField'), 'getCMSFields() includes extended fields' ); } public function testRestrictCMSFields() { $article1 = $this->objFromFixture(Article::class, 'article1'); $fields = $article1->scaffoldFormFields( [ 'restrictFields' => ['Title'] ] ); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom($article1); $this->assertNotNull( $fields->dataFieldByName('Title'), 'scaffoldCMSFields() includes explicitly defined "restrictFields"' ); $this->assertNull( $fields->dataFieldByName('Content'), 'getCMSFields() doesnt include fields left out in a "restrictFields" definition' ); } public function testFieldClassesOnGetCMSFields() { $article1 = $this->objFromFixture(Article::class, 'article1'); $fields = $article1->scaffoldFormFields( [ 'fieldClasses' => ['Title' => 'SilverStripe\\Forms\\HTMLEditor\\HTMLEditorField'] ] ); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom($article1); $this->assertNotNull( $fields->dataFieldByName('Title') ); $this->assertInstanceOf( HTMLEditorField::class, $fields->dataFieldByName('Title'), 'getCMSFields() doesnt include fields left out in a "restrictFields" definition' ); } public function testGetFormFields() { $fields = Article::singleton()->getFrontEndFields(); $form = new Form(null, 'TestForm', $fields, new FieldList()); $form->loadDataFrom(singleton(Article::class)); $this->assertFalse($fields->hasTabSet(), 'getFrontEndFields() doesnt produce a TabSet by default'); } }