@prosopo/procaptcha-react 2.9.97 → 2.9.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +8 -8
- package/.turbo/turbo-build$colon$tsc.log +21 -21
- package/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +30 -0
- package/dist/cjs/components/CaptchaComponent.cjs +4 -5
- package/dist/cjs/components/CaptchaWidget.cjs +4 -12
- package/dist/cjs/components/ProcaptchaWidget.cjs +8 -6
- package/dist/components/CaptchaComponent.d.ts.map +1 -1
- package/dist/components/CaptchaComponent.js +4 -5
- package/dist/components/CaptchaComponent.js.map +1 -1
- package/dist/components/CaptchaWidget.d.ts.map +1 -1
- package/dist/components/CaptchaWidget.js +4 -12
- package/dist/components/CaptchaWidget.js.map +1 -1
- package/dist/components/ProcaptchaWidget.d.ts.map +1 -1
- package/dist/components/ProcaptchaWidget.js +8 -6
- package/dist/components/ProcaptchaWidget.js.map +1 -1
- package/dist/tests/button.unit.test.d.ts +2 -0
- package/dist/tests/button.unit.test.d.ts.map +1 -0
- package/dist/tests/button.unit.test.js +113 -0
- package/dist/tests/button.unit.test.js.map +1 -0
- package/dist/tests/captchaComponent.unit.test.d.ts +2 -0
- package/dist/tests/captchaComponent.unit.test.d.ts.map +1 -0
- package/dist/tests/captchaComponent.unit.test.js +141 -0
- package/dist/tests/captchaComponent.unit.test.js.map +1 -0
- package/dist/tests/captchaWidget.unit.test.d.ts +2 -0
- package/dist/tests/captchaWidget.unit.test.d.ts.map +1 -0
- package/dist/tests/captchaWidget.unit.test.js +191 -0
- package/dist/tests/captchaWidget.unit.test.js.map +1 -0
- package/dist/tests/collector.unit.test.d.ts +2 -0
- package/dist/tests/collector.unit.test.d.ts.map +1 -0
- package/dist/tests/collector.unit.test.js +109 -0
- package/dist/tests/collector.unit.test.js.map +1 -0
- package/dist/tests/harness.d.ts +12 -0
- package/dist/tests/harness.d.ts.map +1 -0
- package/dist/tests/harness.js +69 -0
- package/dist/tests/harness.js.map +1 -0
- package/dist/tests/modal.unit.test.d.ts +2 -0
- package/dist/tests/modal.unit.test.d.ts.map +1 -0
- package/dist/tests/modal.unit.test.js +72 -0
- package/dist/tests/modal.unit.test.js.map +1 -0
- package/dist/tests/procaptcha.unit.test.d.ts +2 -0
- package/dist/tests/procaptcha.unit.test.d.ts.map +1 -0
- package/dist/tests/procaptcha.unit.test.js +57 -0
- package/dist/tests/procaptcha.unit.test.js.map +1 -0
- package/dist/tests/procaptchaReact.test-d.d.ts +2 -0
- package/dist/tests/procaptchaReact.test-d.d.ts.map +1 -0
- package/dist/tests/procaptchaReact.test-d.js +72 -0
- package/dist/tests/procaptchaReact.test-d.js.map +1 -0
- package/dist/tests/procaptchaWidget.unit.test.d.ts +2 -0
- package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
- package/dist/tests/procaptchaWidget.unit.test.js +403 -0
- package/dist/tests/procaptchaWidget.unit.test.js.map +1 -0
- package/dist/tests/render.d.ts +23 -0
- package/dist/tests/render.d.ts.map +1 -0
- package/dist/tests/render.js +77 -0
- package/dist/tests/render.js.map +1 -0
- package/dist/tests/setup.d.ts +5 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +3 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/util.unit.test.d.ts +2 -0
- package/dist/tests/util.unit.test.d.ts.map +1 -0
- package/dist/tests/util.unit.test.js +84 -0
- package/dist/tests/util.unit.test.js.map +1 -0
- package/package.json +9 -5
- package/vite.test.config.ts +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/tests/harness.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAEZ,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAC;AAQxB,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,MAAM,eACP,OAAO,CAAC,2BAA2B,CAAC,KAC7C,2BAID,CAAC;AAEH,eAAO,MAAM,KAAK,eACN,OAAO,CAAC,eAAe,CAAC,KACjC,eAkBD,CAAC;AAEH,eAAO,MAAM,OAAO,QAAO,OAEzB,CAAC;AAEH,eAAO,MAAM,cAAc,SAAS,MAAM,KAAkB,cAG1D,CAAC;AAGH,eAAO,MAAM,OAAO,eAAe,OAAO,CAAC,OAAO,CAAC,KAAQ,OAkBzD,CAAC;AAEH,eAAO,MAAM,iBAAiB,eAClB,OAAO,CAAC,mBAAmB,CAAC,KACrC,mBAOD,CAAC;AAEH,eAAO,MAAM,YAAY,eACb,OAAO,CAAC,iBAAiB,CAAC,KACnC,iBAKD,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CaptchaItemTypes, } from "@prosopo/types";
|
|
2
|
+
export const PROVIDER_URL = "https://provider.one";
|
|
3
|
+
export const USER_ADDRESS = "user-address";
|
|
4
|
+
export const SITE_KEY = "site-key";
|
|
5
|
+
export const config = (overrides = {}) => ({
|
|
6
|
+
account: { address: SITE_KEY },
|
|
7
|
+
defaultEnvironment: "production",
|
|
8
|
+
...overrides,
|
|
9
|
+
});
|
|
10
|
+
export const state = (overrides = {}) => ({
|
|
11
|
+
isHuman: false,
|
|
12
|
+
index: 0,
|
|
13
|
+
solutions: [],
|
|
14
|
+
captchaApi: undefined,
|
|
15
|
+
challenge: undefined,
|
|
16
|
+
showModal: false,
|
|
17
|
+
loading: false,
|
|
18
|
+
account: undefined,
|
|
19
|
+
dappAccount: undefined,
|
|
20
|
+
submission: undefined,
|
|
21
|
+
timeout: undefined,
|
|
22
|
+
successfullChallengeTimeout: undefined,
|
|
23
|
+
sendData: false,
|
|
24
|
+
attemptCount: 0,
|
|
25
|
+
error: undefined,
|
|
26
|
+
sessionId: undefined,
|
|
27
|
+
...overrides,
|
|
28
|
+
});
|
|
29
|
+
export const account = () => ({
|
|
30
|
+
account: { address: USER_ADDRESS },
|
|
31
|
+
});
|
|
32
|
+
export const randomProvider = (url = PROVIDER_URL) => ({
|
|
33
|
+
providerAccount: "provider-account",
|
|
34
|
+
provider: { url },
|
|
35
|
+
});
|
|
36
|
+
export const captcha = (overrides = {}) => ({
|
|
37
|
+
captchaId: "captcha-id-1",
|
|
38
|
+
captchaContentId: "captcha-content-id-1",
|
|
39
|
+
salt: "0xsalt",
|
|
40
|
+
target: "bus",
|
|
41
|
+
items: [
|
|
42
|
+
{
|
|
43
|
+
hash: "hash-1",
|
|
44
|
+
data: "https://provider.one/img/1.png",
|
|
45
|
+
type: CaptchaItemTypes.Image,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
hash: "hash-2",
|
|
49
|
+
data: "https://provider.one/img/2.png",
|
|
50
|
+
type: CaptchaItemTypes.Image,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
...overrides,
|
|
54
|
+
});
|
|
55
|
+
export const challengeResponse = (overrides = {}) => ({
|
|
56
|
+
status: "ok",
|
|
57
|
+
captchas: [captcha()],
|
|
58
|
+
requestHash: "0xrequest-hash",
|
|
59
|
+
timestamp: "1700000000000",
|
|
60
|
+
signature: { provider: { requestHash: "0xprovider-request-hash" } },
|
|
61
|
+
...overrides,
|
|
62
|
+
});
|
|
63
|
+
export const frictionless = (overrides = {}) => ({
|
|
64
|
+
provider: randomProvider(),
|
|
65
|
+
userAccount: account(),
|
|
66
|
+
restart: () => undefined,
|
|
67
|
+
...overrides,
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/tests/harness.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,gBAAgB,GAMhB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,CACrB,YAAkD,EAAE,EACtB,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC9B,kBAAkB,EAAE,YAAY;IAChC,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CACpB,YAAsC,EAAE,EACtB,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,2BAA2B,EAAE,SAAS;IACtC,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,SAAS;IACpB,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAY,EAAE,CAAC,CAAC;IACtC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,YAAY,EAAkB,EAAE,CAAC,CAAC;IAC9E,eAAe,EAAE,kBAAkB;IACnC,QAAQ,EAAE,EAAE,GAAG,EAAE;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,YAA8B,EAAE,EAAW,EAAE,CAAC,CAAC;IACtE,SAAS,EAAE,cAAc;IACzB,gBAAgB,EAAE,sBAAsB;IACxC,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,KAAK;IACb,KAAK,EAAE;QACN;YACC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,gBAAgB,CAAC,KAAK;SAC5B;QACD;YACC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,gBAAgB,CAAC,KAAK;SAC5B;KACD;IACD,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,YAA0C,EAAE,EACtB,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IACrB,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE;IACnE,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,YAAwC,EAAE,EACtB,EAAE,CAAC,CAAC;IACxB,QAAQ,EAAE,cAAc,EAAE;IAC1B,WAAW,EAAE,OAAO,EAAE;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;IACxB,GAAG,SAAS;CACZ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/modal.unit.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
3
|
+
import Modal from "../components/Modal.js";
|
|
4
|
+
import { mount } from "./render.js";
|
|
5
|
+
let mounted;
|
|
6
|
+
const render = (show, children = _jsx("p", { children: "challenge" })) => {
|
|
7
|
+
mounted.render(_jsx(Modal, { show: show, children: children }));
|
|
8
|
+
};
|
|
9
|
+
const outer = () => {
|
|
10
|
+
const element = document.querySelector(".prosopo-modalOuter");
|
|
11
|
+
if (!element)
|
|
12
|
+
throw new Error("expected the modal to be rendered");
|
|
13
|
+
return element;
|
|
14
|
+
};
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
mounted = mount();
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
mounted.unmount();
|
|
20
|
+
});
|
|
21
|
+
describe("where the modal renders", () => {
|
|
22
|
+
test("attaches itself to the document body, not to the widget", () => {
|
|
23
|
+
render(true);
|
|
24
|
+
expect(outer().parentElement).toBe(document.body);
|
|
25
|
+
expect(mounted.container.querySelector(".prosopo-modalOuter")).toBeNull();
|
|
26
|
+
});
|
|
27
|
+
test("renders its children inside the inner panel", () => {
|
|
28
|
+
render(true);
|
|
29
|
+
const inner = outer().querySelector(".prosopo-modalInner");
|
|
30
|
+
expect(inner?.textContent).toBe("challenge");
|
|
31
|
+
});
|
|
32
|
+
test("renders an empty panel when there is nothing to show", () => {
|
|
33
|
+
render(true, null);
|
|
34
|
+
expect(outer().querySelector(".prosopo-modalInner")?.textContent).toBe("");
|
|
35
|
+
});
|
|
36
|
+
test("is removed from the body when the widget unmounts", () => {
|
|
37
|
+
render(true);
|
|
38
|
+
mounted.unmount();
|
|
39
|
+
expect(document.querySelector(".prosopo-modalOuter")).toBeNull();
|
|
40
|
+
mounted = mount();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("showing and hiding", () => {
|
|
44
|
+
test("a shown modal lays its contents out", () => {
|
|
45
|
+
render(true);
|
|
46
|
+
expect(outer().style.display).toBe("flex");
|
|
47
|
+
});
|
|
48
|
+
test("a hidden modal stays in the DOM but is not displayed", () => {
|
|
49
|
+
render(false);
|
|
50
|
+
expect(outer().style.display).toBe("none");
|
|
51
|
+
expect(outer().textContent).toBe("challenge");
|
|
52
|
+
});
|
|
53
|
+
test("toggling show flips the display without remounting", () => {
|
|
54
|
+
render(false);
|
|
55
|
+
const before = outer();
|
|
56
|
+
render(true);
|
|
57
|
+
expect(outer()).toBe(before);
|
|
58
|
+
expect(outer().style.display).toBe("flex");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("stacking", () => {
|
|
62
|
+
test("sits above everything a host page is likely to stack", () => {
|
|
63
|
+
render(true);
|
|
64
|
+
expect(outer().style.zIndex).toBe("2147483646");
|
|
65
|
+
});
|
|
66
|
+
test("covers the viewport so the page behind cannot be clicked", () => {
|
|
67
|
+
render(true);
|
|
68
|
+
expect(outer().style.position).toBe("fixed");
|
|
69
|
+
expect(outer().style.minHeight).toBe("100vh");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=modal.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.unit.test.js","sourceRoot":"","sources":["../../src/tests/modal.unit.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procaptcha.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { act } from "react";
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
|
+
import Procaptcha from "../components/Procaptcha.js";
|
|
5
|
+
import { config } from "./harness.js";
|
|
6
|
+
import { mount } from "./render.js";
|
|
7
|
+
const seen = [];
|
|
8
|
+
vi.mock("../components/ProcaptchaWidget.js", () => ({
|
|
9
|
+
default: (props) => {
|
|
10
|
+
seen.push(props);
|
|
11
|
+
return _jsx("div", { "data-cy": "widget-stub", children: "widget" });
|
|
12
|
+
},
|
|
13
|
+
}));
|
|
14
|
+
let mounted;
|
|
15
|
+
const props = (overrides = {}) => ({
|
|
16
|
+
config: config(),
|
|
17
|
+
callbacks: {},
|
|
18
|
+
i18n: undefined,
|
|
19
|
+
...overrides,
|
|
20
|
+
});
|
|
21
|
+
const settle = async () => {
|
|
22
|
+
await act(async () => {
|
|
23
|
+
await Promise.resolve();
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
seen.length = 0;
|
|
28
|
+
mounted = mount();
|
|
29
|
+
});
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
mounted.unmount();
|
|
32
|
+
});
|
|
33
|
+
describe("the lazy boundary", () => {
|
|
34
|
+
test("renders the widget once the chunk arrives", async () => {
|
|
35
|
+
mounted.render(_jsx(Procaptcha, { ...props() }));
|
|
36
|
+
await settle();
|
|
37
|
+
expect(mounted.container.querySelector('[data-cy="widget-stub"]')).not.toBeNull();
|
|
38
|
+
});
|
|
39
|
+
test("hands the widget every prop it was given", async () => {
|
|
40
|
+
const callbacks = { onHuman: vi.fn() };
|
|
41
|
+
const given = props({ callbacks, autoStart: true });
|
|
42
|
+
mounted.render(_jsx(Procaptcha, { ...given }));
|
|
43
|
+
await settle();
|
|
44
|
+
expect(seen[0]).toMatchObject({
|
|
45
|
+
callbacks,
|
|
46
|
+
autoStart: true,
|
|
47
|
+
config: given.config,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
test("does not add props of its own", async () => {
|
|
51
|
+
const given = props();
|
|
52
|
+
mounted.render(_jsx(Procaptcha, { ...given }));
|
|
53
|
+
await settle();
|
|
54
|
+
expect(Object.keys(seen[0] ?? {}).sort()).toEqual(Object.keys(given).sort());
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=procaptcha.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procaptcha.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procaptchaReact.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { assertType, describe, expectTypeOf, test } from "vitest";
|
|
2
|
+
import Procaptcha from "../components/Procaptcha.js";
|
|
3
|
+
import addDataAttr from "../util/index.js";
|
|
4
|
+
describe("the package's public surface", () => {
|
|
5
|
+
test("Procaptcha takes exactly the shared props type", () => {
|
|
6
|
+
expectTypeOf(Procaptcha).parameter(0).toEqualTypeOf();
|
|
7
|
+
});
|
|
8
|
+
test("Procaptcha renders an element rather than a fragment or void", () => {
|
|
9
|
+
expectTypeOf(Procaptcha).returns.toMatchTypeOf();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
describe("CaptchaWidget's props", () => {
|
|
13
|
+
test("takes a single captcha, not the whole challenge", () => {
|
|
14
|
+
expectTypeOf().toEqualTypeOf();
|
|
15
|
+
});
|
|
16
|
+
test("reports a selection as a hash and a pair of coordinates", () => {
|
|
17
|
+
expectTypeOf().toEqualTypeOf();
|
|
18
|
+
});
|
|
19
|
+
test("accepts only the two themes the palette defines", () => {
|
|
20
|
+
expectTypeOf().toEqualTypeOf();
|
|
21
|
+
});
|
|
22
|
+
test("rejects a theme name the palette does not have", () => {
|
|
23
|
+
assertType("blue");
|
|
24
|
+
});
|
|
25
|
+
test("holds the solution as hash-plus-coordinates triples", () => {
|
|
26
|
+
expectTypeOf().toEqualTypeOf();
|
|
27
|
+
});
|
|
28
|
+
test("cannot be rendered without a solution to display", () => {
|
|
29
|
+
assertType({
|
|
30
|
+
challenge: {},
|
|
31
|
+
solution: [],
|
|
32
|
+
onClick: () => undefined,
|
|
33
|
+
themeColor: "light",
|
|
34
|
+
});
|
|
35
|
+
assertType({
|
|
36
|
+
challenge: {},
|
|
37
|
+
onClick: () => undefined,
|
|
38
|
+
themeColor: "light",
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("CaptchaComponent's props", () => {
|
|
43
|
+
test("takes the round to render as a number", () => {
|
|
44
|
+
expectTypeOf().toEqualTypeOf();
|
|
45
|
+
});
|
|
46
|
+
test("takes one solution list per round", () => {
|
|
47
|
+
expectTypeOf().toEqualTypeOf();
|
|
48
|
+
});
|
|
49
|
+
test("lets a click be reported without coordinates", () => {
|
|
50
|
+
expectTypeOf().toEqualTypeOf();
|
|
51
|
+
});
|
|
52
|
+
test("takes callbacks that report nothing back", () => {
|
|
53
|
+
expectTypeOf().toEqualTypeOf();
|
|
54
|
+
expectTypeOf().toEqualTypeOf();
|
|
55
|
+
expectTypeOf().toEqualTypeOf();
|
|
56
|
+
expectTypeOf().toEqualTypeOf();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe("addDataAttr", () => {
|
|
60
|
+
test("returns an object of attributes, not the input", () => {
|
|
61
|
+
expectTypeOf(addDataAttr({ general: { cy: "x" } })).toBeObject();
|
|
62
|
+
});
|
|
63
|
+
test("takes both groups as optional", () => {
|
|
64
|
+
assertType(addDataAttr({}));
|
|
65
|
+
assertType(addDataAttr({ general: { cy: "x" } }));
|
|
66
|
+
assertType(addDataAttr({ dev: { cy: "x" } }));
|
|
67
|
+
});
|
|
68
|
+
test("rejects attribute values that are not strings", () => {
|
|
69
|
+
assertType(addDataAttr({ general: { cy: 1 } }));
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=procaptchaReact.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procaptchaReact.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAMlE,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC7C,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC3D,YAAY,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAmB,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACzE,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,aAAa,EAAgB,CAAC;IAChE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC5D,YAAY,EAAmC,CAAC,aAAa,EAAW,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACpE,YAAY,EAAiC,CAAC,aAAa,EAExD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC5D,YAAY,EAAoC,CAAC,aAAa,EAE3D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAE3D,UAAU,CAAmC,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAChE,YAAY,EAAkC,CAAC,aAAa,EAEzD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC7D,UAAU,CAAsC;YAC/C,SAAS,EAAE,EAAa;YACxB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;YACxB,UAAU,EAAE,OAAO;SACnB,CAAC,CAAC;QAEH,UAAU,CAAsC;YAC/C,SAAS,EAAE,EAAa;YACxB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;YACxB,UAAU,EAAE,OAAO;SACnB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IAGzC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAClD,YAAY,EAAkB,CAAC,aAAa,EAAU,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC9C,YAAY,EAAsB,CAAC,aAAa,EAE7C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAGzD,YAAY,EAAoB,CAAC,aAAa,EAE3C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACrD,YAAY,EAAqB,CAAC,aAAa,EAAc,CAAC;QAC9D,YAAY,EAAqB,CAAC,aAAa,EAAc,CAAC;QAC9D,YAAY,EAAmB,CAAC,aAAa,EAAc,CAAC;QAC5D,YAAY,EAAqB,CAAC,aAAa,EAAc,CAAC;IAC/D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC3D,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC1C,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,UAAU,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAG1D,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procaptchaWidget.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaWidget.unit.test.tsx"],"names":[],"mappings":""}
|