/**
 * @description - Function will create a database with the supplied name
 *                and also create an object store with the specified name.
 *                If a db with the name dbName exists, this will raze the
 *                existing DB beforehand.
 * @param {string} dbName
 * @param {string} objectStoreName
 * @param {testCase} t
 * @returns {Promise} - A promise that resolves to an indexedDB open request
 */
function createDB(dbName, objectStoreName, t) {
  return new Promise((resolve, reject) => {
    const openRequest = indexedDB.open(dbName);
    t.add_cleanup(() => {
      indexedDB.deleteDatabase(dbName);
    });

    openRequest.onerror = () => {
      reject(openRequest.error);
    };
    openRequest.onsuccess = () => {
      resolve(openRequest.result);
    };
    openRequest.onupgradeneeded = event => {
      openRequest.result.createObjectStore(objectStoreName);
    };
  });
}

/**
 * @description - This function will wrap an IDBTransaction in a promise,
 *                resolving in the oncomplete() method and rejecting with the
 *                transaction error in the onabort() case.
 * @param {IDBTransaction} transaction - The transaction to wrap in a promise.
 * @returns {Promise} - A promise that resolves when the transaction is either
 *                      aborted or completed.
 */
function transactionPromise(transaction) {
  return new Promise((resolve, reject) => {
    transaction.onabort = () => { reject(transaction.error); };
    transaction.oncomplete = () => { resolve(); };
  });
}
