import { Emoji, NONE_OF_THAT } from "../../server/constants" import VoteController, { Vote, VoteMessageInfo } from "../../server/helper/vote.controller" import { JellyfinHandler } from "../../server/jellyfin/handler" import { ExtendedClient } from "../../server/structures/client" import { VoteMessage } from "../../server/helper/messageIdentifiers" test('parse votes from vote message', () => { const testMovies = [ 'Movie1', 'Movie2', 'Movie3', 'Movie4', 'Movie5', ] const testEventId = '1234321' const testEventDate = new Date('2023-01-01') const voteController: VoteController = new VoteController({}, {}) const testMessage = voteController.createVoteMessageText(testEventId, testEventDate, testMovies, "guildid", "requestId") const expectedResult: VoteMessageInfo = { eventId: testEventId, eventDate: testEventDate, votes: [ { emote: Emoji.one, count: 1, movie: testMovies[0] }, { emote: Emoji.two, count: 2, movie: testMovies[1] }, { emote: Emoji.three, count: 3, movie: testMovies[2] }, { emote: Emoji.four, count: 1, movie: testMovies[3] }, { emote: Emoji.five, count: 1, movie: testMovies[4] }, { emote: NONE_OF_THAT, count: 1, movie: NONE_OF_THAT }, ] } const msg: VoteMessage = { cleanContent: testMessage, reactions: { cache: { get: jest.fn().mockImplementation((input: any) => { // Abusing duck typing // Message Reaction has a method `count` and the expected votes // have a field `count` // this will evaluate to the same 'result' return expectedResult.votes.find(e => e.emote === input) }) } } } const result = voteController.parseVotesFromVoteMessage(msg, 'requestId') console.log(JSON.stringify(result)) expect(Array.isArray(result)).toBe(false) expect(result.eventId).toEqual(testEventId) expect(result.eventDate).toEqual(testEventDate) expect(result.votes.length).toEqual(expectedResult.votes.length) expect(result).toEqual(expectedResult) })