/
PropertyBase.spec.ts
120 lines (91 loc) · 4.21 KB
/
PropertyBase.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* eslint no-magic-numbers: 0 */
import { mount } from "enzyme";
import { DEFAULT_TOPOLOGY, defaultNS as NS } from "link-lib";
import { Literal, SomeTerm, Statement } from "rdflib";
import * as React from "react";
import * as ctx from "../../../test/fixtures";
import { withLRS } from "../../hocs/withLRS";
import { PropertyBase } from "../PropertyBase";
const label = NS.schema("name");
const subject = NS.example("41");
class CustomClass extends PropertyBase {
}
function getComp(linkedProp?: SomeTerm | undefined) {
const test = withLRS(CustomClass);
return React.createElement(
test,
{
label,
linkedProp,
subject,
topology: DEFAULT_TOPOLOGY,
},
);
}
describe("PropertyBase component", () => {
describe("shouldComponentUpdate", () => {
it("returns false without label", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
const nextProps = { subject };
expect(elem.shouldComponentUpdate(nextProps)).toEqual(false);
});
it("returns true when subject is changed", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
const nextProps = { label, subject: NS.example("different") };
expect(elem.shouldComponentUpdate(nextProps)).toEqual(true);
});
});
describe("getLinkedObjectProperty", () => {
it("returns linkedProp when present", () => {
const opts = ctx.fullCW(subject);
const linkedProp = new Literal("Some prop");
const comp = getComp(linkedProp);
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
expect(elem.getLinkedObjectProperty()).toEqual(linkedProp);
});
it("uses the render store when the property argument is given", () => {
const opts = ctx.fullCW(subject);
const linkedProp = new Literal("Some prop");
const comp = getComp(linkedProp);
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
expect(elem.getLinkedObjectProperty(NS.schema("text"))).toEqual(new Literal("text"));
});
it("uses the render store when linkedProp is not present", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
expect(elem.getLinkedObjectProperty()).toEqual(new Literal("title"));
});
});
describe("getLinkedObjectPropertyRaw", () => {
it("uses the render store to resolve", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
expect(elem.getLinkedObjectPropertyRaw()).toEqual([
new Statement(subject, label, new Literal("title"), NS.example("default")),
]);
});
it("allows the property to be passed", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp)).find(CustomClass).instance();
expect(elem.getLinkedObjectPropertyRaw(NS.example("tags"))).toEqual([
new Statement(subject, NS.example("tags"), NS.example("tag/0"), NS.example("default")),
new Statement(subject, NS.example("tags"), NS.example("tag/1"), NS.example("default")),
new Statement(subject, NS.example("tags"), NS.example("tag/2"), NS.example("default")),
new Statement(subject, NS.example("tags"), NS.example("tag/3"), NS.example("default")),
]);
});
});
it("renders an unhelpful message when subclass doesn't implement render", () => {
const opts = ctx.fullCW(subject);
const comp = getComp();
const elem = mount(opts.wrapComponent(comp));
expect(elem.find(CustomClass)).toHaveText("PropBase: title");
});
});