github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/ui/src/views/cluster/containers/events/events.spec.tsx (about) 1 // Copyright 2018 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 import React from "react"; 12 import { assert } from "chai"; 13 import { mount, shallow } from "enzyme"; 14 import _ from "lodash"; 15 import Long from "long"; 16 import * as sinon from "sinon"; 17 18 import "src/enzymeInit"; 19 import * as protos from "src/js/protos"; 20 import { EventBoxUnconnected as EventBox, EventRow, getEventInfo } from "src/views/cluster/containers/events"; 21 import { refreshEvents } from "src/redux/apiReducers"; 22 import { allEvents } from "src/util/eventTypes"; 23 import { ToolTipWrapper } from "src/views/shared/components/toolTip"; 24 25 type Event = protos.cockroach.server.serverpb.EventsResponse.Event; 26 27 function makeEventBox( 28 events: protos.cockroach.server.serverpb.EventsResponse.IEvent[], 29 refreshEventsFn: typeof refreshEvents, 30 ) { 31 return shallow( 32 <EventBox 33 events={events} 34 refreshEvents={refreshEventsFn} 35 eventsValid={true} 36 />, 37 ); 38 } 39 40 function makeEvent(event: Event) { 41 return mount(<EventRow event={event}></EventRow>); 42 } 43 44 describe("<EventBox>", function() { 45 let spy: sinon.SinonSpy; 46 47 beforeEach(function() { 48 spy = sinon.spy(); 49 }); 50 51 describe("refresh", function() { 52 it("refreshes events when mounted.", function () { 53 makeEventBox([], spy); 54 assert.isTrue(spy.called); 55 }); 56 }); 57 58 describe("attach", function() { 59 it("attaches event data to contained component", function () { 60 const eventsResponse = new protos.cockroach.server.serverpb.EventsResponse({ 61 events: [ 62 { 63 target_id: Long.fromNumber(1), 64 event_type: "test1", 65 }, 66 { 67 target_id: Long.fromNumber(2), 68 event_type: "test2", 69 }, 70 ], 71 }); 72 73 const provider = makeEventBox(eventsResponse.events, spy); 74 const eventRows = provider.children().first().children().first().children(); 75 const event1Props: any = eventRows.first().props(); 76 const event2Props: any = eventRows.at(1).props(); 77 assert.lengthOf(eventRows, 3); // 3rd row is "more events" link 78 assert.isDefined(event1Props.event); 79 assert.deepEqual(event1Props.event, eventsResponse.events[0]); 80 assert.isDefined(event2Props.event); 81 assert.deepEqual(event2Props.event, eventsResponse.events[1]); 82 }); 83 }); 84 }); 85 86 describe("<EventRow>", function () { 87 describe("attach", function () { 88 it("correctly renders a known event", function () { 89 const e = new protos.cockroach.server.serverpb.EventsResponse.Event({ 90 target_id: Long.fromNumber(1), 91 event_type: "create_database", 92 }); 93 94 const provider = makeEvent(e); 95 assert.isTrue(provider.find("div.events__message > span").text().includes("created database")); 96 assert.isTrue(provider.find(ToolTipWrapper).exists()); 97 }); 98 99 it("correctly renders an unknown event", function () { 100 const e = new protos.cockroach.server.serverpb.EventsResponse.Event({ 101 target_id: Long.fromNumber(1), 102 event_type: "unknown", 103 }); 104 const provider = makeEvent(e); 105 106 assert.isTrue(provider.find("div.events__message > span").text().includes("unknown")); 107 assert.isTrue(provider.find(ToolTipWrapper).exists()); 108 }); 109 }); 110 }); 111 112 describe("getEventInfo", function () { 113 it("covers every currently known event", function () { 114 _.each(allEvents, (eventType) => { 115 const event = new protos.cockroach.server.serverpb.EventsResponse.Event({ event_type: eventType }); 116 const eventContent = shallow(getEventInfo(event).content as React.ReactElement<any>); 117 assert.notMatch(eventContent.text(), /Unknown event type/); 118 }); 119 }); 120 });