add observable.once and tests
add integration tests
update integration tests