$current_user_id, ])); $this->current_user_id = $current_user_id; $this->user_flags = Stub::make(new UserFlagsController(), [ 'defaults' => [ 'flag_1' => 'default_value_1', 'flag_2' => 'default_value_2', 'flag_3' => 'default_value_3', ], ]); UserFlag::createOrUpdate([ 'user_id' => $this->current_user_id, 'name' => 'flag_1', 'value' => 'value_1', ]); UserFlag::createOrUpdate([ 'user_id' => $this->current_user_id, 'name' => 'flag_3', 'value' => 'value_3', ]); UserFlag::createOrUpdate([ 'user_id' => $other_user_id, 'name' => 'flag_1', 'value' => 'other_value_1', ]); UserFlag::createOrUpdate([ 'user_id' => $other_user_id, 'name' => 'flag_2', 'value' => 'other_value_2', ]); } function testItGetsFlagsOfCurrentUser() { expect($this->user_flags->get('flag_1'))->equals('value_1'); expect($this->user_flags->get('flag_2'))->equals('default_value_2'); expect($this->user_flags->getAll())->equals([ 'flag_1' => 'value_1', 'flag_2' => 'default_value_2', 'flag_3' => 'value_3', ]); } function testItLoadsDataOnlyOnceWhenNeeded() { UserFlag::createOrUpdate([ 'user_id' => $this->current_user_id, 'name' => 'flag_1', 'value' => 'new_value_1', ]); expect($this->user_flags->get('flag_1'))->equals('new_value_1'); UserFlag::createOrUpdate([ 'user_id' => $this->current_user_id, 'name' => 'flag_1', 'value' => 'newer_value_1', ]); expect($this->user_flags->get('flag_1'))->equals('new_value_1'); } function testItSetsNewFlagValue() { expect($this->user_flags->get('flag_1'))->equals('value_1'); $this->user_flags->set('flag_1', 'updated_value'); expect($this->user_flags->get('flag_1'))->equals('updated_value'); $flag = UserFlag::where('user_id', $this->current_user_id) ->where('name', 'flag_1') ->findOne(); expect($flag->value)->equals('updated_value'); } function testItDeletesAFlag() { expect($this->user_flags->get('flag_1'))->equals('value_1'); $this->user_flags->delete('flag_1'); expect($this->user_flags->get('flag_1'))->equals('default_value_1'); $flag = UserFlag::where('user_id', $this->current_user_id) ->where('name', 'flag_1') ->findOne(); expect($flag)->equals(false); } function _after() { WPFunctions::set(new WPFunctions); \ORM::raw_execute('TRUNCATE ' . UserFlag::$_table); } }