Files
xahau.js/test/ripple-client-test.ts
Mayukha Vadari 59396c3f8f Edit Client constructor to take a server URI (#1544)
* edit Client

* fix TS issues + tests

* minor edits

* rename ClientBroadcast -> BroadcastClient
2021-10-04 14:10:09 -04:00

83 lines
2.9 KiB
TypeScript

import setupClient from './setup-client'
import {Client} from 'xrpl-local'
import addresses from './fixtures/addresses.json'
import {getAllPublicMethods, loadTestSuites} from './utils'
/**
* Client Test Runner
*
* Background: "test/client-test.ts" had hit 4000+ lines of test code and 300+
* individual tests. Additionally, a new address format was added which
* forced us to copy-paste duplicate the test file to test both the old forms
* of address. This added a significant maintenance burden.
*
* This test runner allows us to split our tests by Client method, and
* automatically load, validate, and run them. Each tests accepts arguments to
* test with, which allows us to re-run tests across different data
* (ex: different address styles).
*
* Additional benefits:
* - Throw errors when we detect the absence of tests.
* - Type the Client object under test and catch typing issues (currently untyped).
* - Sets the stage for more cleanup, like moving test-specific fixtures closer to their tests.
*/
describe('Client [Test Runner]', function () {
beforeEach(setupClient.setup)
afterEach(setupClient.teardown)
// Collect all the tests:
const allPublicMethods = getAllPublicMethods(new Client("wss://"))
// doesn't need the client, just needs to instantiate to get public methods
const allTestSuites = loadTestSuites()
// Run all the tests:
for (const {name: methodName, tests, config} of allTestSuites) {
describe(`client.${methodName}`, () => {
// Run each test that does not use an address.
for (const [testName, fn] of tests) {
if (fn.length === 1) {
it(testName, function () {
return fn(this.client, addresses.ACCOUNT)
})
}
}
// Run each test with a classic address.
describe(`[Classic Address]`, () => {
for (const [testName, fn] of tests) {
if (fn.length === 2) {
it(testName, function () {
return fn(this.client, addresses.ACCOUNT)
})
}
}
})
// Run each test with an X-address.
if (!config.skipXAddress) {
describe(`[X-address]`, () => {
for (const [testName, fn] of tests) {
if (fn.length === 2) {
it(testName, function () {
return fn(this.client, addresses.ACCOUNT_X)
})
}
}
})
}
})
}
// Report any missing tests.
const allTestedMethods = new Set(allTestSuites.map((s) => s.name))
for (const methodName of allPublicMethods) {
if (!allTestedMethods.has(methodName)) {
// TODO: Once migration is complete, remove `.skip()` so that missing tests are reported as failures.
it.skip(`${methodName} - no test suite found`, () => {
throw new Error(
`Test file not found! Create file "test/client/${methodName}/index.ts".`
)
})
}
}
})