Files
xo-cash-utils/test/templates.test.ts

73 lines
2.7 KiB
TypeScript

import { expect, test } from 'vitest';
import { isHex } from '@bitauth/libauth';
import { p2pkhTemplate } from '@xo-cash/templates';
import { generateTemplateIdentifier, parseTemplate } from '../source/index.ts';
/**
* Tests that generateTemplateIdentifier returns a valid hex string of 64 characters.
*/
const testGenerateTemplateIdentifierOutputFormat = (): void => {
// Parse the template
const parsedTemplate = parseTemplate(p2pkhTemplate);
// Generate the template identifier
const identifier = generateTemplateIdentifier(parsedTemplate);
// The identifier is 64 characters long
expect(identifier).toHaveLength(64);
// The identifier is a valid hex string
expect(isHex(identifier)).toBe(true);
};
/**
* Tests that generateTemplateIdentifier is deterministic.
*/
const testGenerateTemplateIdentifierIsDeterministic = (): void => {
// Parse the template
const parsedTemplate = parseTemplate(p2pkhTemplate);
// Generate the template identifier once
const firstTemplateIdentifier = generateTemplateIdentifier(parsedTemplate);
// Generate the template identifier again
const secondTemplateIdentifier = generateTemplateIdentifier(parsedTemplate);
// The same template produces the same identifier
expect(firstTemplateIdentifier).toBe(secondTemplateIdentifier);
};
/**
* Tests that two templates with different content produce different identifiers.
*/
const testGenerateTemplateIdentifierDiffersForDifferentTemplates = (): void => {
// Parse the original template
const parsedTemplate = parseTemplate(p2pkhTemplate);
// Generate the original template identifier
const originalTemplateIdentifier = generateTemplateIdentifier(parsedTemplate);
// Create a modified template with a different name
const modifiedTemplate = { ...p2pkhTemplate, name: `${p2pkhTemplate.name} (modified)` };
// Parse the modified template
const parsedModifiedTemplate = parseTemplate(modifiedTemplate);
// Generate the modified template identifier
const modifiedTemplateIdentifier = generateTemplateIdentifier(parsedModifiedTemplate);
// The original and modified templates produce different identifiers
expect(originalTemplateIdentifier).not.toBe(modifiedTemplateIdentifier);
};
const runTests = async (): Promise<void> => {
test('generateTemplateIdentifier: returns a 64-character valid hex string', testGenerateTemplateIdentifierOutputFormat);
test('generateTemplateIdentifier: is deterministic', testGenerateTemplateIdentifierIsDeterministic);
test(
'generateTemplateIdentifier: produces different identifiers for different templates',
testGenerateTemplateIdentifierDiffersForDifferentTemplates,
);
};
await runTests();