master
 1import EventAggregator from '../event-aggregator';
 2
 3describe("EventAggregator", () => {
 4  class TestSubscriber {
 5    notify(event) {
 6      this.called = true;
 7      this.calledWith = event;
 8    }
 9  }
10
11  let subject = null;
12
13  beforeEach(() => {
14    subject = new EventAggregator();
15  });
16
17  describe("#publish", () => {
18    it ("publishes the event to all interested subscribers", () => {
19      let subscriber = new TestSubscriber();
20      let otherSubscriber = new TestSubscriber();
21      subject.subscribe('LOGGED_IN', subscriber);
22      subject.subscribe('LOGGED_IN', otherSubscriber);
23      subject.publish({ event: 'LOGGED_IN', username: 'blah' })
24
25      expect(subscriber.called).toBeTruthy();
26      expect(subscriber.calledWith.username).toEqual('blah');
27      expect(otherSubscriber.called).toBeTruthy();
28      expect(otherSubscriber.calledWith.username).toEqual('blah');
29    });
30
31    it ("does not publish events to subscribers interested in other events", function() {
32      let subscriber = new TestSubscriber();
33      subject.subscribe('LOGGED_IN', subscriber);
34      subject.publish({ event: 'LOGGED_OUT' })
35
36      expect(subscriber.called).toBeFalsy();
37      expect(subscriber.calledWith).toBeUndefined();
38    });
39  });
40
41  describe("#unsubscribe", () => {
42    it ("unsubscribes a listener", () => {
43      let subscriber = new TestSubscriber();
44      let otherSubscriber = new TestSubscriber();
45      subject.subscribe('LOGGED_IN', subscriber);
46      subject.subscribe('LOGGED_IN', otherSubscriber);
47
48      subject.unsubscribe(subscriber);
49
50      subject.publish({ event: 'LOGGED_IN', username: 'blah' })
51
52      expect(subscriber.called).toBeFalsy();
53      expect(subscriber.calledWith).toBeUndefined();
54
55      expect(otherSubscriber.called).toBeTruthy();
56      expect(otherSubscriber.calledWith).toBeTruthy();
57    });
58  });
59});