// META: script=support-promises.js
// META: timeout=long

/**
 * This file contains the webplatform smoke tests for the optional
 * relaxedDurability parameter of the IndexedDB transaction API.
 *
 * @author enne@chromium.org
 */

// Smoke test optional parameter on IndexedDB.transaction.
let cases = [
  undefined,
  {},
  {durability: "default"},
  {durability: "relaxed"},
  {durability: "strict"},
];

for (let i = 0; i < cases.length; ++i) {
  promise_test(async testCase => {
    const db = await createDatabase(testCase, db => {
      createBooksStore(testCase, db);
    });
    const txn = db.transaction(['books'], 'readwrite', cases[i]);
    const objectStore = txn.objectStore('books');
    objectStore.put({isbn: 'one', title: 'title1'});
    await promiseForTransaction(testCase, txn);

    const txn2 = db.transaction(['books'], 'readonly');
    const objectStore2 = txn2.objectStore('books');
    const getTitle1 = objectStore2.get('one');
    await promiseForTransaction(testCase, txn2);
    assert_array_equals(
        [getTitle1.result.title],
        ['title1'],
        'The title should match that which was put.');
    db.close();
  }, 'Committed data can be read back out: case ' + i);
}
