PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / utils / test / pluginUtils.spec.js
presto-player / src / admin / dashboard / utils / test Last commit date
classnames.spec.js 1 month ago dateUtils.spec.js 1 month ago formatters.spec.js 1 month ago pluginUtils.spec.js 1 month ago transformers.spec.js 1 month ago
pluginUtils.spec.js
95 lines
1 // Mock the WordPress and Force UI imports so importing pluginUtils doesn't
2 // require a live REST endpoint or a real toast renderer. We only exercise
3 // generateSuggestions, which is pure, but the module-level imports still
4 // resolve at require() time.
5 jest.mock("@wordpress/api-fetch", () => jest.fn());
6 jest.mock("@bsf/force-ui", () => ({
7 toast: { success: jest.fn(), info: jest.fn(), error: jest.fn() },
8 }));
9
10 import { generateSuggestions } from "../pluginUtils";
11
12 const makePlugins = (slugs) =>
13 slugs.map((slug) => ({ slug, init: `${slug}/${slug}.php`, name: slug }));
14
15 describe("generateSuggestions", () => {
16 it("lists non-active primaries first and stamps their status", () => {
17 const statuses = { p1: "inactive", p2: "not-installed" };
18 const out = generateSuggestions(
19 statuses,
20 makePlugins(["p1", "p2"]),
21 []
22 );
23 expect(out.map((p) => p.slug)).toEqual(["p1", "p2"]);
24 expect(out[0].status).toBe("inactive");
25 expect(out[1].status).toBe("not-installed");
26 });
27
28 it("fills remaining slots with non-active secondaries", () => {
29 const statuses = { p1: "inactive", s1: "inactive", s2: "inactive" };
30 const out = generateSuggestions(
31 statuses,
32 makePlugins(["p1"]),
33 makePlugins(["s1", "s2"])
34 );
35 expect(out.map((p) => p.slug)).toEqual(["p1", "s1", "s2"]);
36 });
37
38 it("skips active secondaries", () => {
39 const statuses = { p1: "inactive", s1: "active", s2: "inactive" };
40 const out = generateSuggestions(
41 statuses,
42 makePlugins(["p1"]),
43 makePlugins(["s1", "s2"])
44 );
45 expect(out.map((p) => p.slug)).toEqual(["p1", "s2"]);
46 });
47
48 it("falls back to active primaries to fill remaining slots up to 4", () => {
49 const statuses = { p1: "active", p2: "active" };
50 const out = generateSuggestions(
51 statuses,
52 makePlugins(["p1", "p2"]),
53 []
54 );
55 expect(out.map((p) => p.slug)).toEqual(["p1", "p2"]);
56 expect(out.every((p) => p.status === "active")).toBe(true);
57 });
58
59 it("caps the result at 4 items", () => {
60 const statuses = {
61 p1: "inactive",
62 p2: "inactive",
63 p3: "inactive",
64 p4: "inactive",
65 p5: "inactive",
66 };
67 const out = generateSuggestions(
68 statuses,
69 makePlugins(["p1", "p2", "p3", "p4", "p5"]),
70 []
71 );
72 expect(out).toHaveLength(4);
73 expect(out.map((p) => p.slug)).toEqual(["p1", "p2", "p3", "p4"]);
74 });
75
76 it("preserves the original plugin fields alongside the status", () => {
77 const statuses = { p1: "inactive" };
78 const out = generateSuggestions(
79 statuses,
80 makePlugins(["p1"]),
81 []
82 );
83 expect(out[0]).toMatchObject({
84 slug: "p1",
85 init: "p1/p1.php",
86 name: "p1",
87 status: "inactive",
88 });
89 });
90
91 it("returns an empty array when both lists are empty", () => {
92 expect(generateSuggestions({}, [], [])).toEqual([]);
93 });
94 });
95