@ruvyxa/testing 1.0.30 → 1.1.0

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/README.md CHANGED
@@ -1,7 +1,23 @@
1
- # @ruvyxa/testing
1
+ <p align="center">
2
+ <a href="https://github.com/thirawat27/Ruvyxa">
3
+ <img src="https://raw.githubusercontent.com/thirawat27/Ruvyxa/main/assets/branding/ruvyxa.png" alt="Ruvyxa" width="140" height="140" />
4
+ </a>
5
+ </p>
2
6
 
3
- Small framework-shaped test doubles for Ruvyxa loaders, actions, and caches. They run in Node,
4
- Vitest, or Jest without starting a Ruvyxa server.
7
+ <h1 align="center">@ruvyxa/testing</h1>
8
+
9
+ <p align="center">
10
+ Small framework-shaped test doubles for Ruvyxa loaders, actions, and caches. They run in Node,<br/>
11
+ Vitest, or Jest without starting a Ruvyxa server.
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/@ruvyxa/testing"><img src="https://img.shields.io/npm/v/@ruvyxa/testing?style=flat-square" alt="npm version" /></a>
16
+ <a href="https://www.npmjs.com/package/@ruvyxa/testing"><img src="https://img.shields.io/node/v/@ruvyxa/testing?style=flat-square&label=node" alt="Supported Node version" /></a>
17
+ <img src="https://img.shields.io/badge/license-Apache%202.0-green?style=flat-square" alt="License" />
18
+ </p>
19
+
20
+ ---
5
21
 
6
22
  ```ts
7
23
  import { mockAction, mockCache, mockLoader } from '@ruvyxa/testing'
package/dist/index.d.ts CHANGED
@@ -17,6 +17,8 @@ export interface MockCacheCall {
17
17
  key: string;
18
18
  ttl?: string;
19
19
  swr?: string;
20
+ tags: readonly string[];
21
+ scope: 'deployment' | 'request';
20
22
  hit: boolean;
21
23
  }
22
24
  export interface MockCache extends MockControl<MockCacheCall> {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,MAAM,EACP,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAA;IAChC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;AAE9E,wBAAgB,UAAU,CAAC,OAAO,EAChC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAC1E,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAM,GACpC,UAAU,CAAC,OAAO,CAAC,CAsBrB;AAED,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,GACrE,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG;IACpC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1C,CAAA;AAEH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EACxC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAClF,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAM,GAC5C,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAgC7B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW,CAAC,aAAa,CAAC;IAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAAG,SAAS,CA6CjF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,MAAM,EACP,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAA;IAChC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;AAE9E,wBAAgB,UAAU,CAAC,OAAO,EAChC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAC1E,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAM,GACpC,UAAU,CAAC,OAAO,CAAC,CAsBrB;AAED,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,GACrE,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG;IACpC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1C,CAAA;AAEH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EACxC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAClF,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAM,GAC5C,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAgC7B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/B,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW,CAAC,aAAa,CAAC;IAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAAG,SAAS,CAwDjF"}
package/dist/index.js CHANGED
@@ -60,6 +60,8 @@ export function mockCache(seed = {}) {
60
60
  const callable = (key) => {
61
61
  let ttl;
62
62
  let swr;
63
+ let tags = [];
64
+ let scope = 'deployment';
63
65
  const builder = {
64
66
  ttl(value) {
65
67
  ttl = value;
@@ -69,13 +71,23 @@ export function mockCache(seed = {}) {
69
71
  swr = value;
70
72
  return builder;
71
73
  },
74
+ tags(...values) {
75
+ // Code-unit order, matching `cache().tags()` in @ruvyxa/core.
76
+ tags = [...new Set(values)].sort();
77
+ return builder;
78
+ },
79
+ scope(value) {
80
+ scope = value;
81
+ return builder;
82
+ },
72
83
  async get(producer) {
73
- const hit = values.has(key);
74
- calls.push({ key, ttl, swr, hit });
84
+ const hit = scope === 'deployment' && values.has(key);
85
+ calls.push({ key, ttl, swr, tags, scope, hit });
75
86
  if (hit)
76
87
  return values.get(key);
77
88
  const value = await producer();
78
- values.set(key, value);
89
+ if (scope === 'deployment')
90
+ values.set(key, value);
79
91
  return value;
80
92
  },
81
93
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ruvyxa/testing",
3
- "version": "1.0.30",
3
+ "version": "1.1.0",
4
4
  "description": "Framework-native loader, action, and cache test doubles for Ruvyxa applications.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -14,30 +14,45 @@
14
14
  "keywords": [
15
15
  "ruvyxa",
16
16
  "testing",
17
+ "test",
18
+ "tests",
19
+ "test-utils",
17
20
  "vitest",
18
21
  "jest",
19
- "server-actions"
22
+ "unit-testing",
23
+ "mock",
24
+ "mocks",
25
+ "mocking",
26
+ "test-doubles",
27
+ "loaders",
28
+ "server-actions",
29
+ "cache",
30
+ "tdd",
31
+ "developer-tools",
32
+ "typescript",
33
+ "fullstack",
34
+ "framework"
20
35
  ],
21
36
  "repository": {
22
37
  "type": "git",
23
- "url": "git+https://github.com/thirawat27/ruvyxa.git",
38
+ "url": "git+https://github.com/thirawat27/Ruvyxa.git",
24
39
  "directory": "packages/@ruvyxa/testing"
25
40
  },
26
41
  "bugs": {
27
- "url": "https://github.com/thirawat27/ruvyxa/issues"
42
+ "url": "https://github.com/thirawat27/Ruvyxa/issues"
28
43
  },
29
- "homepage": "https://github.com/thirawat27/ruvyxa#readme",
44
+ "homepage": "https://github.com/thirawat27/Ruvyxa#readme",
30
45
  "engines": {
31
- "node": ">=22.13.0"
46
+ "node": ">=24.19.0"
32
47
  },
33
48
  "publishConfig": {
34
49
  "access": "public"
35
50
  },
36
51
  "peerDependencies": {
37
- "@ruvyxa/core": "^1.0.30"
52
+ "@ruvyxa/core": "^1.1.0"
38
53
  },
39
54
  "devDependencies": {
40
- "@ruvyxa/core": "^1.0.30"
55
+ "@ruvyxa/core": "^1.1.0"
41
56
  },
42
57
  "exports": {
43
58
  ".": {
package/src/index.ts CHANGED
@@ -91,6 +91,8 @@ export interface MockCacheCall {
91
91
  key: string
92
92
  ttl?: string
93
93
  swr?: string
94
+ tags: readonly string[]
95
+ scope: 'deployment' | 'request'
94
96
  hit: boolean
95
97
  }
96
98
 
@@ -107,6 +109,8 @@ export function mockCache(seed: Readonly<Record<string, unknown>> = {}): MockCac
107
109
  const callable = (key: string): CacheBuilder => {
108
110
  let ttl: string | undefined
109
111
  let swr: string | undefined
112
+ let tags: readonly string[] = []
113
+ let scope: 'deployment' | 'request' = 'deployment'
110
114
  const builder: CacheBuilder = {
111
115
  ttl(value) {
112
116
  ttl = value
@@ -116,12 +120,21 @@ export function mockCache(seed: Readonly<Record<string, unknown>> = {}): MockCac
116
120
  swr = value
117
121
  return builder
118
122
  },
123
+ tags(...values) {
124
+ // Code-unit order, matching `cache().tags()` in @ruvyxa/core.
125
+ tags = [...new Set(values)].sort()
126
+ return builder
127
+ },
128
+ scope(value) {
129
+ scope = value
130
+ return builder
131
+ },
119
132
  async get<T>(producer: () => T | Promise<T>) {
120
- const hit = values.has(key)
121
- calls.push({ key, ttl, swr, hit })
133
+ const hit = scope === 'deployment' && values.has(key)
134
+ calls.push({ key, ttl, swr, tags, scope, hit })
122
135
  if (hit) return values.get(key) as T
123
136
  const value = await producer()
124
- values.set(key, value)
137
+ if (scope === 'deployment') values.set(key, value)
125
138
  return value
126
139
  },
127
140
  }