Odoo GraphQL Subscription using Node, Express JS for Sample
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

95 lines
2.5 KiB

import assert from 'assert';
import { testMethodProperty } from './properties.js';
describe('from', () => {
const iterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
},
};
it('is a method on Observable', () => {
testMethodProperty(Observable, 'from', {
configurable: true,
writable: true,
length: 1,
});
});
it('throws if the argument is null', () => {
assert.throws(() => Observable.from(null));
});
it('throws if the argument is undefined', () => {
assert.throws(() => Observable.from(undefined));
});
it('throws if the argument is not observable or iterable', () => {
assert.throws(() => Observable.from({}));
});
describe('observables', () => {
it('returns the input if the constructor matches "this"', () => {
let ctor = function() {};
let observable = new Observable(() => {});
observable.constructor = ctor;
assert.equal(Observable.from.call(ctor, observable), observable);
});
it('wraps the input if it is not an instance of Observable', () => {
let obj = {
'constructor': Observable,
[Symbol.observable]() { return this },
};
assert.ok(Observable.from(obj) !== obj);
});
it('throws if @@observable property is not a method', () => {
assert.throws(() => Observable.from({
[Symbol.observable]: 1
}));
});
it('returns an observable wrapping @@observable result', () => {
let inner = {
subscribe(x) {
observer = x;
return () => { cleanupCalled = true };
},
};
let observer;
let cleanupCalled = true;
let observable = Observable.from({
[Symbol.observable]() { return inner },
});
observable.subscribe();
assert.equal(typeof observer.next, 'function');
observer.complete();
assert.equal(cleanupCalled, true);
});
});
describe('iterables', () => {
it('throws if @@iterator is not a method', () => {
assert.throws(() => Observable.from({ [Symbol.iterator]: 1 }));
});
it('returns an observable wrapping iterables', async () => {
let calls = [];
let subscription = Observable.from(iterable).subscribe({
next(v) { calls.push(['next', v]) },
complete() { calls.push(['complete']) },
});
assert.deepEqual(calls, []);
await null;
assert.deepEqual(calls, [
['next', 1],
['next', 2],
['next', 3],
['complete'],
]);
});
});
});