native-update
Version:
Foundation package for building a comprehensive update system for Capacitor apps. Provides architecture and interfaces but requires backend implementation.
54 lines • 2.84 kB
JavaScript
import { describe, it, expect } from 'vitest';
import { SecurityValidator } from '../core/security';
describe('SecurityValidator', () => {
describe('validateUrl', () => {
it('should accept HTTPS URLs', () => {
expect(SecurityValidator.validateUrl('https://example.com')).toBe(true);
expect(SecurityValidator.validateUrl('https://sub.example.com/path')).toBe(true);
expect(SecurityValidator.validateUrl('https://example.com:8443')).toBe(true);
});
it('should reject HTTP URLs', () => {
expect(SecurityValidator.validateUrl('http://example.com')).toBe(false);
expect(SecurityValidator.validateUrl('http://localhost')).toBe(false);
});
it('should reject invalid URLs', () => {
expect(SecurityValidator.validateUrl('not-a-url')).toBe(false);
expect(SecurityValidator.validateUrl('')).toBe(false);
expect(SecurityValidator.validateUrl('javascript:alert(1)')).toBe(false);
});
});
describe('validateChecksum', () => {
it('should validate SHA-256 checksums', () => {
const validChecksum = 'a'.repeat(64);
expect(SecurityValidator.validateChecksum(validChecksum)).toBe(true);
});
it('should reject invalid checksums', () => {
expect(SecurityValidator.validateChecksum('too-short')).toBe(false);
expect(SecurityValidator.validateChecksum('invalid@chars')).toBe(false);
expect(SecurityValidator.validateChecksum('')).toBe(false);
});
});
describe('sanitizeInput', () => {
it('should sanitize dangerous input', () => {
expect(SecurityValidator.sanitizeInput('<script>alert(1)</script>')).toBe('alert1');
expect(SecurityValidator.sanitizeInput('normal text')).toBe('normal text');
expect(SecurityValidator.sanitizeInput('path/to/file')).toBe('path/to/file');
});
it('should handle null and undefined', () => {
expect(SecurityValidator.sanitizeInput(null)).toBe('');
expect(SecurityValidator.sanitizeInput(undefined)).toBe('');
});
});
describe('validateBundleSize', () => {
it('should accept reasonable bundle sizes', () => {
expect(SecurityValidator.validateBundleSize(1024 * 1024)).toBe(true); // 1MB
expect(SecurityValidator.validateBundleSize(50 * 1024 * 1024)).toBe(true); // 50MB
});
it('should reject excessive sizes', () => {
expect(SecurityValidator.validateBundleSize(200 * 1024 * 1024)).toBe(false); // 200MB
expect(SecurityValidator.validateBundleSize(-1)).toBe(false);
expect(SecurityValidator.validateBundleSize(0)).toBe(false);
});
});
});
//# sourceMappingURL=security.test.js.map