quarc/tests/unit/test-pipes.ts

121 lines
5.3 KiB
TypeScript

/**
* Testy dla podstawowych pipes
*/
import {
UpperCasePipe,
LowerCasePipe,
JsonPipe,
CamelCasePipe,
PascalCasePipe,
SnakeCasePipe,
KebabCasePipe,
SubstrPipe,
DatePipe
} from '../../core/pipes/index';
console.log('\n=== Test: Quarc Pipes ===\n');
const tests: { name: string; pass: boolean }[] = [];
// UpperCasePipe
console.log('--- UpperCasePipe ---');
const upperPipe = new UpperCasePipe();
tests.push({ name: 'uppercase: hello → HELLO', pass: upperPipe.transform('hello') === 'HELLO' });
tests.push({ name: 'uppercase: null → ""', pass: upperPipe.transform(null) === '' });
tests.push({ name: 'uppercase: undefined → ""', pass: upperPipe.transform(undefined) === '' });
// LowerCasePipe
console.log('--- LowerCasePipe ---');
const lowerPipe = new LowerCasePipe();
tests.push({ name: 'lowercase: HELLO → hello', pass: lowerPipe.transform('HELLO') === 'hello' });
tests.push({ name: 'lowercase: null → ""', pass: lowerPipe.transform(null) === '' });
// JsonPipe
console.log('--- JsonPipe ---');
const jsonPipe = new JsonPipe();
const obj = { name: 'Test', value: 123 };
const jsonResult = jsonPipe.transform(obj);
tests.push({ name: 'json: object serialized', pass: jsonResult.includes('"name"') && jsonResult.includes('"Test"') });
tests.push({ name: 'json: array serialized', pass: jsonPipe.transform([1, 2, 3]).includes('[') });
// CamelCasePipe
console.log('--- CamelCasePipe ---');
const camelPipe = new CamelCasePipe();
tests.push({ name: 'camelcase: hello-world → helloWorld', pass: camelPipe.transform('hello-world') === 'helloWorld' });
tests.push({ name: 'camelcase: hello_world → helloWorld', pass: camelPipe.transform('hello_world') === 'helloWorld' });
tests.push({ name: 'camelcase: hello world → helloWorld', pass: camelPipe.transform('hello world') === 'helloWorld' });
tests.push({ name: 'camelcase: HelloWorld → helloWorld', pass: camelPipe.transform('HelloWorld') === 'helloWorld' });
// PascalCasePipe
console.log('--- PascalCasePipe ---');
const pascalPipe = new PascalCasePipe();
tests.push({ name: 'pascalcase: hello-world → HelloWorld', pass: pascalPipe.transform('hello-world') === 'HelloWorld' });
tests.push({ name: 'pascalcase: hello_world → HelloWorld', pass: pascalPipe.transform('hello_world') === 'HelloWorld' });
tests.push({ name: 'pascalcase: hello world → HelloWorld', pass: pascalPipe.transform('hello world') === 'HelloWorld' });
// SnakeCasePipe
console.log('--- SnakeCasePipe ---');
const snakePipe = new SnakeCasePipe();
tests.push({ name: 'snakecase: helloWorld → hello_world', pass: snakePipe.transform('helloWorld') === 'hello_world' });
tests.push({ name: 'snakecase: HelloWorld → hello_world', pass: snakePipe.transform('HelloWorld') === 'hello_world' });
tests.push({ name: 'snakecase: hello-world → hello_world', pass: snakePipe.transform('hello-world') === 'hello_world' });
tests.push({ name: 'snakecase: hello world → hello_world', pass: snakePipe.transform('hello world') === 'hello_world' });
// KebabCasePipe
console.log('--- KebabCasePipe ---');
const kebabPipe = new KebabCasePipe();
tests.push({ name: 'kebabcase: helloWorld → hello-world', pass: kebabPipe.transform('helloWorld') === 'hello-world' });
tests.push({ name: 'kebabcase: HelloWorld → hello-world', pass: kebabPipe.transform('HelloWorld') === 'hello-world' });
tests.push({ name: 'kebabcase: hello_world → hello-world', pass: kebabPipe.transform('hello_world') === 'hello-world' });
tests.push({ name: 'kebabcase: hello world → hello-world', pass: kebabPipe.transform('hello world') === 'hello-world' });
// SubstrPipe
console.log('--- SubstrPipe ---');
const substrPipe = new SubstrPipe();
tests.push({ name: 'substr: "hello"(0, 3) → "hel"', pass: substrPipe.transform('hello', 0, 3) === 'hel' });
tests.push({ name: 'substr: "hello"(2) → "llo"', pass: substrPipe.transform('hello', 2) === 'llo' });
tests.push({ name: 'substr: null → ""', pass: substrPipe.transform(null, 0) === '' });
// DatePipe
console.log('--- DatePipe ---');
const datePipe = new DatePipe();
const testDate = new Date('2024-01-15T14:30:45');
const shortResult = datePipe.transform(testDate, 'short');
tests.push({ name: 'date: short format contains date', pass: shortResult.includes('01') || shortResult.includes('1') });
const mediumResult = datePipe.transform(testDate, 'medium');
tests.push({ name: 'date: medium format contains month', pass: mediumResult.includes('Jan') });
const customResult = datePipe.transform(testDate, 'yyyy-MM-dd');
tests.push({ name: 'date: custom format yyyy-MM-dd', pass: customResult === '2024-01-15' });
const customTimeResult = datePipe.transform(testDate, 'HH:mm:ss');
tests.push({ name: 'date: custom format HH:mm:ss', pass: customTimeResult === '14:30:45' });
tests.push({ name: 'date: null → ""', pass: datePipe.transform(null) === '' });
tests.push({ name: 'date: invalid date → original', pass: datePipe.transform('invalid').includes('invalid') });
// Podsumowanie
console.log('\n=== Test Results ===');
let passed = 0;
let failed = 0;
tests.forEach(test => {
const status = test.pass ? '✓ PASS' : '✗ FAIL';
console.log(`${status}: ${test.name}`);
if (test.pass) passed++;
else failed++;
});
console.log(`\nTotal: ${passed} passed, ${failed} failed`);
if (failed > 0) {
console.error('\n❌ PIPES TEST FAILED');
process.exit(1);
} else {
console.log('\n✅ PIPES TEST PASSED');
process.exit(0);
}