|
| 1 | +import { Tinytest } from "meteor/tinytest"; |
| 2 | +import { Session } from "meteor/session"; |
| 3 | + |
| 4 | +import { default as useSession } from './use-session'; |
| 5 | + |
| 6 | + |
| 7 | +Tinytest.add('useSession default value', function (test) { |
| 8 | + Session.delete('test1'); |
| 9 | + |
| 10 | + useSession('test1'); |
| 11 | + |
| 12 | + test.isFalse(Object.prototype.hasOwnProperty.call(Session.keys, 'test1'), |
| 13 | + 'Should not set default value without second arg'); |
| 14 | + |
| 15 | + useSession('test2', 'value1') |
| 16 | + test.equal(Session.keys['test2'], '"value1"', |
| 17 | + 'Should set default value with second arg'); |
| 18 | + |
| 19 | + useSession('test2', 'value2'); |
| 20 | + test.equal(Session.keys['test2'], '"value1"', |
| 21 | + 'Second arg should not overwrite existing set value'); |
| 22 | + |
| 23 | + useSession('test2'); |
| 24 | + test.equal(Session.keys['test2'], '"value1"', |
| 25 | + 'Undefined second arg should overwrite existing value'); |
| 26 | +}); |
| 27 | + |
| 28 | + |
| 29 | +Tinytest.add('useSession reactivity', function (test) { |
| 30 | + Session.delete('test3'); |
| 31 | + |
| 32 | + const store = useSession('test3', 'initial'); |
| 33 | + |
| 34 | + let setterCalled = 0; |
| 35 | + let setterCalledWith; |
| 36 | + |
| 37 | + function setter(value) { |
| 38 | + setterCalled += 1; |
| 39 | + setterCalledWith = value; |
| 40 | + } |
| 41 | + |
| 42 | + const unsub = store.subscribe(setter); |
| 43 | + test.equal(setterCalled, 1, 'Subscribe should have called setter once'); |
| 44 | + test.equal(setterCalledWith, "initial", 'Subscribe should have set initial value'); |
| 45 | + |
| 46 | + store.set("initial"); |
| 47 | + test.equal(setterCalled, 1, 'Setter should not be called if value is not changed'); |
| 48 | + |
| 49 | + Session.set("test3", "initial"); |
| 50 | + test.equal(setterCalled, 1, 'Setter should not be called if value is not changed via Session'); |
| 51 | + |
| 52 | + Session.get("test3"); |
| 53 | + test.equal(setterCalled, 1, 'Setter should not be called on Session.get()'); |
| 54 | + |
| 55 | + store.set("new"); |
| 56 | + test.equal(setterCalled, 2, 'Setter should be called if value is changed via set()'); |
| 57 | + test.equal(setterCalledWith, "new", 'Setter should be called with new value on set()'); |
| 58 | + |
| 59 | + Session.set("test3", "newer"); |
| 60 | + test.equal(setterCalled, 3, 'Setter should be called if value is changed via Session.set()'); |
| 61 | + test.equal(setterCalledWith, "newer", 'Setter should be called with new value on Session.set()'); |
| 62 | + |
| 63 | + unsub(); |
| 64 | + |
| 65 | + test.equal(setterCalled, 3, 'Unsubscribe should not call setter'); |
| 66 | + |
| 67 | + store.set("newest"); |
| 68 | + test.equal(setterCalled, 3, 'Setter may not be called after unsubscribe'); |
| 69 | + |
| 70 | + Session.set("test3", "newest"); |
| 71 | + test.equal(setterCalled, 3, 'Setter may not be called after unsubscribe'); |
| 72 | +}); |
0 commit comments