Files
PluralFlux-infra/tests/helpers/importHelper.test.js

103 lines
3.9 KiB
JavaScript
Raw Normal View History

2026-02-23 13:36:31 -05:00
const {enums} = require('../../src/enums.js');
jest.mock('../../src/helpers/memberHelper.js', () => {
return {
memberHelper: {
addFullMember: jest.fn()
}
}
})
const {memberHelper} = require("../../src/helpers/memberHelper.js");
const {importHelper} = require('../../src/helpers/importHelper.js');
2026-02-23 09:00:48 -05:00
describe('importHelper', () => {
2026-02-23 13:36:31 -05:00
const authorId = '123';
const attachmentUrl = 'system.json';
const mockImportedMember = {
proxy_tags: [{
prefix: "SP{",
suffix: "}"
}],
display_name: "SomePerson",
avatar_url: 'oya.png',
name: 'somePerson'
}
const mockData = {
members: [mockImportedMember]
};
const mockAddReturnMember = {
proxy: "SP{text}",
displayname: "SomePerson",
propic: 'oya.png',
name: 'somePerson'
}
const mockAddReturn = {
member: mockAddReturnMember,
errors: []
}
2026-02-23 09:00:48 -05:00
beforeEach(() => {
jest.resetModules();
jest.clearAllMocks();
2026-02-23 13:36:31 -05:00
global.fetch = jest.fn().mockResolvedValue({
ok: true,
json: () => Promise.resolve(mockData)
})
})
describe('pluralKitImport', () => {
test('if no attachment URL, throws error', async() => {
await expect(importHelper.pluralKitImport(authorId)).rejects.toThrow(enums.err.NOT_JSON_FILE);
2026-02-23 13:36:31 -05:00
})
test('if attachment URL, calls fetch and addFullMember and returns value', async() => {
2026-02-23 13:36:31 -05:00
memberHelper.addFullMember.mockResolvedValue(mockAddReturn);
const result = await importHelper.pluralKitImport(authorId, attachmentUrl);
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(attachmentUrl);
expect(memberHelper.addFullMember).toHaveBeenCalledWith(authorId, mockImportedMember.name, mockImportedMember.display_name, 'SP{text}', mockImportedMember.avatar_url);
expect(result).toEqual(`Successfully added members: ${mockAddReturnMember.name}`)
})
test('if fetch fails, throws error', async() => {
global.fetch = jest.fn().mockRejectedValue("can't get");
await expect(importHelper.pluralKitImport(authorId, attachmentUrl)).rejects.toThrow(enums.err.CANNOT_FETCH_RESOURCE, "can't get file");
})
test('if json conversion fails, throws error', async() => {
global.fetch = jest.fn().mockResolvedValue({
ok: true,
json: () => Promise.reject("not json")
2026-02-23 13:36:31 -05:00
})
await expect(importHelper.pluralKitImport(authorId, attachmentUrl)).rejects.toThrow(enums.err.NOT_JSON_FILE, "not json");
2026-02-23 13:36:31 -05:00
})
test('if addFullMember returns nothing, return correct enum', async () => {
2026-02-23 13:36:31 -05:00
memberHelper.addFullMember.mockResolvedValue();
await expect(importHelper.pluralKitImport(authorId, attachmentUrl)).rejects.toThrow(([], enums.err.NO_MEMBERS_IMPORTED));
2026-02-23 13:36:31 -05:00
})
test('if addFullMember throws error, catch and return error', async() => {
memberHelper.addFullMember.mockImplementation(() => {new Error('error')});
await expect(importHelper.pluralKitImport(authorId, attachmentUrl)).rejects.toThrow(([new Error('error')], enums.err.NO_MEMBERS_IMPORTED));
2026-02-23 13:36:31 -05:00
})
test('if addFullMember returns member but also contains error, return member and error', async () => {
2026-02-23 13:36:31 -05:00
// Arrange
const memberObj = {errors: ['error'], member: mockAddReturnMember};
memberHelper.addFullMember.mockResolvedValue(memberObj);
// Act & Assert
await expect(importHelper.pluralKitImport(authorId, attachmentUrl)).rejects.toThrow((['error'], `Successfully added members: ${mockAddReturnMember.name}`));
2026-02-23 13:36:31 -05:00
})
2026-02-23 09:00:48 -05:00
})
afterEach(() => {
// restore the spy created with spyOn
2026-02-23 13:36:31 -05:00
jest.clearAllMocks();
2026-02-23 09:00:48 -05:00
});
})