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