diff --git a/.github/workflows/tests-rs.yml b/.github/workflows/tests-rs.yml index 98c6df0..c28f144 100644 --- a/.github/workflows/tests-rs.yml +++ b/.github/workflows/tests-rs.yml @@ -7,11 +7,8 @@ jobs: platform: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: "16" + - uses: actions/checkout@v4 - name: Install and test modules run: | cd ./contract-rs - ./test.sh + cargo test diff --git a/.github/workflows/tests-ts.yml b/.github/workflows/tests-ts.yml index 7478a0f..dd7fbad 100644 --- a/.github/workflows/tests-ts.yml +++ b/.github/workflows/tests-ts.yml @@ -5,12 +5,13 @@ jobs: strategy: matrix: platform: [ubuntu-latest, macos-latest] + node-version: [18, 20] runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: "16" + node-version: ${{ matrix.node-version }} - name: Install and test modules run: | cd ./contract-ts diff --git a/.gitignore b/.gitignore index 2ae9a45..49ebd6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,14 @@ # Rust -./contract-rs/target/ -./contract-rs/Cargo.lock - -# TypeScript - Sandbox -./contract-ts/sandbox-ts/package-lock.json -./contract-ts/sandbox-ts/node_modules/ +**/target +**/Cargo.lock # TypeScript -./contract-ts/build/ -./contract-ts/node_modules/ -./contract-ts/sandbox-ts/node_modules/ -./contract-ts/sandbox-ts/yarn.lock -./contract-ts/yarn.lock -./contract-ts/package-lock.json +**/package-lock.json +**/node_modules/ +**/build/ +**/yarn.lock +**/.tsimp # Frontend -./frontend/dist/ -./frontend/node_modules/ -./frontend/.parcel-cache -./frontend/yarn.lock -./frontend/package-lock.json \ No newline at end of file +**/dist/ +**/.parcel-cache \ No newline at end of file diff --git a/contract-ts/ava.config.cjs b/contract-ts/ava.config.cjs new file mode 100644 index 0000000..b170147 --- /dev/null +++ b/contract-ts/ava.config.cjs @@ -0,0 +1,15 @@ +require('util').inspect.defaultOptions.depth = 5; // Increase AVA's printing depth + +module.exports = { + timeout: '10000', + files: ['sandbox-ts/*.ava.ts'], + failWithoutAssertions: false, + extensions: { + js: true, + ts: 'module' + }, + require: ['ts-node/register', 'near-workspaces'], + "nodeArguments": [ + "--import=tsimp" + ] +}; \ No newline at end of file diff --git a/contract-ts/package.json b/contract-ts/package.json index c0b0354..865c07b 100644 --- a/contract-ts/package.json +++ b/contract-ts/package.json @@ -5,15 +5,19 @@ "type": "module", "scripts": { "build": "near-sdk-js build src/contract.ts build/hello_near.wasm", - "test": "$npm_execpath run build && cd sandbox-ts && $npm_execpath run test -- -- ../build/hello_near.wasm", - "postinstall": "cd sandbox-ts && $npm_execpath install" + "test": "$npm_execpath build && ava -- ./build/hello_near.wasm" }, "dependencies": { - "near-cli": "^4.0.7", + "near-cli": "^4.0.8", "near-sdk-js": "1.0.0" }, "devDependencies": { - "typescript": "^5.2.2", - "ts-morph": "^20.0.0" + "@ava/typescript": "^4.1.0", + "ava": "^6.1.2", + "near-workspaces": "^3.5.0", + "ts-morph": "^21.0.1", + "ts-node": "^10.9.2", + "tsimp": "^2.0.11", + "typescript": "^5.3.3" } } diff --git a/contract-ts/sandbox-ts/ava.config.cjs b/contract-ts/sandbox-ts/ava.config.cjs deleted file mode 100644 index 498a811..0000000 --- a/contract-ts/sandbox-ts/ava.config.cjs +++ /dev/null @@ -1,9 +0,0 @@ -require('util').inspect.defaultOptions.depth = 5; // Increase AVA's printing depth - -module.exports = { - timeout: '300000', - files: ['src/*.ava.ts'], - failWithoutAssertions: false, - extensions: ['ts'], - require: ['ts-node/register'], -}; diff --git a/contract-ts/sandbox-ts/src/main.ava.ts b/contract-ts/sandbox-ts/main.ava.ts similarity index 65% rename from contract-ts/sandbox-ts/src/main.ava.ts rename to contract-ts/sandbox-ts/main.ava.ts index 9075bf5..619dbc4 100644 --- a/contract-ts/sandbox-ts/src/main.ava.ts +++ b/contract-ts/sandbox-ts/main.ava.ts @@ -1,43 +1,45 @@ import { Worker, NearAccount } from 'near-workspaces'; import anyTest, { TestFn } from 'ava'; +import { setDefaultResultOrder } from 'dns'; setDefaultResultOrder('ipv4first'); // temp fix for node >v17 -const test = anyTest as TestFn<{ - worker: Worker; - accounts: Record; -}>; +// Global context +let worker: Worker; +let accounts: Record; -test.beforeEach(async (t) => { +const test = anyTest as TestFn<{}>; + +test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init(); + worker = await Worker.init(); // Deploy contract const root = worker.rootAccount; const contract = await root.createSubAccount('test-account'); + // Get wasm file path from package.json test script in folder above await contract.deploy( process.argv[2], ); // Save state for test runs, it is unique for each test - t.context.worker = worker; - t.context.accounts = { root, contract }; + accounts = { root, contract }; }); -test.afterEach.always(async (t) => { +test.after.always(async (t) => { // Stop Sandbox server - await t.context.worker.tearDown().catch((error) => { + await worker.tearDown().catch((error) => { console.log('Failed to stop the Sandbox:', error); }); }); test('returns the default greeting', async (t) => { - const { contract } = t.context.accounts; + const { contract } = accounts; const greeting: string = await contract.view('get_greeting', {}); t.is(greeting, 'Hello'); }); test('changes the greeting', async (t) => { - const { root, contract } = t.context.accounts; + const { root, contract } = accounts; await root.call(contract, 'set_greeting', { greeting: 'Howdy' }); const greeting: string = await contract.view('get_greeting', {}); t.is(greeting, 'Howdy'); diff --git a/contract-ts/sandbox-ts/package.json b/contract-ts/sandbox-ts/package.json deleted file mode 100644 index ed91008..0000000 --- a/contract-ts/sandbox-ts/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "ava-testing", - "version": "1.0.0", - "license": "(MIT AND Apache-2.0)", - "scripts": { - "test": "ava" - }, - "devDependencies": { - "@types/bn.js": "^5.1.4", - "@types/node": "^20.8.10", - "ava": "^5.3.1", - "near-workspaces": "^3.5.0", - "ts-node": "^10.9.1", - "typescript": "^5.2.2" - }, - "dependencies": {} -} diff --git a/contract-ts/tsconfig.json b/contract-ts/tsconfig.json index 7fd35e5..d2562eb 100644 --- a/contract-ts/tsconfig.json +++ b/contract-ts/tsconfig.json @@ -1,9 +1,14 @@ { "compilerOptions": { "experimentalDecorators": true, - "target": "es5", - "noEmit": true + "target": "ES5", + "noEmit": true, + "noImplicitAny": false, }, + "files": [ + "sandbox-ts/main.ava.ts", + "src/contract.ts" + ], "exclude": [ "node_modules" ],