public function testGetAttributeBitCalculation() { $model = new PageModel(); $model->virtualAttributes = ['show_in_menu' => 'bitmask:visibility,1', 'show_in_aside_menu' => 'bitmask:visibility,2', 'show_in_search' => 'bitmask:visibility,4', 'show_in_api' => 'bitmask:visibility,8']; Dispatcher::extend('bitmask', function ($bitKey, $bitName) { return new BitMaskAttribute($bitKey, $bitName); }); $model->visibility = 0; $this->assertFalse($model->show_in_menu); $this->assertFalse($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertFalse($model->show_in_api); $model->show_in_menu = true; $this->assertTrue($model->show_in_menu); $this->assertFalse($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertFalse($model->show_in_api); $this->assertEquals(1, $model->visibility); $model->show_in_aside_menu = true; $this->assertTrue($model->show_in_menu); $this->assertTrue($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertFalse($model->show_in_api); $this->assertEquals(3, $model->visibility); $model->show_in_api = true; $this->assertTrue($model->show_in_menu); $this->assertTrue($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertTrue($model->show_in_api); $this->assertEquals(11, $model->visibility); $model->show_in_api = false; $this->assertTrue($model->show_in_menu); $this->assertTrue($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertFalse($model->show_in_api); $this->assertEquals(3, $model->visibility); $model->show_in_menu = false; $this->assertFalse($model->show_in_menu); $this->assertTrue($model->show_in_aside_menu); $this->assertFalse($model->show_in_search); $this->assertFalse($model->show_in_api); $this->assertEquals(2, $model->visibility); }
protected function registerSiteTreeModel() { $pageClass = $this->app['config']->get('cmsable.page_model'); AttributeDispatcher::extend('bitmask', function ($bitKey, $bitName) { return new BitMaskAttribute($bitKey, $bitName); }); $pageClass = $pageClass ?: 'Cmsable\\Model\\Page'; $this->app->bind('Cmsable\\Model\\SiteTreeModelInterface', function ($app) use($pageClass) { return $app->make('Cmsable\\Model\\AdjacencyListSiteTreeModel', [$pageClass]); }); }