purrbot-api
Version:
The official API wrapper for the Purrbot.site API 100% API Coverage 100% Type-Script coverage
62 lines (53 loc) • 2.13 kB
text/typescript
import { describe, expect, jest, test } from '@jest/globals';
import sfw from '../src/sfw';
import { fail } from 'assert';
describe('sfw.ts', () => {
// Set longer timeout since we're making actual API calls
jest.setTimeout(10000);
test('sfw.get() should return a valid image URL', async () => {
const result = await sfw.get('img', 'neko');
expect(result).toMatch(/^https:\/\/.+\.(jpg|jpeg|png|gif)$/i);
});
test('sfw.list() should return an array of image URLs', async () => {
const result = await sfw.list('img', 'neko');
expect(Array.isArray(result)).toBe(true);
expect(result.length).toBeGreaterThan(0);
// Check that each URL is valid
result.forEach((url) => {
expect(url).toMatch(/^https:\/\/.+\.(jpg|jpeg|png|gif)$/i);
});
});
test('sfw.gif.get() should return a valid GIF URL', async () => {
const result = await sfw.gif.get('neko');
expect(result).toMatch(/^https:\/\/.+\.gif$/i);
});
test('sfw.img.list() should return an array of image URLs', async () => {
const result = await sfw.img.list('neko');
expect(Array.isArray(result)).toBe(true);
expect(result.length).toBeGreaterThan(0);
// Check that each URL has proper format
result.forEach((url) => {
expect(url).toMatch(/^https:\/\/.+\.(jpg|jpeg|png|gif)$/i);
});
});
// Test multiple SFW categories to ensure they all work
test('sfw.categories functions should return valid URLs', async () => {
// Test a few representative categories
const nekoResult = await sfw.categories.neko('img');
expect(nekoResult).toMatch(/^https:\/\/.+\.(jpg|jpeg|png|gif)$/i);
const hugResult = await sfw.categories.hug();
expect(hugResult).toMatch(/^https:\/\/.+\.gif$/i);
});
// Error handling test
test('should handle API errors gracefully', async () => {
// We'll use a try/catch since we're expecting potential errors
try {
// Attempt to use an invalid category - this should throw an error
await sfw.get('img', 'invalid-category' as any);
fail('Expected an error but none was thrown');
} catch (error) {
expect(error).toBeDefined();
expect(error instanceof Error).toBe(true);
}
});
});