mirror of
https://github.com/pieartsy/PluralFlux.git
synced 2026-04-14 20:15:28 +10:00
* Update dockerfile for standalone deployment (#23) * Add files via upload * Update Docker image for pluralflux service * removing unnecessary network and container name definitions --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * Converting ES6 back to CJS (#25) converting back to cjs Co-authored-by: Aster Fialla <asterfialla@gmail.com> * Fix: Further converting ES6 to CJS - Making exports named instead of default (#26) * adding to git ignore * making imports named not default to not break all my tests * adjusted setup for memberhelper test --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * feat: add db migrations with typeORM (#28) * adding typescript packages for typeORM * add typeORM initial files * updating package scripts * updating compose.yaml to have an exposed port for the postgres * modifying setup for typeORM * update database stuff and and package.json to help generate migrations * made models and migrations in typeORM * delete unneeded database.js * made database pattern ignored by jest * remove sequelize * separate member repo from member helper * not sure why i made everything numbers in the model but it's fixed now * edited package.json script * remove unused index.ts * adjusted files to reference repository correctly and appdatasource * made appdatasource export as named * removed start-db script * added init to appdatasource in bot.js * migrations finally! * new migration matching model names I want * updating tests * removing testpathignore patterns since it seems to be unecessary? * adjusting migrations to match current schema * removed reference to secrets file * delete old migration * Revert "delete old migration" This reverts commitdb1efa39a7. * Revert "adjusting migrations to match current schema" This reverts commitef89a83f6a. * just deleted system creation since it's got nothing in it anyway * renamed memberRepository to memberRepo for consistency * added await back to parseMemberCommand call to memberArgumentHandler * changed call to memberHelper.getMembersByAuthor to memberRepo * renamed repo updateMemberValue to updateMemberField * removed throw references in repo docstrings * remove unneeded subscriber directory ref * changed createdAt and updatedAt columns to be auto-generated made member table have timezone * changed casing of isInitialized in mock for bot.js * removed % from ILike query so that it doesn't match substrings/wildcard * renamed some stray updateMemberValue in mocks -> updateMemberField --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * feat: Add migration to migrate existing data to new member table (#29) added migration to fill new Member table with data from Members Co-authored-by: Aster Fialla <asterfialla@gmail.com> * fix: update message helper reference hotfix (#30) * forgot to update a reference in messageHelper to memberRepo instead of memberHelper * turned off data-source logging --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * fix: update dockerfile to run npm start (#31) fix: update dockerfile to run npm start (which runs ts-node) instead of node Co-authored-by: Aster Fialla <asterfialla@gmail.com> * added .env with examples, updated data-source to be access a docker container instead of relying on loopback * i forgot to git add data-source.ts 🤦 * fix: changed property reference for createMember in repo (#32) fix for createMember object references (was referencing non-existent properties) Co-authored-by: Aster Fialla <asterfialla@gmail.com> * fix: memberRepo methods syntax (#35) * rearranged update member field and remove member to match expected structure in typeORM * update docstring * change insert to save in memberRepo * added command in package.json --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * Delete duplicate members migration (#33) * add migration to delete duplicates that currently exist in the db * added a name attribute for consistency --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * Add unique index migration (#34) * add migration to delete duplicates that currently exist in the db * change model and migration to add a unique index constraint to id and name * renamed unique index name to be readable * redid model and migration to use @Unique instead of @Index * remove //Here comment --------- Co-authored-by: Aster Fialla <asterfialla@gmail.com> * why wont these workflows stay up gahdamn --------- Co-authored-by: Laika Bozhko <63646916+LaikaBzko@users.noreply.github.com> Co-authored-by: Aster Fialla <asterfialla@gmail.com> Co-authored-by: laika <laika@sanya.gay>
121 lines
6.6 KiB
JavaScript
121 lines
6.6 KiB
JavaScript
const env = require('dotenv');
|
|
env.config();
|
|
|
|
|
|
jest.mock('../../src/repositories/memberRepo.js', () => {
|
|
return {
|
|
memberRepo: {
|
|
getMembersByAuthor: jest.fn()
|
|
}
|
|
}
|
|
})
|
|
|
|
const {messageHelper} = require("../../src/helpers/messageHelper.js");
|
|
const {memberRepo} = require("../../src/repositories/memberRepo");
|
|
|
|
describe('messageHelper', () => {
|
|
|
|
beforeEach(() => {
|
|
jest.resetModules();
|
|
jest.clearAllMocks();
|
|
})
|
|
|
|
describe('parseCommandArgs', () => {
|
|
test.each([
|
|
['pf;member', ['']],
|
|
['pf;member add somePerson "Some Person"', ['add', 'somePerson', 'Some Person']],
|
|
['pf;member add \"Some Person\"', ['add', 'Some Person']],
|
|
['pf;member add somePerson \'Some Person\'', ['add', 'somePerson', 'Some Person']],
|
|
['pf;member add somePerson \"\'Some\' Person\"', ['add', 'somePerson', 'Some Person']],
|
|
])('%s returns correct arguments', (content, expected) => {
|
|
// Arrange
|
|
const command = "member";
|
|
const result = messageHelper.parseCommandArgs(content, command);
|
|
expect(result).toEqual(expected);
|
|
})
|
|
})
|
|
|
|
describe(`parseProxyTags`, () => {
|
|
const membersFor1 = [
|
|
{name: "somePerson", proxy: "--text"},
|
|
{name: "someSecondPerson", proxy: undefined},
|
|
{name: "someOtherPerson", proxy: "?text}"},
|
|
{name: "someLastPerson", proxy: "{text}"},
|
|
{name: "someEmojiPerson", proxy: "⭐text"},
|
|
{name: "someSpacePerson", proxy: "! text"},
|
|
]
|
|
|
|
const membersFor2 = []
|
|
|
|
const membersFor3 = [
|
|
{name: "someOtherThirdPerson", proxy: undefined}
|
|
]
|
|
|
|
const attachmentUrl = "../oya.png"
|
|
|
|
beforeEach(() => {
|
|
memberRepo.getMembersByAuthor = jest.fn().mockImplementation((specificAuthorId) => {
|
|
if (specificAuthorId === "1") return membersFor1;
|
|
if (specificAuthorId === "2") return membersFor2;
|
|
if (specificAuthorId === "3") return membersFor3;
|
|
})
|
|
});
|
|
|
|
test.each([
|
|
['1', 'hello', null, {}],
|
|
['1', '--hello', null, {member: membersFor1[0], message: 'hello', hasAttachment: false}],
|
|
['1', 'hello', attachmentUrl, {}],
|
|
['1', '--hello', attachmentUrl, {member: membersFor1[0], message: 'hello', hasAttachment: true}],
|
|
['1', '--', attachmentUrl, {member: membersFor1[0], message: '', hasAttachment: true}],
|
|
['1', '?hello}', null, {member: membersFor1[2], message: 'hello', hasAttachment: false}],
|
|
['1', '{hello}', null, {member: membersFor1[3], message: 'hello', hasAttachment: false}],
|
|
['1', '⭐hello', null, {member: membersFor1[4], message: 'hello', hasAttachment: false}],
|
|
['1', '! hello', null, {member: membersFor1[5], message: 'hello', hasAttachment: false}],
|
|
['2', 'hello', null, undefined],
|
|
['2', '--hello', null, undefined],
|
|
['2', 'hello', attachmentUrl, undefined],
|
|
['2', '--hello', attachmentUrl, undefined],
|
|
['3', 'hello', null, {}],
|
|
['3', '--hello', null, {}],
|
|
['3', 'hello', attachmentUrl, {}],
|
|
['3', '--hello', attachmentUrl, {}],
|
|
])('ID %s with string %s returns correct proxy', async (specificAuthorId, content, attachmentUrl, expected) => {
|
|
// Act
|
|
const res = await messageHelper.parseProxyTags(specificAuthorId, content, attachmentUrl);
|
|
// Assert
|
|
expect(res).toEqual(expected);
|
|
});
|
|
})
|
|
|
|
describe('returnBufferFromText', () => {
|
|
const charas2000 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
|
|
test('returns truncated text and buffer file when text is more than 2000 characters', () => {
|
|
// Arrange
|
|
|
|
const charasOver2000 = "bbbbb"
|
|
const expectedBuffer = Buffer.from(charasOver2000, 'utf-8');
|
|
const expected = {text: charas2000, file: expectedBuffer};
|
|
|
|
// Act
|
|
const result = messageHelper.returnBufferFromText(`${charas2000}${charasOver2000}`);
|
|
|
|
// Assert
|
|
expect(result).toEqual(expected);
|
|
})
|
|
|
|
test('returns text when text is 2000 characters or less', () => {
|
|
// Arrange
|
|
const expected = {text: charas2000, file: undefined};
|
|
// Act
|
|
const result = messageHelper.returnBufferFromText(`${charas2000}`);
|
|
// Assert
|
|
expect(result).toEqual(expected);
|
|
})
|
|
})
|
|
|
|
afterEach(() => {
|
|
// restore the spy created with spyOn
|
|
jest.restoreAllMocks();
|
|
});
|
|
}) |