function test_user_keys()
 {
     global $DB;
     $user_id = iclicker_service::require_user();
     $this->assertNotNull($user_id);
     // saving key for user should work
     $user_key = iclicker_service::makeUserKey($user_id, true);
     $this->assertNotNull($user_key);
     $keysCount = $DB->count_records(iclicker_service::USER_KEY_TABLENAME, array('user_id' => $user_id));
     $this->assertEqual(1, $keysCount);
     // getting key for user (from make)
     $user_key1 = iclicker_service::makeUserKey($user_id, false);
     $this->assertNotNull($user_key1);
     $this->assertEqual($user_key, $user_key1);
     // getting key for user (from get)
     $user_key1 = iclicker_service::getUserKey($user_id);
     $this->assertNotNull($user_key1);
     $this->assertEqual($user_key, $user_key1);
     // update the key should work
     $user_key2 = iclicker_service::makeUserKey($user_id, true);
     $this->assertNotNull($user_key2);
     $this->assertNotEqual($user_key, $user_key2);
     // trying to save another key for this user should fail
     $dupeUserKey = new stdClass();
     $dupeUserKey->user_id = $user_id;
     $dupeUserKey->user_key = 'x12xx3x3x43x44';
     try {
         $DB->insert_record(iclicker_service::USER_KEY_TABLENAME, $dupeUserKey);
         $this->fail("Should have thrown an exception");
     } catch (dml_exception $e) {
         $this->assertNotNull($e->getMessage());
     }
     // delete the key should work
     $DB->delete_records(iclicker_service::USER_KEY_TABLENAME, array('user_id' => $user_id));
     $user_key3 = iclicker_service::getUserKey($user_id);
     $this->assertNull($user_key3);
     // adding key2 should work since key1 is gone
     $user_key4 = iclicker_service::makeUserKey($user_id, true);
     $this->assertNotNull($user_key4);
     // cleanup
     $DB->delete_records(iclicker_service::USER_KEY_TABLENAME, array('user_id' => $user_id));
 }