mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 12:15:51 +00:00
68 lines
2.5 KiB
TypeScript
68 lines
2.5 KiB
TypeScript
import setupAPI from '../setup-api'
|
|
import { RippleAPI } from 'ripple-api'
|
|
import addresses from '../fixtures/addresses.json'
|
|
import { getAllPublicMethods, loadTestSuite } from './utils'
|
|
|
|
/**
|
|
* RippleAPI Test Runner
|
|
*
|
|
* Background: "test/api-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 RippleAPI 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 API 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('RippleAPI [Test Runner]', function() {
|
|
beforeEach(setupAPI.setup)
|
|
afterEach(setupAPI.teardown)
|
|
|
|
// Collect all the tests:
|
|
const allPublicMethods = getAllPublicMethods(new RippleAPI())
|
|
const allTestSuites = allPublicMethods.map(loadTestSuite)
|
|
|
|
// TODO: Once migration is complete, remove this filter so that missing tests are reported.
|
|
const filteredTestSuites = allTestSuites.filter(({ isMissing }) => !isMissing)
|
|
|
|
// Run all the tests:
|
|
for (const { name: suiteName, tests, isMissing } of filteredTestSuites) {
|
|
describe(suiteName, () => {
|
|
// Check that tests exist as expected, and report any errors if they don't.
|
|
it('has valid test suite', () => {
|
|
if (isMissing) {
|
|
throw new Error(
|
|
`Test file not found! Create file "test/api/${suiteName}/index.ts".`
|
|
)
|
|
}
|
|
if (tests.length === 0) {
|
|
throw new Error(`No tests found! Is your test file set up properly?`)
|
|
}
|
|
})
|
|
// Run each test with the original-style address.
|
|
describe(`1. Original Address Style`, () => {
|
|
for (const [testName, fn] of tests) {
|
|
it(testName, function() {
|
|
return fn(this.api, addresses.ACCOUNT)
|
|
})
|
|
}
|
|
})
|
|
// Run each test with the newer, x-address style.
|
|
describe(`2. X-Address Style`, () => {
|
|
for (const [testName, fn] of tests) {
|
|
it(testName, function() {
|
|
return fn(this.api, addresses.ACCOUNT_X)
|
|
})
|
|
}
|
|
})
|
|
})
|
|
}
|
|
})
|