1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
/**
* Automatically generate Hypixel API responses for the unit tests
*/
globalThis.isTest = true
import typedHypixelApi from 'typed-hypixel-api'
import * as hypixelApi from '../src/hypixelApi'
import * as constants from '../src/constants'
import * as mojang from '../src/mojang'
import fs from 'fs/promises'
import path from 'path'
const playerUuids = [
'6536bfed869548fd83a1ecd24cf2a0fd', // py5
'4133cab5a7534f3f9bb636fc06a1f0fd', // LostEJ
'ef3bb867eec048a1a9b92b451f0ffc66', // NMART
'e403573808ad45ddb5c48ec7c4db0144', // Dededecent
]
async function writeTestData(requestPath: string, name: string, contents: any) {
if (!name) {
const splitRequestPath = requestPath.split('/')
name = splitRequestPath[splitRequestPath.length - 1]
requestPath = splitRequestPath.slice(0, -1).join('/')
}
const dir = path.join(process.cwd(), 'test', 'data', requestPath)
try {
await fs.mkdir(path.dirname(path.join(dir, `${name}.json`)), { recursive: true })
} catch (err) {
console.error(err)
}
await fs.writeFile(path.join(dir, `${name}.json`), JSON.stringify(contents, null, 2))
}
async function addResponse(requestPath: keyof typedHypixelApi.Requests, args: { [key: string]: string }, name: string) {
console.log('Fetching', requestPath, args)
const response = await hypixelApi.sendApiRequest(requestPath, {
key: hypixelApi.chooseApiKey(),
...args,
})
await writeTestData(requestPath, name, response)
}
async function addConstants() {
const constantNames = [
'collections',
'minions',
'pets',
'skills',
'slayers',
'stats',
'values',
'zones',
'harp_songs'
]
for (const constantName of constantNames) {
const constantData = await constants.fetchJSONConstant(constantName + '.json')
await writeTestData('constants', constantName, constantData)
}
const constantValues = await constants.fetchConstantValues()
await writeTestData('constants', 'values', constantValues)
}
async function main() {
await addResponse('resources/skyblock/items', {}, '')
const uuidsToUsername = {}
for (const playerUuid of playerUuids) {
await addResponse('player', { uuid: playerUuid }, playerUuid)
await addResponse('skyblock/profiles', { uuid: playerUuid }, playerUuid)
const { username: playerUsername } = await mojang.profileFromUuid(playerUuid)
uuidsToUsername[playerUuid] = playerUsername
}
await writeTestData('', 'mojang', uuidsToUsername)
await addConstants()
console.log('Done!')
}
main()
|