diff --git a/src/components/ForwardDestinationsChart.test.js b/src/components/ForwardDestinationsChart.test.js new file mode 100644 index 0000000..c711101 --- /dev/null +++ b/src/components/ForwardDestinationsChart.test.js @@ -0,0 +1,56 @@ +/* Pi-hole: A black hole for Internet advertisements +* (c) 2017 Pi-hole, LLC (https://pi-hole.net) +* Network-wide ad blocking via your own hardware. +* +* Web Interface +* ForwardDestinationsChart component test +* +* This file is copyright under the latest version of the EUPL. +* Please see LICENSE file for your rights under this license. */ + +import React from "react"; +import { shallow } from "enzyme"; +import ForwardDestinationsChart from "./ForwardDestinationsChart"; +import fetchMock from "fetch-mock"; + +const endpoint = "/admin/api/stats/forward_destinations"; +const fakeData = [ + { name: "roberta.net", ip: "8.239.48.32", percent: 0.38411761010240625 }, + { name: "", ip: "89.60.252.186", percent: 0.2830935477791041 }, + { name: "christop.net", ip: "181.219.42.222", percent: 0.6249293208519193 } +]; + +it("shows loading indicator before first load", () => { + fetchMock.mock(endpoint, Promise.reject({ isCanceled: true })); + + const wrapper = shallow(); + + expect(wrapper.state().loading).toBeTruthy(); + expect(wrapper.children(".card-img-overlay")).toExist(); +}); + +it("hides loading indicator after first load", async () => { + fetchMock.mock(endpoint, fakeData); + + const wrapper = shallow(); + + await tick(); + wrapper.update(); + + expect(wrapper.state().loading).toBeFalsy(); + expect(wrapper.children(".card-img-overlay")).not.toExist(); +}); + +it("loads API data correctly", async () => { + fetchMock.mock(endpoint, fakeData); + + const wrapper = shallow(); + + await tick(); + wrapper.update(); + + expect(wrapper.state().colors).toEqual(["#20a8d8", "#f86c6b", "#4dbd74"]); + expect(wrapper.state().labels[0]).toEqual(fakeData[0].name); + expect(wrapper.state().labels[1]).toEqual(fakeData[1].ip); + expect(wrapper.state().data).toEqual(fakeData.map(entry => entry.percent)); +}); \ No newline at end of file