varasto/test/varasto_test.gleam
2023-09-14 21:18:49 +03:00

72 lines
1.9 KiB
Gleam

import gleam/dynamic
import gleam/json
import gleeunit
import gleeunit/should
import plinth/javascript/storage
import varasto
pub fn main() {
gleeunit.main()
}
pub fn get_set_test() {
use <- run()
let assert Ok(local) = storage.local()
let s = varasto.new(local, int_list_reader(), int_list_writer())
should.be_ok(varasto.set(s, "Foo", [1, 2, 3]))
should.equal(varasto.get(s, "Foo"), Ok([1, 2, 3]))
}
pub fn set_limit_test() {
use <- run()
let assert Ok(local) = storage.local()
let s = varasto.new(local, str_reader(), str_writer())
should.be_ok(varasto.set(s, "Foo1", "Bar"))
should.be_ok(varasto.set(s, "Foo2", "Bar"))
should.be_ok(varasto.set(s, "Foo3", "Bar"))
should.be_ok(varasto.set(s, "Foo4", "Bar"))
should.be_ok(varasto.set(s, "Foo5", "Bar"))
should.be_error(varasto.set(s, "Foo6", "Bar"))
}
pub fn remove_test() {
use <- run()
let assert Ok(local) = storage.local()
let s = varasto.new(local, str_reader(), str_writer())
should.equal(varasto.remove(s, "not here"), Nil)
should.be_ok(varasto.set(s, "Foo", "Bar"))
should.equal(varasto.remove(s, "Foo"), Nil)
should.be_error(varasto.get(s, "Foo"))
}
pub fn clear_test() {
use <- run()
let assert Ok(session) = storage.session()
let s = varasto.new(session, str_reader(), str_writer())
should.be_ok(varasto.set(s, "Foo1", "Bar"))
should.be_ok(varasto.set(s, "Foo2", "Bar"))
should.be_ok(varasto.set(s, "Foo3", "Bar"))
should.be_ok(varasto.set(s, "Foo4", "Bar"))
should.be_ok(varasto.set(s, "Foo5", "Bar"))
varasto.clear(s)
should.equal(storage.length(session), 0)
}
fn int_list_reader() {
dynamic.list(dynamic.int)
}
fn int_list_writer() {
fn(val: List(Int)) { json.array(val, json.int) }
}
fn str_reader() {
dynamic.string
}
fn str_writer() {
fn(val: String) { json.string(val) }
}
@external(javascript, "./storage_test_ffi.mjs", "runWithMockStorage")
fn run(callback: fn() -> a) -> Nil