152 lines
4.8 KiB
TypeScript
152 lines
4.8 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;
|
|
let createdMember: ghost.Member;
|
|
|
|
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 members', async () => {
|
|
try {
|
|
const members = await testGhostInstance.getMembers({ limit: 10 });
|
|
expect(members).toBeArray();
|
|
console.log(`Found ${members.length} members`);
|
|
if (members.length > 0) {
|
|
expect(members[0]).toBeInstanceOf(ghost.Member);
|
|
console.log(`First member: ${members[0].getEmail()}`);
|
|
}
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available or requires permissions - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should get members with limit', async () => {
|
|
try {
|
|
const members = await testGhostInstance.getMembers({ limit: 2 });
|
|
expect(members).toBeArray();
|
|
expect(members.length).toBeLessThanOrEqual(2);
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should filter members with minimatch pattern', async () => {
|
|
try {
|
|
const members = await testGhostInstance.getMembers({ filter: '*@gmail.com' });
|
|
expect(members).toBeArray();
|
|
console.log(`Found ${members.length} Gmail members`);
|
|
if (members.length > 0) {
|
|
members.forEach((member) => {
|
|
expect(member.getEmail()).toContain('@gmail.com');
|
|
});
|
|
}
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should create member', async () => {
|
|
try {
|
|
const timestamp = Date.now();
|
|
createdMember = await testGhostInstance.createMember({
|
|
email: `test${timestamp}@example.com`,
|
|
name: `Test Member ${timestamp}`
|
|
});
|
|
expect(createdMember).toBeInstanceOf(ghost.Member);
|
|
expect(createdMember.getEmail()).toEqual(`test${timestamp}@example.com`);
|
|
console.log(`Created member: ${createdMember.getId()}`);
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should access member methods', async () => {
|
|
if (createdMember) {
|
|
expect(createdMember.getId()).toBeTruthy();
|
|
expect(createdMember.getEmail()).toBeTruthy();
|
|
expect(createdMember.getName()).toBeTruthy();
|
|
const json = createdMember.toJson();
|
|
expect(json).toBeTruthy();
|
|
expect(json.id).toEqual(createdMember.getId());
|
|
}
|
|
});
|
|
|
|
tap.test('should get member by email', async () => {
|
|
if (createdMember) {
|
|
try {
|
|
const member = await testGhostInstance.getMemberByEmail(createdMember.getEmail());
|
|
expect(member).toBeInstanceOf(ghost.Member);
|
|
expect(member.getEmail()).toEqual(createdMember.getEmail());
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403 || error.type === 'RequestNotAcceptableError') {
|
|
console.log('Member by email not supported in this Ghost version - using ID instead');
|
|
const member = await testGhostInstance.getMemberById(createdMember.getId());
|
|
expect(member).toBeInstanceOf(ghost.Member);
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should update member', async () => {
|
|
if (createdMember) {
|
|
try {
|
|
const updatedMember = await createdMember.update({
|
|
note: 'Updated by automated tests'
|
|
});
|
|
expect(updatedMember).toBeInstanceOf(ghost.Member);
|
|
console.log(`Updated member: ${updatedMember.getId()}`);
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
tap.test('should delete member', async () => {
|
|
if (createdMember) {
|
|
try {
|
|
await createdMember.delete();
|
|
console.log(`Deleted member: ${createdMember.getId()}`);
|
|
} catch (error: any) {
|
|
if (error.message?.includes('members') || error.statusCode === 403) {
|
|
console.log('Members feature not available - skipping test');
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
export default tap.start();
|