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});