import {mount} from 'enzyme';
import {ComponentRegistry, React} from 'nylas-exports';
import {Notification} from 'nylas-component-kit';
import NotifWrapper from '../lib/notif-wrapper';
const stubNotif = (priority) => {
return class extends React.Component {
static displayName = `NotifPriority${priority}`;
static containerRequired = false;
render() { return }
}
};
const checkHighestPriority = (expectedPriority, wrapper) => {
const visibleElems = wrapper.find(".highest-priority")
expect(visibleElems.exists()).toEqual(true);
const titleElem = visibleElems.first().find('.title');
expect(titleElem.exists()).toEqual(true);
expect(titleElem.text().trim()).toEqual(`Priority ${expectedPriority}`);
// Make sure there's only one highest-priority elem
expect(visibleElems.get(1)).toEqual(undefined);
}
describe("NotifPriority", function notifPriorityTests() {
beforeEach(() => {
this.wrapper = mount()
this.trigger = () => {
ComponentRegistry.trigger();
this.wrapper.get(0).update();
}
})
describe("When there is only one notification", () => {
beforeEach(() => {
ComponentRegistry._clear();
ComponentRegistry.register(stubNotif(5), {role: 'RootSidebar:Notifications'})
this.trigger();
})
it("should mark it as highest-priority", () => {
checkHighestPriority(5, this.wrapper);
})
})
describe("when there are multiple notifications", () => {
beforeEach(() => {
this.components = [stubNotif(5), stubNotif(7), stubNotif(3), stubNotif(2)]
ComponentRegistry._clear();
this.components.forEach((item) => {
ComponentRegistry.register(item, {role: 'RootSidebar:Notifications'})
})
this.trigger();
})
it("should mark the proper one as highest-priority", () => {
checkHighestPriority(7, this.wrapper);
})
it("properly updates when a highest-priority notification is removed", () => {
ComponentRegistry.unregister(this.components[1])
this.trigger();
checkHighestPriority(5, this.wrapper);
})
it("properly updates when a higher priority notifcation is added", () => {
ComponentRegistry.register(stubNotif(10), {role: 'RootSidebar:Notifications'});
this.trigger();
checkHighestPriority(10, this.wrapper);
})
})
});