{"_id":"@atlex/testing","_rev":"16-387a23b9ffbbde5177447be92abdf83e","name":"@atlex/testing","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.1":{"name":"@atlex/testing","version":"0.1.1","keywords":["atlex","testing","vitest","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.1","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/atlex-monorepo/issues"},"dist":{"shasum":"83e25e11a5f9d919eacdf386b4e6b01442f44dea","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.1.tgz","fileCount":143,"integrity":"sha512-OAL8vf2tVEbL57zV/GGcS49n6QQBG75VKPKFAhBKEP6ri1Zy2eHEk07m80JyufKfST8B7R3PUgb18WaRdKx6dg==","signatures":[{"sig":"MEUCIQD9236F7w2VfTpap3A/R1YH98oyilkk+32kVR2M3WnI3gIgT7u+MgOZTpSxvuKJzUrySgXcSMEI/s5nXuGrZMmXdJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191020},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/b9a297c6f34e790b2c3a90a8d4176024/atlex-testing-0.1.1.tgz","_integrity":"sha512-OAL8vf2tVEbL57zV/GGcS49n6QQBG75VKPKFAhBKEP6ri1Zy2eHEk07m80JyufKfST8B7R3PUgb18WaRdKx6dg==","repository":{"url":"git+https://github.com/atlex-framework/atlex-monorepo.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.1","@atlex/orm":"0.1.1","@atlex/auth":"0.1.1","@atlex/core":"0.1.1","@atlex/mail":"0.1.1","@atlex/cache":"0.1.1","@atlex/queue":"0.1.1","@atlex/storage":"0.1.1","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.1_1776194502186_0.9691593526115385","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@atlex/testing","version":"0.1.2","keywords":["atlex","testing","vitest","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.2","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"8865fb3b083b88e9326d07a71426dbd50d044c47","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.2.tgz","fileCount":143,"integrity":"sha512-K+d6JQru8S+h/D14kzRmPAura1zx5Zm/As8BM4uy2/EDlaHLVbNnlzHRAUChY7PIaST/DAvk9PLWTGf1Tr3AEg==","signatures":[{"sig":"MEUCIQC9ksRMs3XNaGH1RHhAByRzzrA4yaNBxKsAaNZpPkKD+gIgT8NtyAZMNaQvOWQ+eROucgGxp5SsmwKMYdlVx32OafE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191006},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/6404e6879e41d5d532f2ddf323539397/atlex-testing-0.1.2.tgz","_integrity":"sha512-K+d6JQru8S+h/D14kzRmPAura1zx5Zm/As8BM4uy2/EDlaHLVbNnlzHRAUChY7PIaST/DAvk9PLWTGf1Tr3AEg==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.2","@atlex/orm":"0.1.2","@atlex/auth":"0.1.2","@atlex/core":"0.1.2","@atlex/mail":"0.1.2","@atlex/cache":"0.1.2","@atlex/queue":"0.1.2","@atlex/storage":"0.1.2","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.2_1776235414949_0.6984427957866419","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@atlex/testing","version":"0.1.3","keywords":["atlex","testing","vitest","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.3","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"18030926af98bc8f224d33dddfa76b864727aac9","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.3.tgz","fileCount":143,"integrity":"sha512-v+FQGKZdmanUMhbozGn9TONiVlqo6FRT5H4jKPHNzPugi1aSLXdK6fvb+2bjoaDrFlafHy/KP5slmuuctur43A==","signatures":[{"sig":"MEUCIDsSTcb1vsa2yF6wZB0ikEj2UELmyqyo5tgxkPQ+W6HaAiEA0DP3weFVL/C3ori4z4xlgFkvsdsevLEsIryF784fuPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191006},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/918ebffe5536582f950fff1f0c18e69a/atlex-testing-0.1.3.tgz","_integrity":"sha512-v+FQGKZdmanUMhbozGn9TONiVlqo6FRT5H4jKPHNzPugi1aSLXdK6fvb+2bjoaDrFlafHy/KP5slmuuctur43A==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.3","@atlex/orm":"0.1.3","@atlex/auth":"0.1.3","@atlex/core":"0.1.3","@atlex/mail":"0.1.3","@atlex/cache":"0.1.3","@atlex/queue":"0.1.3","@atlex/storage":"0.1.3","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.3_1776256106326_0.36131063901655014","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@atlex/testing","version":"0.1.4","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.4","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"232a50c02eb65be9dfbdc787e13aeed5e5cbba69","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.4.tgz","fileCount":143,"integrity":"sha512-ZvQEACEXF3mCq2nPGErATiF2wNXrz2lI+n/yBycABPbhu5eruUcZxBwFMGCJvfzOXExHUfV5ZJ32uLQsX/t+LA==","signatures":[{"sig":"MEUCIG3VAWg/TpE6vhIhbtDlPt+gXoyPGmYb0wAFIcLDSDKUAiEA/WyAadW9xrzDzaqSQynD0jS9WBmU9722TT1owG6t5cM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/3d11e06a8bbe8f09883b74dff82230c9/atlex-testing-0.1.4.tgz","_integrity":"sha512-ZvQEACEXF3mCq2nPGErATiF2wNXrz2lI+n/yBycABPbhu5eruUcZxBwFMGCJvfzOXExHUfV5ZJ32uLQsX/t+LA==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.4","@atlex/orm":"0.1.4","@atlex/auth":"0.1.4","@atlex/core":"0.1.4","@atlex/mail":"0.1.4","@atlex/cache":"0.1.4","@atlex/queue":"0.1.4","@atlex/storage":"0.1.4","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.4_1776259472829_0.11683770663560566","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@atlex/testing","version":"0.1.5","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.5","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"e099dd42ec9f814454fba84602ff1975b4a28739","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.5.tgz","fileCount":143,"integrity":"sha512-r8E5JYYP6HTZkbTaKwvDu7q1Q/eYDPit6FQS/G9sS2th3JR461hKfZVeOgr0Sm+C4cJOIuURbwwz5fcWZBhxSw==","signatures":[{"sig":"MEUCIC4H9TG7NblgLSYBfUcJv6smoEI39KL8xztqaNoepYeaAiEAyjdFV9s4AOdisz/tRdQh1YXv+68jqHGwZiOLAH6t+qc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/1f8374e6de520f15051f1298e5ff3343/atlex-testing-0.1.5.tgz","_integrity":"sha512-r8E5JYYP6HTZkbTaKwvDu7q1Q/eYDPit6FQS/G9sS2th3JR461hKfZVeOgr0Sm+C4cJOIuURbwwz5fcWZBhxSw==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.5","@atlex/orm":"0.1.5","@atlex/auth":"0.1.5","@atlex/core":"0.1.5","@atlex/mail":"0.1.5","@atlex/cache":"0.1.5","@atlex/queue":"0.1.5","@atlex/storage":"0.1.5","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.5_1776260747394_0.7180551167135825","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@atlex/testing","version":"0.1.6","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.6","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"2a76e75d7ac05786f8b31f27674f3625c4b6d915","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.6.tgz","fileCount":143,"integrity":"sha512-tzwABMC54JKnQ1KIG6XooVywFZXksuhZVXQT7Hd/9Y6gyAXpRUsG4ppCEDxaQg9sYvdhweZ0oKkKn6lYNHf+hg==","signatures":[{"sig":"MEYCIQDCHt0X0FSKtV57Ar2Ql2TtqrhEEqOPi3uIfOruzuFAEgIhALjXNRU/5ahHEbF46+wFqqCP/kDnPtFdtuCej5BIE0Yw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/41147462b4184378dc0c14783b617983/atlex-testing-0.1.6.tgz","_integrity":"sha512-tzwABMC54JKnQ1KIG6XooVywFZXksuhZVXQT7Hd/9Y6gyAXpRUsG4ppCEDxaQg9sYvdhweZ0oKkKn6lYNHf+hg==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.6","@atlex/orm":"0.1.6","@atlex/auth":"0.1.6","@atlex/core":"0.1.6","@atlex/mail":"0.1.6","@atlex/cache":"0.1.6","@atlex/queue":"0.1.6","@atlex/storage":"0.1.6","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.6_1778694382613_0.8554612158187871","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@atlex/testing","version":"0.1.7","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.7","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"69d4934212cf422c3a5bd7fce5e9302fa0f066b5","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.7.tgz","fileCount":143,"integrity":"sha512-a9c6Q5K1BCPX6BfBcwkJpif7XdYq/Gnki4m4LqSwamR1SBuOs2g3+FXaIOhhCzj/RgBYsJLpfWYsrC3VQgUFMg==","signatures":[{"sig":"MEYCIQDBCSuNey9rfRh/0jOz7QFVyLK5eocAHvXvOjERhTr/pwIhAP6/EV2/Y6f9SUS6gP5l07R7iG4tlabqrN8uriY+9vR4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/d7f2e0bb6f3f840fa4b909385177e85d/atlex-testing-0.1.7.tgz","_integrity":"sha512-a9c6Q5K1BCPX6BfBcwkJpif7XdYq/Gnki4m4LqSwamR1SBuOs2g3+FXaIOhhCzj/RgBYsJLpfWYsrC3VQgUFMg==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.7","@atlex/orm":"0.1.7","@atlex/auth":"0.1.7","@atlex/core":"0.1.7","@atlex/mail":"0.1.7","@atlex/cache":"0.1.7","@atlex/queue":"0.1.7","@atlex/storage":"0.1.7","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.7_1778755108832_0.7468644794358665","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@atlex/testing","version":"0.1.8","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.8","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"0ca2242cd75dc7d07cc9c9f187a9b3414de7f42d","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.8.tgz","fileCount":143,"integrity":"sha512-gkPqcp3r/MSgIEELRX0czPc/EMlwZp8KCtvmKlxYDesGqr7869tdaVfGQ/Ljmpyn/RLUIszDNlLiFPBTF7wSEA==","signatures":[{"sig":"MEUCIBggWyzlgyOgOuJcwLX4a64pRwjE43AVk08njDXhB+ptAiEAtqxVlYUm4EpqxBr6/tWhfaFTRpBjGZ2BH01d2IMqcYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.8.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/66767b4be352f04a76bfaa5140d89b03/atlex-testing-0.1.8.tgz","_integrity":"sha512-gkPqcp3r/MSgIEELRX0czPc/EMlwZp8KCtvmKlxYDesGqr7869tdaVfGQ/Ljmpyn/RLUIszDNlLiFPBTF7wSEA==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.8","@atlex/orm":"0.1.8","@atlex/auth":"0.1.8","@atlex/core":"0.1.8","@atlex/mail":"0.1.8","@atlex/cache":"0.1.8","@atlex/queue":"0.1.8","@atlex/storage":"0.1.8","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.8_1778775549424_0.3197075226276782","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@atlex/testing","version":"0.1.9","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.9","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"867a720448e4ea1b2f9ab657547490910d02712d","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.9.tgz","fileCount":143,"integrity":"sha512-baHmDguNxnhIeOMs/onBMBygxSeYSs8zL3XTiFct3jstBhpSj1se0tzB3JwME5QXo7oruHkcHJfHCvmVyVyN8A==","signatures":[{"sig":"MEQCIHImyvZViQs6ZL/679Jl7w4SN00AuqYmogOZ6B1JNHgFAiB5RSG2ajjysytMGiMchxqj/VRF58vuS8e23mpdg/Hlkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191351},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.9.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/07848963555fa59763ead7b7e1366d06/atlex-testing-0.1.9.tgz","_integrity":"sha512-baHmDguNxnhIeOMs/onBMBygxSeYSs8zL3XTiFct3jstBhpSj1se0tzB3JwME5QXo7oruHkcHJfHCvmVyVyN8A==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.9","@atlex/orm":"0.1.10","@atlex/auth":"0.1.9","@atlex/core":"0.1.9","@atlex/mail":"0.1.9","@atlex/cache":"0.1.9","@atlex/queue":"0.1.9","@atlex/storage":"0.1.9","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.9_1778830273542_0.055131188229157635","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@atlex/testing","version":"0.1.10","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.10","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"197112f52fcb4956500f478ddc7d6219105a5ba6","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.10.tgz","fileCount":143,"integrity":"sha512-xFkCYwIhGXdaPxUruN7bexAdB32M0N7Fw0asQLzc3bxtOGTwK7AkTOZkoeSrRukEeYAbOePbHFVwQw6QVElcbw==","signatures":[{"sig":"MEUCIQD/lpEEsOvcaM28ylWcYS1TctM9D3EHlXJSXDpeFkjE4AIgBgoYqczgvfZqhv2SqqCgjJ9/trM0ouYiAGTxhxEpMAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191360},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.10.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/ad4a9686d8577629ab0da6e7ae5fe071/atlex-testing-0.1.10.tgz","_integrity":"sha512-xFkCYwIhGXdaPxUruN7bexAdB32M0N7Fw0asQLzc3bxtOGTwK7AkTOZkoeSrRukEeYAbOePbHFVwQw6QVElcbw==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.7","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.2","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.10","@atlex/orm":"0.1.10","@atlex/auth":"0.1.10","@atlex/core":"0.1.10","@atlex/mail":"0.1.10","@atlex/cache":"0.1.10","@atlex/queue":"0.1.10","@atlex/storage":"0.1.10","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.10_1778834125238_0.2906781575549793","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@atlex/testing","version":"0.1.11","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.1.11","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"12cf5bf8c119ace07435516a4f5e8e12ee114354","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.1.11.tgz","fileCount":143,"integrity":"sha512-+KArSaqzDF9kvmhUiYw34cNW2jiwGR+3SFZezruAIgktVhqiaLTdaGA0OHy4m1LsTRysgGKOejDKPvJ14LlAMw==","signatures":[{"sig":"MEYCIQCEWGDKwxUL1qxJyxS1mONywGqjcOWDCv5HWYtH5PLGJQIhANe31CZL6cwKtH3Bw5pCq3FYG62fwy7G7nzpIBYJI1AF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191360},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.1.11.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/7cb223cc07835656fb77e26f1a15f159/atlex-testing-0.1.11.tgz","_integrity":"sha512-+KArSaqzDF9kvmhUiYw34cNW2jiwGR+3SFZezruAIgktVhqiaLTdaGA0OHy4m1LsTRysgGKOejDKPvJ14LlAMw==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.8","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.3","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.1.11","@atlex/orm":"0.1.11","@atlex/auth":"0.1.11","@atlex/core":"0.1.11","@atlex/mail":"0.1.11","@atlex/cache":"0.1.11","@atlex/queue":"0.1.11","@atlex/storage":"0.1.11","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.1.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.1.11_1780144984155_0.33389934124703813","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@atlex/testing","version":"0.2.0","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.2.0","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"a9ca3e8e36f5efd784575e978f0d790e20ea9f6d","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.2.0.tgz","fileCount":143,"integrity":"sha512-8lNdtY+3BlVdqW8zN+LoKHSZeUu4F3pjiyWAG6D5xPhqXzzLIJCGH1fDpvmzEr7xXegCUQaHOs5y4ztc4hMbUg==","signatures":[{"sig":"MEUCIF3F+GEPNzJ6RgF4UmSeIwSk45RxPu/OAk78rfFV8NWOAiEAnEpIHPgKwGg26nr5EBVUJJA1J+0RmWU81rpXjrj2xfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/64c35e23f6ab22139a438624f3cb4967/atlex-testing-0.2.0.tgz","_integrity":"sha512-8lNdtY+3BlVdqW8zN+LoKHSZeUu4F3pjiyWAG6D5xPhqXzzLIJCGH1fDpvmzEr7xXegCUQaHOs5y4ztc4hMbUg==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.8","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.3","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.2.0","@atlex/orm":"0.2.0","@atlex/auth":"0.2.0","@atlex/core":"0.2.0","@atlex/mail":"0.2.0","@atlex/cache":"0.2.0","@atlex/queue":"0.2.0","@atlex/storage":"0.2.0","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.2.0_1780306572437_0.8189757280320444","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@atlex/testing","version":"0.2.1","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"author":{"url":"https://github.com/khamazaspyan","name":"Karen Hamazaspyan"},"license":"MIT","_id":"@atlex/testing@0.2.1","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"dist":{"shasum":"4258e378878f300497a56b95bf810782c5dc3041","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.2.1.tgz","fileCount":143,"integrity":"sha512-oakTEfp9YM+FpJWrat9M4X6XLxVq0VAvUD+OEhtqYUIV7Z0JNJKy3c5Q5bkHdwqu/py8go6vgeg3ns2i+A5zTA==","signatures":[{"sig":"MEYCIQChFYH0wE+nrfUDUOiGnpwdgFmpZGu8uXBn+qXQ0lZePQIhAOvbTjbfgdhD+Q5aZ3ZAvryFHLbCfqgaI9GQnCQnzQ6l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191350},"main":"./dist/index.js","type":"module","_from":"file:atlex-testing-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"scripts":{"test":"vitest run -c vitest.config.ts","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"_resolved":"/tmp/61bd5c4db20d37b03109de80521d030a/atlex-testing-0.2.1.tgz","_integrity":"sha512-oakTEfp9YM+FpJWrat9M4X6XLxVq0VAvUD+OEhtqYUIV7Z0JNJKy3c5Q5bkHdwqu/py8go6vgeg3ns2i+A5zTA==","repository":{"url":"git+https://github.com/atlex-framework/testing.git","type":"git","directory":"packages/testing"},"_npmVersion":"10.9.8","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","directories":{},"_nodeVersion":"22.22.3","dependencies":{"supertest":"^7.1.0","@atlex/log":"0.2.1","@atlex/orm":"0.2.1","@atlex/auth":"0.2.1","@atlex/core":"0.2.1","@atlex/mail":"0.2.1","@atlex/cache":"0.2.1","@atlex/queue":"0.2.1","@atlex/storage":"0.2.1","@faker-js/faker":"^9.9.0","@atlex/notifications":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knex":"^3.1.0","vitest":"^3.2.4","express":"^5.1.0","@types/express":"^5.0.3","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/testing_0.2.1_1780423691875_0.8029241340022553","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@atlex/testing","version":"0.2.2","description":"Test utilities, fakes, and Vitest matchers for Atlex apps","type":"module","license":"MIT","author":{"name":"Karen Hamazaspyan","url":"https://github.com/khamazaspyan"},"keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"engines":{"node":">=20"},"repository":{"type":"git","url":"git+https://github.com/atlex-framework/testing.git","directory":"packages/testing"},"homepage":"https://atlex.dev","bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"publishConfig":{"access":"public"},"dependencies":{"@faker-js/faker":"^9.9.0","supertest":"^7.1.0","@atlex/auth":"0.2.2","@atlex/cache":"0.2.2","@atlex/core":"0.2.2","@atlex/log":"0.2.2","@atlex/mail":"0.2.2","@atlex/notifications":"0.2.2","@atlex/orm":"0.2.2","@atlex/queue":"0.2.2","@atlex/storage":"0.2.2"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","default":"./dist/setup.js"},"./coverage":{"types":"./dist/vitest-config/vitest.shared.d.ts","default":"./dist/vitest-config/vitest.shared.js"}},"devDependencies":{"@types/express":"^5.0.3","@types/supertest":"^6.0.2","express":"^5.1.0","@vitest/coverage-v8":"^3.2.4","knex":"^3.1.0","vitest":"^3.2.4"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run -c vitest.config.ts","typecheck":"tsc --noEmit -p tsconfig.json"},"_id":"@atlex/testing@0.2.2","_integrity":"sha512-fvxXT2Re9pjak77BZETOiyMGtZrkUl8PlBh9b0UyoV+jwqK8KkIUEE2tSz8Vro6lFaEOAxOJj1rPjYhp3hl3hQ==","_resolved":"/tmp/1dd5cbbbb5e7174d988123a418391a9b/atlex-testing-0.2.2.tgz","_from":"file:atlex-testing-0.2.2.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-fvxXT2Re9pjak77BZETOiyMGtZrkUl8PlBh9b0UyoV+jwqK8KkIUEE2tSz8Vro6lFaEOAxOJj1rPjYhp3hl3hQ==","shasum":"e04af93ae3b53e8fe340871980330416ed9bce2c","tarball":"https://registry.npmjs.org/@atlex/testing/-/testing-0.2.2.tgz","fileCount":143,"unpackedSize":191350,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCHsQ1XbefuxqGjN9ouPx4zuyLUV9ZBATv0FqSS8Aqi8gIhAOQf9rTKDt1/6q70V+UHkglD0XDuJz/NfTLJz/3KFy44"}]},"_npmUser":{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"},"directories":{},"maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/testing_0.2.2_1784391619010_0.612491453422318"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T19:21:42.052Z","modified":"2026-07-18T16:20:19.310Z","0.1.0-beta":"2026-04-11T21:23:36.232Z","0.1.1":"2026-04-14T19:21:42.361Z","0.1.2":"2026-04-15T06:43:35.074Z","0.1.3":"2026-04-15T12:28:26.467Z","0.1.4":"2026-04-15T13:24:32.982Z","0.1.5":"2026-04-15T13:45:47.532Z","0.1.6":"2026-05-13T17:46:22.790Z","0.1.7":"2026-05-14T10:38:28.979Z","0.1.8":"2026-05-14T16:19:09.584Z","0.1.9":"2026-05-15T07:31:13.679Z","0.1.10":"2026-05-15T08:35:25.391Z","0.1.11":"2026-05-30T12:43:04.323Z","0.2.0":"2026-06-01T09:36:12.635Z","0.2.1":"2026-06-02T18:08:12.031Z","0.2.2":"2026-07-18T16:20:19.139Z"},"bugs":{"url":"https://github.com/atlex-framework/testing/issues"},"author":{"name":"Karen Hamazaspyan","url":"https://github.com/khamazaspyan"},"license":"MIT","homepage":"https://atlex.dev","keywords":["atlex","testing","test","unit-testing","integration-testing","http-testing","api-testing","test-fakes","test-mocks","vitest","supertest-alternative","http-client-test","laravel-testing","laravel-alternative","nodejs","javascript","typescript"],"repository":{"type":"git","url":"git+https://github.com/atlex-framework/testing.git","directory":"packages/testing"},"description":"Test utilities, fakes, and Vitest matchers for Atlex apps","maintainers":[{"name":"khamazaspyan","email":"khamazaspyan@gmail.com"}],"readme":"# @atlex/testing\n\n> First-class testing toolkit: HTTP client, fakes, database helpers, and assertions.\n\n[![npm](https://img.shields.io/npm/v/@atlex/testing.svg?style=flat-square&color=7c3aed)](https://www.npmjs.com/package/@atlex/testing)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-7c3aed.svg?style=flat-square)](https://www.typescriptlang.org/)\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Support-yellow?style=flat-square&logo=buy-me-a-coffee)](https://buymeacoffee.com/khamazaspyan)\n\n## Installation\n\n```bash\nnpm install @atlex/testing\n# or\nyarn add @atlex/testing\n```\n\n## Quick Start\n\n```typescript\nimport { test } from 'vitest'\nimport { TestClient } from '@atlex/testing'\n\ntest('can retrieve home page', async () => {\n  const response = await TestClient.get('/')\n  response.assertOk()\n  response.assertSee('Welcome')\n})\n\ntest('can create a user', async () => {\n  const response = await TestClient.post('/users', {\n    name: 'John Doe',\n    email: 'john@example.com',\n  })\n\n  response.assertCreated()\n  response.json().id // Access response body\n})\n```\n\n## Features\n\n- **TestClient**: Fluent HTTP client for API testing\n- **Request Builders**: Chain methods for headers, auth, and request customization\n- **Response Assertions**: Assert status codes, headers, and content\n- **Fake Services**: Mock mail, queue, events, storage, notifications, cache, and logs\n- **Database Helpers**: Seed databases, refresh state between tests\n- **Factories**: Generate test data with minimal code\n- **Time Helpers**: Freeze, travel, and manipulate time in tests\n- **Custom Matchers**: Additional assertion helpers for common patterns\n\n## TestClient: Making Requests\n\n### HTTP Methods\n\n```typescript\nimport { TestClient } from '@atlex/testing'\n\n// GET request\nconst getResponse = await TestClient.get('/users')\n\n// POST request\nconst postResponse = await TestClient.post('/users', {\n  name: 'Jane Doe',\n  email: 'jane@example.com',\n})\n\n// PUT request\nconst putResponse = await TestClient.put('/users/1', {\n  name: 'Jane Smith',\n})\n\n// PATCH request\nconst patchResponse = await TestClient.patch('/users/1', {\n  email: 'jane.smith@example.com',\n})\n\n// DELETE request\nconst deleteResponse = await TestClient.delete('/users/1')\n```\n\n### Request Customization\n\n```typescript\nimport { TestClient } from '@atlex/testing'\n\nconst response = await TestClient.get('/api/users')\n  .withHeaders({\n    'X-Custom-Header': 'value',\n    Authorization: 'Bearer token',\n  })\n  .withToken('auth-token')\n  .actingAs(user)\n  .withoutExceptionHandling()\n```\n\n### Acting As a User\n\n```typescript\nimport { TestClient } from '@atlex/testing'\n\nconst user = await User.find(1)\n\nconst response = await TestClient.actingAs(user).get('/dashboard')\n\nresponse.assertOk()\n```\n\n## TestResponse: Assertions\n\n### Status Assertions\n\n```typescript\nimport { TestClient } from '@atlex/testing'\n\nconst response = await TestClient.get('/users')\n\nresponse.assertOk() // 200\nresponse.assertCreated() // 201\nresponse.assertNoContent() // 204\nresponse.assertRedirect() // 3xx\nresponse.assertBadRequest() // 400\nresponse.assertUnauthorized() // 401\nresponse.assertForbidden() // 403\nresponse.assertNotFound() // 404\nresponse.assertStatus(200) // Specific status\nresponse.assertStatus(200, 201) // One of statuses\n```\n\n### Content Assertions\n\n```typescript\nconst response = await TestClient.get('/users')\n\n// Get JSON response\nconst json = response.json()\nconst users = response.json().data\n\n// Get text response\nconst text = response.text()\n\n// Access headers\nconst contentType = response.headers()['content-type']\n```\n\n### JSON Assertions\n\n```typescript\nconst response = await TestClient.post('/users', {\n  name: 'John Doe',\n})\n\nresponse.assertJson({\n  success: true,\n  data: {\n    name: 'John Doe',\n  },\n})\n\nresponse.assertJsonPath('data.name', 'John Doe')\nresponse.assertJsonCount(10, 'data') // Count array length\n```\n\n### Content Matching\n\n```typescript\nconst response = await TestClient.get('/users')\n\nresponse.assertSee('John Doe') // Contains text\nresponse.assertDontSee('Admin') // Doesn't contain text\nresponse.assertSeeInOrder(['John', 'Doe']) // In order\nresponse.assertSeeJson({ name: 'John' }) // Contains JSON\n```\n\n## Fakes: Mocking Services\n\n### Mail Fake\n\n```typescript\nimport { test } from 'vitest'\nimport { TestClient, MailFake } from '@atlex/testing'\n\ntest('sends welcome email', async () => {\n  const mailFake = new MailFake()\n\n  await TestClient.post('/register', {\n    name: 'John Doe',\n    email: 'john@example.com',\n  })\n\n  // Assert email was sent\n  mailFake.assertSent('john@example.com', WelcomeEmail)\n\n  // Assert email count\n  mailFake.assertCount(1)\n\n  // Get sent mails\n  const mails = mailFake.sent()\n})\n```\n\n### Queue Fake\n\n```typescript\nimport { QueueFake } from '@atlex/testing'\n\ntest('dispatches background job', async () => {\n  const queueFake = new QueueFake()\n\n  await TestClient.post('/orders', orderData)\n\n  // Assert job was dispatched\n  queueFake.assertDispatched(ProcessOrderJob)\n\n  // Assert with payload\n  queueFake.assertDispatched(ProcessOrderJob, (job) => {\n    return job.orderId === 123\n  })\n\n  // Get dispatched jobs\n  const jobs = queueFake.dispatched()\n})\n```\n\n### Event Fake\n\n```typescript\nimport { EventFake } from '@atlex/testing'\n\ntest('fires user created event', async () => {\n  const eventFake = new EventFake()\n\n  await TestClient.post('/users', userData)\n\n  // Assert event was fired\n  eventFake.assertDispatched(UserCreated)\n\n  // Assert with payload\n  eventFake.assertDispatched(UserCreated, (event) => {\n    return event.user.email === 'john@example.com'\n  })\n})\n```\n\n### Storage Fake\n\n```typescript\nimport { StorageFake } from '@atlex/testing'\n\ntest('uploads file', async () => {\n  const storageFake = new StorageFake()\n\n  await TestClient.post('/upload', formData)\n\n  // Assert file was stored\n  storageFake.assertStored('avatars/user.jpg')\n\n  // Assert missing\n  storageFake.assertMissing('old/avatar.jpg')\n\n  // Get stored files\n  const files = storageFake.stored()\n})\n```\n\n### Notification Fake\n\n```typescript\nimport { NotificationFake } from '@atlex/testing'\n\ntest('sends notification', async () => {\n  const notificationFake = new NotificationFake()\n\n  const user = await User.find(1)\n  await user.notify(new WelcomeNotification())\n\n  // Assert notification sent\n  notificationFake.assertSentTo(user, WelcomeNotification)\n\n  // Assert count\n  notificationFake.assertCount(1)\n})\n```\n\n### Cache Fake\n\n```typescript\nimport { CacheFake } from '@atlex/testing'\n\ntest('caches user data', async () => {\n  const cacheFake = new CacheFake()\n\n  await TestClient.get('/users/1')\n\n  // Assert value was cached\n  cacheFake.assertHas('user:1')\n\n  // Get cached value\n  const cached = cacheFake.get('user:1')\n})\n```\n\n### Log Fake\n\n```typescript\nimport { LogFake } from '@atlex/testing'\n\ntest('logs errors', async () => {\n  const logFake = new LogFake()\n\n  await TestClient.get('/invalid-route')\n\n  // Assert log entry\n  logFake.assertLogged('error', (log) => {\n    return log.message.includes('Route not found')\n  })\n})\n```\n\n## Database Testing\n\n### Using Test Database\n\n```typescript\nimport { test } from 'vitest'\nimport { useDatabase, refreshDatabase } from '@atlex/testing'\n\ntest.beforeEach(async () => {\n  await useDatabase('testing')\n  await refreshDatabase()\n})\n\ntest('can retrieve users', async () => {\n  await User.create({ name: 'John Doe' })\n\n  const response = await TestClient.get('/users')\n\n  response.assertJson({\n    data: [{ name: 'John Doe' }],\n  })\n})\n```\n\n### Database Seeding\n\n```typescript\nimport { test } from 'vitest'\nimport { seed } from '@atlex/testing'\n\ntest.beforeEach(async () => {\n  await seed(async (factory) => {\n    // Create test data\n    await factory.model(User).create({\n      name: 'Admin',\n      role: 'admin',\n    })\n\n    await factory.model(Post).times(5).create()\n  })\n})\n```\n\n## Factories: Test Data Generation\n\n### Creating Test Data\n\n```typescript\nimport { Factory } from '@atlex/testing'\n\n// Create single model\nconst user = await Factory.make(User)\n\n// Create with attributes\nconst user = await Factory.make(User, {\n  name: 'John Doe',\n  email: 'john@example.com',\n})\n\n// Create and persist\nconst user = await Factory.create(User)\n\n// Create multiple\nconst users = await Factory.times(5).create(User)\n\n// Chain methods\nconst users = await Factory.times(3).create(User, { role: 'admin' })\n```\n\n### Defining Factories\n\n```typescript\nimport { Factory } from '@atlex/testing'\n\nclass UserFactory extends Factory {\n  model() {\n    return User\n  }\n\n  definition() {\n    return {\n      name: this.faker.person.fullName(),\n      email: this.faker.internet.email(),\n      password: 'password',\n      emailVerifiedAt: new Date(),\n    }\n  }\n}\n\n// Use factory\nconst user = await UserFactory.create()\n\n// With overrides\nconst admin = await UserFactory.create({ role: 'admin' })\n```\n\n## Time Helpers\n\n### Freezing Time\n\n```typescript\nimport { test } from 'vitest'\nimport { freezeTime, unfreezeTime, now } from '@atlex/testing'\n\ntest('handles time-based logic', () => {\n  freezeTime('2024-03-15 14:30:00')\n\n  const timestamp = now() // March 15, 2024 14:30\n\n  unfreezeTime()\n})\n```\n\n### Traveling Time\n\n```typescript\nimport { travelTo, travelForward, travelBack } from '@atlex/testing'\n\ntest('schedules task', async () => {\n  const scheduled = new Date('2024-03-15')\n\n  // Travel to specific time\n  travelTo('2024-03-15 10:00:00')\n\n  // Travel forward\n  travelForward('1 day')\n  travelForward('2 hours')\n\n  // Travel backward\n  travelBack('30 minutes')\n})\n```\n\n## Complete Example\n\n```typescript\nimport { test } from 'vitest'\nimport {\n  TestClient,\n  useDatabase,\n  refreshDatabase,\n  Factory,\n  MailFake,\n  freezeTime,\n  unfreezeTime,\n} from '@atlex/testing'\n\ntest('user registration flow', async () => {\n  await useDatabase('testing')\n  await refreshDatabase()\n\n  freezeTime('2024-03-15 10:00:00')\n\n  const mailFake = new MailFake()\n\n  // Register user\n  const response = await TestClient.post('/register', {\n    name: 'Jane Doe',\n    email: 'jane@example.com',\n    password: 'password123',\n  })\n\n  // Assert response\n  response.assertCreated()\n  response.assertJson({\n    message: 'Registration successful',\n  })\n\n  // Assert email sent\n  mailFake.assertSent('jane@example.com', VerifyEmailNotification)\n\n  // Assert user created in database\n  const user = await User.where('email', 'jane@example.com').first()\n  expect(user).toBeDefined()\n\n  unfreezeTime()\n})\n\ntest('can edit user profile', async () => {\n  const user = await Factory.create(User)\n\n  const response = await TestClient.actingAs(user).put(`/users/${user.id}`, {\n    name: 'Jane Doe',\n    bio: 'Test bio',\n  })\n\n  response.assertOk()\n\n  const updated = await User.find(user.id)\n  expect(updated.name).toBe('Jane Doe')\n})\n\ntest('requires authentication', async () => {\n  const response = await TestClient.get('/dashboard')\n\n  response.assertUnauthorized()\n})\n\ntest('enforces authorization', async () => {\n  const user = await Factory.create(User, { role: 'user' })\n  const admin = await Factory.create(User, { role: 'admin' })\n\n  const response = await TestClient.actingAs(user).delete(`/users/${admin.id}`)\n\n  response.assertForbidden()\n})\n```\n\n## Custom Matchers\n\n```typescript\nimport { expect } from 'vitest'\nimport { addCustomMatchers } from '@atlex/testing'\n\naddCustomMatchers({\n  toBeValidEmail: (email: string) => {\n    const valid = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n    return {\n      pass: valid,\n      message: () => `Expected ${email} to be a valid email`,\n    }\n  },\n})\n\ntest('validates email', () => {\n  expect('john@example.com').toBeValidEmail()\n})\n```\n\n## API Overview\n\n### TestClient\n\n| Method                       | Description                |\n| ---------------------------- | -------------------------- |\n| `get(path)`                  | Send GET request           |\n| `post(path, data)`           | Send POST request          |\n| `put(path, data)`            | Send PUT request           |\n| `patch(path, data)`          | Send PATCH request         |\n| `delete(path)`               | Send DELETE request        |\n| `actingAs(user)`             | Set authenticated user     |\n| `withHeaders(headers)`       | Add request headers        |\n| `withToken(token)`           | Add authorization token    |\n| `withoutExceptionHandling()` | Disable exception handling |\n\n### TestResponse\n\n| Method                 | Description             |\n| ---------------------- | ----------------------- |\n| `assertStatus(code)`   | Assert HTTP status      |\n| `assertOk()`           | Assert 200 OK           |\n| `assertCreated()`      | Assert 201 Created      |\n| `assertNoContent()`    | Assert 204 No Content   |\n| `assertRedirect()`     | Assert 3xx Redirect     |\n| `assertNotFound()`     | Assert 404 Not Found    |\n| `assertUnauthorized()` | Assert 401 Unauthorized |\n| `assertForbidden()`    | Assert 403 Forbidden    |\n| `json()`               | Get JSON body           |\n| `text()`               | Get text body           |\n| `headers()`            | Get response headers    |\n\n### Fakes\n\n| Fake               | Description        |\n| ------------------ | ------------------ |\n| `MailFake`         | Mock mail sending  |\n| `QueueFake`        | Mock job dispatch  |\n| `EventFake`        | Mock events        |\n| `StorageFake`      | Mock file storage  |\n| `NotificationFake` | Mock notifications |\n| `CacheFake`        | Mock cache         |\n| `LogFake`          | Mock logging       |\n\n### Database & Factories\n\n| Helper                  | Description               |\n| ----------------------- | ------------------------- |\n| `useDatabase(name)`     | Switch test database      |\n| `refreshDatabase()`     | Clear and reset database  |\n| `seed(callback)`        | Seed test data            |\n| `Factory.make(Model)`   | Create in-memory instance |\n| `Factory.create(Model)` | Create and persist        |\n| `Factory.times(n)`      | Create multiple           |\n\n### Time\n\n| Function                  | Description                    |\n| ------------------------- | ------------------------------ |\n| `freezeTime(time)`        | Freeze time at specific moment |\n| `unfreezeTime()`          | Resume normal time             |\n| `travelTo(time)`          | Travel to specific time        |\n| `travelForward(duration)` | Move time forward              |\n| `travelBack(duration)`    | Move time backward             |\n| `now()`                   | Get current frozen time        |\n\n## Documentation\n\nFor complete documentation, visit [https://atlex.dev/guide/testing](https://atlex.dev/guide/testing)\n\n## License\n\n## MIT\n\nPart of [Atlex](https://atlex.dev) — A modern framework for Node.js.\n","readmeFilename":"README.md"}