idb 0.6.5

A futures based crate for interacting with IndexedDB on browsers using webassembly
Documentation
use idb::Factory;
use tokio::sync::oneshot;
use wasm_bindgen_test::wasm_bindgen_test;

#[wasm_bindgen_test]
async fn test_open_request_upgrade_needed() {
    let factory = Factory::new().unwrap();
    factory.delete("test").unwrap().await.unwrap();

    let mut open_request = factory.open("test", Some(1)).unwrap();

    let (sender, receiver) = oneshot::channel();
    open_request.on_upgrade_needed(move |event| {
        sender.send(event).expect("channel send");
    });

    let database = open_request.await.unwrap();

    let event = receiver.await.unwrap();

    assert_eq!(event.old_version(), Ok(0));
    assert_eq!(event.new_version(), Ok(Some(1)));

    database.close();
    factory.delete("test").unwrap().await.unwrap();
}

#[wasm_bindgen_test]
async fn test_open_request_blocked() {
    let factory = Factory::new().unwrap();
    factory.delete("test").unwrap().await.unwrap();

    let open_request = factory.open("test", Some(1)).unwrap();
    let database = open_request.await.unwrap();

    let mut blocking_open_request = factory.open("test", Some(2)).unwrap();

    let (sender, receiver) = oneshot::channel();
    blocking_open_request.on_blocked(move |event| {
        sender.send(event).expect("channel send");
    });

    let event = receiver.await.unwrap();

    assert_eq!(event.old_version(), Ok(1));
    assert_eq!(event.new_version(), Ok(Some(2)));

    database.close();

    let database = blocking_open_request.await.unwrap();
    assert_eq!(database.version(), Ok(2));

    database.close();
    factory.delete("test").unwrap().await.unwrap();
}