108 lines
3.7 KiB
TypeScript
108 lines
3.7 KiB
TypeScript
import { expect, tap } from '@push.rocks/tapbundle';
|
|
import * as qenv from '@push.rocks/qenv';
|
|
const testQenv = new qenv.Qenv('./', './.nogit/');
|
|
|
|
import * as ghost from '../ts/index.js';
|
|
|
|
let testGhostInstance: ghost.Ghost;
|
|
|
|
tap.test('initialize Ghost instance', async () => {
|
|
testGhostInstance = new ghost.Ghost({
|
|
baseUrl: 'http://localhost:2368',
|
|
adminApiKey: await testQenv.getEnvVarOnDemand('ADMIN_APIKEY'),
|
|
contentApiKey: await testQenv.getEnvVarOnDemand('CONTENT_APIKEY'),
|
|
});
|
|
expect(testGhostInstance).toBeInstanceOf(ghost.Ghost);
|
|
});
|
|
|
|
tap.test('should get all authors', async () => {
|
|
const authors = await testGhostInstance.getAuthors();
|
|
expect(authors).toBeArray();
|
|
console.log(`Found ${authors.length} authors`);
|
|
if (authors.length > 0) {
|
|
expect(authors[0]).toBeInstanceOf(ghost.Author);
|
|
console.log(`First author: ${authors[0].getName()} (${authors[0].getSlug()})`);
|
|
}
|
|
});
|
|
|
|
tap.test('should get authors with limit', async () => {
|
|
const authors = await testGhostInstance.getAuthors({ limit: 2 });
|
|
expect(authors).toBeArray();
|
|
expect(authors.length).toBeLessThanOrEqual(2);
|
|
});
|
|
|
|
tap.test('should filter authors with minimatch pattern', async () => {
|
|
const authors = await testGhostInstance.getAuthors();
|
|
if (authors.length > 0) {
|
|
const firstAuthorSlug = authors[0].getSlug();
|
|
const pattern = `${firstAuthorSlug.charAt(0)}*`;
|
|
const filteredAuthors = await testGhostInstance.getAuthors({ filter: pattern });
|
|
expect(filteredAuthors).toBeArray();
|
|
console.log(`Filtered authors with pattern '${pattern}': found ${filteredAuthors.length}`);
|
|
filteredAuthors.forEach((author) => {
|
|
expect(author.getSlug()).toMatch(new RegExp(`^${firstAuthorSlug.charAt(0)}`));
|
|
});
|
|
}
|
|
});
|
|
|
|
tap.test('should get author by slug', async () => {
|
|
const authors = await testGhostInstance.getAuthors({ limit: 1 });
|
|
if (authors.length > 0) {
|
|
const author = await testGhostInstance.getAuthorBySlug(authors[0].getSlug());
|
|
expect(author).toBeInstanceOf(ghost.Author);
|
|
expect(author.getSlug()).toEqual(authors[0].getSlug());
|
|
console.log(`Got author by slug: ${author.getName()}`);
|
|
}
|
|
});
|
|
|
|
tap.test('should get author by ID', async () => {
|
|
const authors = await testGhostInstance.getAuthors({ limit: 1 });
|
|
if (authors.length > 0) {
|
|
const author = await testGhostInstance.getAuthorById(authors[0].getId());
|
|
expect(author).toBeInstanceOf(ghost.Author);
|
|
expect(author.getId()).toEqual(authors[0].getId());
|
|
}
|
|
});
|
|
|
|
tap.test('should access author methods', async () => {
|
|
const authors = await testGhostInstance.getAuthors({ limit: 1 });
|
|
if (authors.length > 0) {
|
|
const author = authors[0];
|
|
expect(author.getId()).toBeTruthy();
|
|
expect(author.getName()).toBeTruthy();
|
|
expect(author.getSlug()).toBeTruthy();
|
|
const json = author.toJson();
|
|
expect(json).toBeTruthy();
|
|
expect(json.id).toEqual(author.getId());
|
|
}
|
|
});
|
|
|
|
tap.test('should update author bio', async () => {
|
|
try {
|
|
const authors = await testGhostInstance.getAuthors({ limit: 1 });
|
|
if (authors.length > 0) {
|
|
const author = authors[0];
|
|
const originalBio = author.getBio();
|
|
|
|
const updatedAuthor = await author.update({
|
|
bio: 'Updated bio for testing'
|
|
});
|
|
expect(updatedAuthor).toBeInstanceOf(ghost.Author);
|
|
expect(updatedAuthor.getBio()).toEqual('Updated bio for testing');
|
|
console.log(`Updated author bio: ${updatedAuthor.getName()}`);
|
|
|
|
await updatedAuthor.update({
|
|
bio: originalBio
|
|
});
|
|
}
|
|
} catch (error: any) {
|
|
if (error.type === 'NotImplementedError') {
|
|
console.log('Author updates not supported in this Ghost version - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
|
|
export default tap.start();
|