/**
  * Read a user from the given $id
  *
  * @param string $id
  * @return array
  */
 public function user_read($id)
 {
     return UserCommands::readUser($id);
 }
 public function testUserCRUD_CRUDOK()
 {
     // initial list
     $result = self::$environ->fixJson(UserCommands::listUsers());
     $count = $result['count'];
     // Create
     $userId = self::$environ->createUser('someuser', 'SomeUser', '*****@*****.**');
     $someUser = new UserModel($userId);
     $this->assertNotNull($someUser);
     $this->assertEquals(24, strlen($someUser->id->asString()));
     // create project
     ProjectCommands::createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE, 'sfchecks', $someUser->id->asString(), self::$environ->website);
     // list
     $result = self::$environ->fixJson(UserCommands::listUsers());
     $this->assertEquals($count + 1, $result['count']);
     // Read
     $result = self::$environ->fixJson(UserCommands::readUser($someUser->id->asString()));
     $this->assertNotNull($result['id']);
     $this->assertEquals('someuser', $result['username']);
     $this->assertEquals('*****@*****.**', $result['email']);
     // Update
     $result['username'] = '******';
     $result['email'] = '*****@*****.**';
     $id = UserCommands::updateUser($result, self::$environ->website);
     $this->assertNotNull($id);
     $this->assertEquals($result['id'], $id);
     // typeahead
     $result = self::$environ->fixJson(UserCommands::userTypeaheadList('ome', '', self::$environ->website));
     $this->assertTrue($result['count'] > 0);
     // change password
     UserCommands::changePassword($id, 'newpassword', $id);
     // Delete
     $result = UserCommands::deleteUsers(array($id));
     $this->assertTrue($result > 0);
 }