add a test case to check for proper message parsing
This commit is contained in:
		
							
								
								
									
										54
									
								
								tests/discord/votes.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								tests/discord/votes.test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					import { Emoji } 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(<ExtendedClient>{}, <JellyfinHandler>{})
 | 
				
			||||||
 | 
						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] },
 | 
				
			||||||
 | 
							]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const msg: VoteMessage = <VoteMessage><unknown>{
 | 
				
			||||||
 | 
							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(testMovies.length)
 | 
				
			||||||
 | 
						expect(result).toEqual(expectedResult)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
		Reference in New Issue
	
	Block a user