@stacksjs/testing 0.74.33 → 0.74.35

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/dist/database.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{config as l}from"@stacksjs/config";import{copyModelFiles as w,db as a,deleteFrameworkModels as y,dropSqliteTables as h,fetchSqliteFile as c,fetchTables as T,migrateAuthTables as S,migrateNotificationTables as g,migrateRbacTables as P,migrateTraitTables as E,ensureUtcDatetimeColumns as x,ensureUtcTimestampDefaults as A,runDatabaseMigration as u}from"@stacksjs/database";import{path as o}from"@stacksjs/path";import{fs as i,globSync as f}from"@stacksjs/storage";function m(){return l.database?.default||""}var r=null;function M(){if(r)return r;return r=`${c()}.snapshot`,r}async function d(){let t=[["auth",S],["notification",g],["RBAC",P],["trait",E],["utc-datetime",x],["utc-defaults",A]];for(let[e,n]of t)try{let s=await n();if(!s.success)console.error(`[testing] Failed to migrate ${e} tables: ${s.error}`)}catch(s){console.error(`[testing] Failed to migrate ${e} tables:`,s)}}async function v(){let t=`${l.database?.connections?.mysql?.name??"stacks"}_testing`;if(m()==="mysql")await a.unsafe(`CREATE DATABASE IF NOT EXISTS ${t}`).execute(),await u(),await d()}async function _(){await v();let t=m();if(t==="mysql")await F();if(t==="sqlite")await q()}async function F(){let t=await T();await a.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{for(let e of t)await a.unsafe(`TRUNCATE TABLE ${e}`).execute()}finally{await a.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}}async function k(){let t=c();if(!i.existsSync(t))await Bun.$`touch ${t}`;await h(),await y();let e=f([o.userModelsPath("*.ts"),o.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0});for(let n of e)await w(n);await u(),await d()}async function q(){let t=c(),e=M();if((()=>{if(!i.existsSync(e))return!0;let s=i.statSync(e).mtimeMs,p=f([o.userModelsPath("*.ts"),o.storagePath("framework/defaults/app/Models/**/*.ts"),o.userMigrationsPath("*.ts")],{absolute:!0});for(let b of p)try{if(i.statSync(b).mtimeMs>s)return!0}catch{}return!1})()){await k();try{await a.unsafe("PRAGMA wal_checkpoint(TRUNCATE)").execute(),i.copyFileSync(t,e)}catch{}return}i.copyFileSync(e,t)}function D(){let t=null;return{begin:async()=>{let e=`stacks_test_${Date.now()}_${Math.floor(Math.random()*1e6)}`;await a.unsafe(`SAVEPOINT ${e}`).execute(),t={rollback:async()=>{await a.unsafe(`ROLLBACK TO SAVEPOINT ${e}`).execute(),await a.unsafe(`RELEASE SAVEPOINT ${e}`).execute()}}},rollback:async()=>{if(!t)return;try{await t.rollback()}finally{t=null}}}}export{_ as refreshDatabase,v as setupDatabase,F as truncateMysql,k as truncateSqlite,q as truncateSqliteFast,D as useTransactionalTests};
2
+ var C=import.meta.require;import{config as l}from"@stacksjs/config";import{copyModelFiles as w,db as a,deleteFrameworkModels as y,dropSqliteTables as h,fetchSqliteFile as c,fetchTables as T,migrateAuthTables as S,migrateNotificationTables as g,migrateRbacTables as P,migrateTraitTables as E,ensureUtcDatetimeColumns as x,ensureUtcTimestampDefaults as A,runDatabaseMigration as u}from"@stacksjs/database";import{path as o}from"@stacksjs/path";import{fs as i,globSync as f}from"@stacksjs/storage";function m(){return l.database?.default||""}var r=null;function M(){if(r)return r;return r=`${c()}.snapshot`,r}async function d(){let t=[["auth",S],["notification",g],["RBAC",P],["trait",E],["utc-datetime",x],["utc-defaults",A]];for(let[e,n]of t)try{let s=await n();if(!s.success)console.error(`[testing] Failed to migrate ${e} tables: ${s.error}`)}catch(s){console.error(`[testing] Failed to migrate ${e} tables:`,s)}}async function v(){let t=`${l.database?.connections?.mysql?.name??"stacks"}_testing`;if(m()==="mysql")await a.unsafe(`CREATE DATABASE IF NOT EXISTS ${t}`).execute(),await u(),await d()}async function O(){await v();let t=m();if(t==="mysql")await F();if(t==="sqlite")await q()}async function F(){let t=await T();await a.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{for(let e of t)await a.unsafe(`TRUNCATE TABLE ${e}`).execute()}finally{await a.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}}async function k(){let t=c();if(!i.existsSync(t))await Bun.$`touch ${t}`;await h(),await y();let e=f([o.userModelsPath("*.ts"),o.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0});for(let n of e)await w(n);await u(),await d()}async function q(){let t=c(),e=M();if((()=>{if(!i.existsSync(e))return!0;let s=i.statSync(e).mtimeMs,p=f([o.userModelsPath("*.ts"),o.storagePath("framework/defaults/app/Models/**/*.ts"),o.userMigrationsPath("*.ts")],{absolute:!0});for(let b of p)try{if(i.statSync(b).mtimeMs>s)return!0}catch{}return!1})()){await k();try{await a.unsafe("PRAGMA wal_checkpoint(TRUNCATE)").execute(),i.copyFileSync(t,e)}catch{}return}i.copyFileSync(e,t)}function B(){let t=null;return{begin:async()=>{let e=`stacks_test_${Date.now()}_${Math.floor(Math.random()*1e6)}`;await a.unsafe(`SAVEPOINT ${e}`).execute(),t={rollback:async()=>{await a.unsafe(`ROLLBACK TO SAVEPOINT ${e}`).execute(),await a.unsafe(`RELEASE SAVEPOINT ${e}`).execute()}}},rollback:async()=>{if(!t)return;try{await t.rollback()}finally{t=null}}}}export{O as refreshDatabase,v as setupDatabase,F as truncateMysql,k as truncateSqlite,q as truncateSqliteFast,B as useTransactionalTests};
package/dist/dynamodb.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import r from"process";import{DynamoDBClient as o}from"@stacksjs/ts-cloud";var i=await import("@stacksjs/cache").then((e)=>e.dynamoDbTool),t=new o("us-east-1");async function y(){if(!r.env.GITHUB_ACTIONS)await i.dynamoDb.launch();await n(5000),await c()}async function n(e){return new Promise((a)=>setTimeout(a,e))}async function c(){try{await t.createTable({TableName:"stacks",KeySchema:[{AttributeName:"key",KeyType:"HASH"}],AttributeDefinitions:[{AttributeName:"key",AttributeType:"S"}],ProvisionedThroughput:{ReadCapacityUnits:5,WriteCapacityUnits:5}})}catch(e){console.error("Error Creating Table",e)}}async function l(){try{await t.deleteTable({TableName:"stacks"})}catch(e){console.error("Error deleting table:",e)}}export{c as createStacksTable,l as deleteStacksTable,y as launchServer};
2
+ var r=import.meta.require;import o from"process";import{DynamoDBClient as i}from"@stacksjs/ts-cloud";var n=await import("@stacksjs/cache").then((e)=>e.dynamoDbTool),t=new i("us-east-1");async function b(){if(!o.env.GITHUB_ACTIONS)await n.dynamoDb.launch();await c(5000),await s()}async function c(e){return new Promise((a)=>setTimeout(a,e))}async function s(){try{await t.createTable({TableName:"stacks",KeySchema:[{AttributeName:"key",KeyType:"HASH"}],AttributeDefinitions:[{AttributeName:"key",AttributeType:"S"}],ProvisionedThroughput:{ReadCapacityUnits:5,WriteCapacityUnits:5}})}catch(e){console.error("Error Creating Table",e)}}async function u(){try{await t.deleteTable({TableName:"stacks"})}catch(e){console.error("Error deleting table:",e)}}export{s as createStacksTable,u as deleteStacksTable,b as launchServer};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import p from"process";function R(){p.env.NODE_ENV="test",p.env.APP_ENV="test"}async function h(){let o=await import("@stacksjs/router");return o.serverResponse}function T(o){let a={status:o.status,headers:o.headers,text:()=>o.text(),json:async()=>await o.clone().json(),assertStatus(s){if(this.status!==s)throw Error(`Expected status ${s}, got ${this.status}`);return a},async assertJson(s){let n=await o.clone().json();for(let[i,u]of Object.entries(s))if(JSON.stringify(n[i])!==JSON.stringify(u))throw Error(`assertJson: expected ${i}=${JSON.stringify(u)}, got ${JSON.stringify(n[i])}`);return a},assertHeader(s,n){let i=o.headers.get(s);if(i===null)throw Error(`assertHeader: missing header '${s}'`);if(n!==void 0){if(!(typeof n==="string"?i===n:n.test(i)))throw Error(`assertHeader: expected ${s}=${String(n)}, got '${i}'`)}return a}};return a}function k(o="http://localhost"){let a=null,s={},n=null;async function i(){if(!a)return null;if(n)return n;let{Auth:t}=await import("@stacksjs/auth"),e=Number(a.id);if(!Number.isFinite(e))throw TypeError(`actingAs() needs a user with a numeric id; got ${JSON.stringify(a.id)}`);let r=await t.loginUsingId(e);if(!r)throw Error(`actingAs() could not authenticate user ${e}: no such user. Create the row first (e.g. via a factory) so a token can be issued against it.`);return n=String(r.token),n}async function u(t){let e={Accept:"application/json",...s};if(t!==void 0)e["Content-Type"]="application/json";let r=await i();if(r&&!e.Authorization&&!e.authorization)e.Authorization=`Bearer ${r}`;return e}async function c(t,e,r){let d=await h(),l=e.startsWith("http")?e:`${o}${e}`,f={method:t,headers:await u(r),body:r===void 0?void 0:typeof r==="string"?r:JSON.stringify(r)},w=await d(new Request(l,f));return T(w)}let g={actingAs(t){return a=t,n=null,g},withHeaders(t){return s={...s,...t},g},get:(t)=>c("GET",t),post:(t,e)=>c("POST",t,e),put:(t,e)=>c("PUT",t,e),patch:(t,e)=>c("PATCH",t,e),delete:(t,e)=>c("DELETE",t,e)};return g}export*from"bun:test";export{k as featureTest,R as setupTestEnvironment};
2
+ var p=import.meta.require;import d from"process";function y(){d.env.NODE_ENV="test",d.env.APP_ENV="test"}async function T(){return(await import("@stacksjs/router")).serverResponse}function m(i){let a={status:i.status,headers:i.headers,text:()=>i.text(),json:async()=>await i.clone().json(),assertStatus(s){if(this.status!==s)throw Error(`Expected status ${s}, got ${this.status}`);return a},async assertJson(s){let n=await i.clone().json();for(let[o,u]of Object.entries(s))if(JSON.stringify(n[o])!==JSON.stringify(u))throw Error(`assertJson: expected ${o}=${JSON.stringify(u)}, got ${JSON.stringify(n[o])}`);return a},assertHeader(s,n){let o=i.headers.get(s);if(o===null)throw Error(`assertHeader: missing header '${s}'`);if(n!==void 0){if(!(typeof n==="string"?o===n:n.test(o)))throw Error(`assertHeader: expected ${s}=${String(n)}, got '${o}'`)}return a}};return a}function P(i="http://localhost"){let a=null,s={},n=null;async function o(){if(!a)return null;if(n)return n;let{Auth:t}=await import("@stacksjs/auth"),e=Number(a.id);if(!Number.isFinite(e))throw TypeError(`actingAs() needs a user with a numeric id; got ${JSON.stringify(a.id)}`);let r=await t.loginUsingId(e);if(!r)throw Error(`actingAs() could not authenticate user ${e}: no such user. Create the row first (e.g. via a factory) so a token can be issued against it.`);return n=String(r.token),n}async function u(t){let e={Accept:"application/json",...s};if(t!==void 0)e["Content-Type"]="application/json";let r=await o();if(r&&!e.Authorization&&!e.authorization)e.Authorization=`Bearer ${r}`;return e}async function c(t,e,r){let l=await T(),f=e.startsWith("http")?e:`${i}${e}`,w={method:t,headers:await u(r),body:r===void 0?void 0:typeof r==="string"?r:JSON.stringify(r)},h=await l(new Request(f,w));return m(h)}let g={actingAs(t){return a=t,n=null,g},withHeaders(t){return s={...s,...t},g},get:(t)=>c("GET",t),post:(t,e)=>c("POST",t,e),put:(t,e)=>c("PUT",t,e),patch:(t,e)=>c("PATCH",t,e),delete:(t,e)=>c("DELETE",t,e)};return g}export*from"bun:test";export{P as featureTest,y as setupTestEnvironment};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/testing",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.74.33",
5
+ "version": "0.74.35",
6
6
  "description": "The Stacks way of testing.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -74,14 +74,14 @@
74
74
  "prepublishOnly": "bun run build"
75
75
  },
76
76
  "dependencies": {
77
- "@stacksjs/auth": "0.74.33",
78
- "@stacksjs/cache": "0.74.33",
79
- "@stacksjs/config": "0.74.33",
80
- "@stacksjs/database": "0.74.33",
81
- "@stacksjs/path": "0.74.33",
82
- "@stacksjs/router": "0.74.33",
83
- "@stacksjs/storage": "0.74.33",
84
- "@stacksjs/ts-cloud": "^0.12.15"
77
+ "@stacksjs/auth": "0.74.35",
78
+ "@stacksjs/cache": "0.74.35",
79
+ "@stacksjs/config": "0.74.35",
80
+ "@stacksjs/database": "0.74.35",
81
+ "@stacksjs/path": "0.74.35",
82
+ "@stacksjs/router": "0.74.35",
83
+ "@stacksjs/storage": "0.74.35",
84
+ "@stacksjs/ts-cloud": "^0.13.1"
85
85
  },
86
86
  "devDependencies": {
87
87
  "better-dx": "^0.2.24"