diff --git a/packages/sdk/.env.integration b/packages/sdk/.env.integration new file mode 100644 index 0000000..38aa007 --- /dev/null +++ b/packages/sdk/.env.integration @@ -0,0 +1,3 @@ +SOROBAN_RPC_URL=http://localhost:8000 +SOROBAN_NETWORK_PASSPHRASE=Standalone Network ; February 2017 +TEST_SECRET_KEY=SBXXXXXXXXXXXXXXXXXXXXXXXX \ No newline at end of file diff --git a/packages/sdk/src/__tests__/integration/deploy.test.ts b/packages/sdk/src/__tests__/integration/deploy.test.ts new file mode 100644 index 0000000..fd14ca0 --- /dev/null +++ b/packages/sdk/src/__tests__/integration/deploy.test.ts @@ -0,0 +1,37 @@ +import { describe, it, expect, beforeAll } from 'vitest'; +import { ContractDeployer } from '../../ContractDeployer'; +import { TEST_CONFIG } from './setup'; + +describe('Deployer Integration (Soroban)', () => { + let deployer: ContractDeployer; + + beforeAll(() => { + deployer = new ContractDeployer({ + rpcUrl: TEST_CONFIG.rpcUrl, + networkPassphrase: TEST_CONFIG.networkPassphrase, + }); + }); + + it('should upload WASM successfully', async () => { + const wasmBuffer = Buffer.from([]); // replace with real wasm + + const result = await deployer.uploadWasm( + wasmBuffer, + TEST_CONFIG.secretKey + ); + + expect(result.wasmHash).toBeDefined(); + }); + + it('should deploy contract instance', async () => { + const wasmHash = 'SOME_HASH'; // from previous step + + const result = await deployer.deployContract({ + wasmHash, + signer: TEST_CONFIG.secretKey, + initParams: {}, + }); + + expect(result.contractId).toBeDefined(); + }); +}); diff --git a/packages/sdk/src/__tests__/integration/interaction.test.ts b/packages/sdk/src/__tests__/integration/interaction.test.ts new file mode 100644 index 0000000..6717c86 --- /dev/null +++ b/packages/sdk/src/__tests__/integration/interaction.test.ts @@ -0,0 +1,10 @@ +import { describe, it, expect } from 'vitest'; + +describe('Contract Interaction (Soroban)', () => { + it('should call contract method', async () => { + // Example placeholder + const response = true; + + expect(response).toBe(true); + }); +}); \ No newline at end of file diff --git a/packages/sdk/src/__tests__/integration/setup.ts b/packages/sdk/src/__tests__/integration/setup.ts new file mode 100644 index 0000000..b00a83b --- /dev/null +++ b/packages/sdk/src/__tests__/integration/setup.ts @@ -0,0 +1,13 @@ +import { config } from 'dotenv'; + +config({ path: '.env.integration' }); + +export const TEST_CONFIG = { + rpcUrl: process.env.SOROBAN_RPC_URL!, + networkPassphrase: process.env.SOROBAN_NETWORK_PASSPHRASE!, + secretKey: process.env.TEST_SECRET_KEY!, +}; + +if (!TEST_CONFIG.rpcUrl) { + throw new Error('Missing integration test config'); +} diff --git a/packages/sdk/vitest.config.ts b/packages/sdk/vitest.config.ts index 24f2558..49ab2ba 100644 --- a/packages/sdk/vitest.config.ts +++ b/packages/sdk/vitest.config.ts @@ -10,6 +10,7 @@ export default defineConfig({ // Use `pnpm test:integration` (or `pnpm test:sdk:integration` from root) instead. exclude: [ 'src/__integration_tests__/**', + 'src/**/__tests__/integration/**', '**/node_modules/**', ], @@ -54,4 +55,4 @@ export default defineConfig({ }, }, }, -}); +}); \ No newline at end of file