labo-components
Version:
162 lines (136 loc) • 6.49 kB
JSX
import React from 'react';
import NISVCatalogueConfig from '../collection/mappings/NISVCatalogueConfig';
import NISV_GTAA_WIKIDATA from '../collection/mappings/entities/NISV_GTAA_WIKIDATA';
import QuickEntityViewer from '../components/search/QuickEntityViewer';
import IDUtil from '../util/IDUtil';
import SearchAPI from "../api/SearchAPI";
import {shallow} from 'enzyme';
import {mount} from 'enzyme';
import Enzyme from 'enzyme';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
Enzyme.configure({adapter: new Adapter()});
//TODO the tests work, but should be much more thorough/strict. Also all input/ouput data should be nice dummy data
//TODO mock the NISV_GTAA_WIKIDATA.formatPersonDetails function as well!!
//NOTE/FIXME/TODO: since the DUMMY_DATA completely depends on how fetchEntityDetails returns data, testing should focus on
// the proper OUTPUT of SearchAPI.grlc, which IS agnostic and is ultimately fed to the UI components
const DUMMY_ENTITY_ID = "http://data.beeldengeluid.nl/gtaa/100362";
const DUMMY_NAME = "DUMMY-NAME"
const DUMMY_LD_ENDPOINT = "BENG-PERSON-LD"
const DUMMY_DATA = { //part of real response, not fully turned into dummy values
"status": "ok", "result": {
"head": {"vars": ["s", "p", "o", "l"]},
"results": {
"bindings": [
{
"p": {"type": "uri", "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"},
"o": {"type": "uri", "value": "http://www.w3.org/2004/02/skos/core#Concept"}
}, {
"p": {"type": "uri", "value": "http://openskos.org/xmlns#set"},
"o": {"type": "uri", "value": "http://data.beeldengeluid.nl/gtaa"}
}, {
"p": {"type": "uri", "value": "http://openskos.org/xmlns#status"},
"o": {"type": "literal", "value": "approved"}
}, {
"p": {"type": "uri", "value": "http://www.w3.org/2004/02/skos/core#prefLabel"},
"o": {"type": "literal", "value": "DUMMY-NAME"}
}
]
}
}
}
const DUMMY_GRLC_PARAMS = { //not used yet for testing
"endpoint": DUMMY_LD_ENDPOINT,
"parameters":[
{"key":"gtaa","value": DUMMY_ENTITY_ID}
]
}
const DUMMY_QUERY_PARAMS = {
gtaa : DUMMY_ENTITY_ID
}
// ---------------------------------------------- TESTS -------------------------------------
describe("Component: QuickEntityViewer", () => {
it("test: basic render", () => {
let collectionConfig = new NISVCatalogueConfig();
const grlc = jest.fn().mockImplementation(function (endpoint, queryName, queryParams, formatFunc, callback) {
callback(NISV_GTAA_WIKIDATA.formatPersonDetails(DUMMY_DATA, DUMMY_QUERY_PARAMS));
});
SearchAPI.grlc = grlc.bind(SearchAPI);
const quickEntityViewer = shallow(
<QuickEntityViewer
entityID=""
entityType="person"
collectionConfig={collectionConfig}
termCategories={[]}
/>
);
expect(quickEntityViewer).toBeDefined();
expect(quickEntityViewer).toBeTruthy();
});
it("test: data is displayed", () => {
let collectionConfig = new NISVCatalogueConfig();
const grlc = jest.fn().mockImplementation(function (endpoint, queryName, queryParams, formatFunc, callback) {
callback(NISV_GTAA_WIKIDATA.formatPersonDetails(DUMMY_DATA, DUMMY_QUERY_PARAMS));
//return new XMLHttpRequest();
});
SearchAPI.grlc = grlc.bind(SearchAPI);
const quickEntityViewer = mount(
<QuickEntityViewer
entityID=""
entityType="person"
collectionConfig={collectionConfig}
termCategories={[]}
/>
);
expect(quickEntityViewer.find('table').exists()).toBe(true);
//disable below tests as we are not showing entity metadata anymore at present
//expect(quickEntityViewer.find("."+ IDUtil.cssClassName('id', "qev")).exists()).toBe(true);
//expect(quickEntityViewer.find("."+ IDUtil.cssClassName('quick-entity-viewer')).text()).toContain(DUMMY_ENTITY_ID);
expect(quickEntityViewer.find('.actions').exists()).toBe(true); // expect to find the search button div
expect(quickEntityViewer.find("."+ IDUtil.cssClassName('quick-entity-viewer')).text()).toContain(DUMMY_NAME);
expect(quickEntityViewer.find("."+ IDUtil.cssClassName('error', "qev")).exists()).toBe(false);
});
it("test: error if no data retrieved", () => {
let collectionConfig = new NISVCatalogueConfig();
const grlc = jest.fn().mockImplementation(function (endpoint, queryName, queryParams, formatFunc, callback) {
callback({"error": "something went wrong"});
});
SearchAPI.grlc = grlc.bind(SearchAPI);
const quickEntityViewer = mount(
<QuickEntityViewer
entityID=""
entityType="person"
collectionConfig={collectionConfig}
termCategories={[]}
/>
);
expect(quickEntityViewer.find('table').exists()).toBe(true);
//disable below test as we are not showing entity metadata anymore at present
//expect(quickEntityViewer.find("."+ IDUtil.cssClassName('id', "qev")).exists()).toBe(false);
expect(quickEntityViewer.find('.actions').exists()).toBe(false); // expect not to find the search button div
expect(quickEntityViewer.find("."+ IDUtil.cssClassName('quick-entity-viewer')).text()).toContain("Loading");
});
//TODO catch the React warning message:
//Failed prop type: The prop `collectionConfig` is marked as required in `QuickEntityViewer`, but its value is `null`
//TODO really check for all the consequences of not supplying a collectionConfig
it("test: error if no config", () => {
let collectionConfig = new NISVCatalogueConfig();
const grlc = jest.fn().mockImplementation(function (endpoint, queryName, queryParams, formatFunc, callback) {
callback(NISV_GTAA_WIKIDATA.formatPersonDetails(DUMMY_DATA, DUMMY_QUERY_PARAMS));
});
SearchAPI.grlc = grlc.bind(SearchAPI);
const quickEntityViewer = mount(
<QuickEntityViewer
entityID=""
entityType="person"
collectionConfig={null}
termCategories={[]}
/>
);
//TODO make sure to check that SearchAPI.grlc is not called (because of the missing config)
expect(quickEntityViewer.find('table').exists()).toBe(true);
//disable below test as we are not showing entity metadata anymore at present
//expect(quickEntityViewer.find("."+ IDUtil.cssClassName('id', "qev")).exists()).toBe(false);
expect(quickEntityViewer.find('.actions').exists()).toBe(false); // expect not to find the search button div
expect(quickEntityViewer.find("."+ IDUtil.cssClassName('quick-entity-viewer')).text()).toContain("Loading");
});
});