validai
Version:
AI-powered text validation for slang and gibberish detection
84 lines (83 loc) • 3.98 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
// Mock the GeminiProvider
jest.mock('../providers/gemini', () => {
return {
GeminiProvider: jest.fn().mockImplementation(() => ({
validate: jest.fn().mockImplementation((texts) => __awaiter(void 0, void 0, void 0, function* () {
const results = {};
for (const [key, value] of Object.entries(texts)) {
results[key] = {
slang: value.includes('lol') || value.includes('omg'),
slangReason: value.includes('lol') ? "Contains slang: 'lol'" : "",
gibbrish: value.includes('asdf'),
gibbrishReason: value.includes('asdf') ? "Contains gibberish text" : ""
};
}
return results;
}))
}))
};
});
describe('ValidAI', () => {
let validator;
beforeEach(() => {
validator = new index_1.ValidAI('fake-api-key', 'gemini', 'gemini-model');
});
describe('constructor', () => {
it('should throw error for unsupported providers', () => {
expect(() => {
// @ts-ignore - Testing invalid provider
new index_1.ValidAI('fake-api-key', 'unsupported', 'model');
}).toThrow('Currently only Gemini provider is supported');
});
it('should create instance with valid provider', () => {
expect(validator).toBeInstanceOf(index_1.ValidAI);
});
});
describe('validate', () => {
it('should validate text input correctly', () => __awaiter(void 0, void 0, void 0, function* () {
const input = {
normal: 'Hello world',
slang: 'lol what up',
gibberish: 'asdf keyboard spam'
};
const result = yield validator.validate(input);
expect(result.success).toBe(false); // Because we have slang and gibberish
expect(result.results.normal.slang).toBe(false);
expect(result.results.slang.slang).toBe(true);
expect(result.results.gibberish.gibbrish).toBe(true);
}));
it('should handle empty input', () => __awaiter(void 0, void 0, void 0, function* () {
const input = {};
const result = yield validator.validate(input);
expect(result.success).toBe(true);
expect(result.results).toEqual({});
}));
it('should throw error for non-string inputs', () => __awaiter(void 0, void 0, void 0, function* () {
const input = {
text: 'valid text',
number: 123
};
yield expect(validator.validate(input)).rejects.toThrow('The field number is not a string input');
}));
it('should return success true when no slang or gibberish detected', () => __awaiter(void 0, void 0, void 0, function* () {
const input = {
text1: 'This is a proper sentence.',
text2: 'Another well-formed text.'
};
const result = yield validator.validate(input);
expect(result.success).toBe(true);
}));
});
});