import { Guild, GuildScheduledEvent, Message } from "discord.js" import VoteController from "../../server/helper/vote.controller" import { JellyfinHandler } from "../../server/jellyfin/handler" import { ExtendedClient } from "../../server/structures/client" import { Emoji, NONE_OF_THAT } from "../../server/constants" describe('vote controller - none_of_that functions', () => { const testEventId = '1234321' const testEventDate = new Date('2023-01-01') const testGuildId = "888999888" const testMovies = [ 'Movie1', 'Movie2', 'Movie3', 'Movie4', 'Movie5', ] const votesList = [ { 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: 2, movie: NONE_OF_THAT }, ] const mockClient: ExtendedClient = { user: { id: 'mockId' } } const mockJellyfinHandler: JellyfinHandler = { getRandomMovieNames: jest.fn().mockReturnValue(["movie1"]) } const votes = new VoteController(mockClient, mockJellyfinHandler) const mockMessageContent = votes.createVoteMessageText(testEventId, testEventDate, testMovies, testGuildId, "requestId") test('sendVoteClosedMessage', async () => { mockClient.getAnnouncementChannelForGuild = jest.fn().mockReturnValue({ send: jest.fn().mockImplementation((options: any) => { return new Promise((resolve) => { resolve(options) }) }) }) const scheduledEvent: GuildScheduledEvent = { scheduledStartAt: testEventDate, guildId: testGuildId, id: testEventId } const res = await votes.sendVoteClosedMessage(scheduledEvent, 'MovieNew', 'guild', 'request') expect(res).toEqual({ allowedMentions: { parse: ["roles"] }, content: `[Abstimmung beendet] für https://discord.com/events/${testGuildId}/${testEventId}\n<@&ANNOUNCE_ROLE> Wir gucken MovieNew am 01.01. um 01:00` }) }) // test('checkForPollsToClose', async () => { // // const testGuild: Guild = { // scheduledEvents: { // fetch: jest.fn().mockImplementation(() => { // return new Promise(resolve => { // resolve([ // { name: "Event Name" }, // { name: "Event: VOTING OFFEN", scheduledStartTimestamp: "" }, // { name: "another voting" }, // ] // ) // }) // }) // } // } // // const result = await votes.checkForPollsToClose(testGuild) // // // // // }) test('getVotesByEmote', async () => { const mockMessage: Message = { cleanContent: mockMessageContent, reactions: { resolve: jest.fn().mockImplementation((input: any) => { return votesList.find(e => e.emote === input) }) } } const result = await votes.getVotesByEmote(mockMessage, 'guildId', 'requestId') expect(result.length).toEqual(5) expect(result).toEqual(votesList.filter(x => x.movie != NONE_OF_THAT)) }) })