Skip to content
This repository has been archived by the owner on Dec 11, 2024. It is now read-only.

Commit

Permalink
code
Browse files Browse the repository at this point in the history
  • Loading branch information
Kathund committed Aug 27, 2024
1 parent fa06472 commit 13c99fb
Show file tree
Hide file tree
Showing 6 changed files with 219 additions and 50 deletions.
117 changes: 94 additions & 23 deletions src/API/getSkyblockAuction.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ test('getSkyblockAuction (No Query)', () => {
const client = new Client(process.env.HYPIXEL_KEY ?? '', { cache: false, checkForUpdates: false, rateLimit: 'NONE' });
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
expect(() => client.getSkyblockAuction('player', '')).rejects.toThrowError(client.errors.NO_NICKNAME_UUID);
expect(() => client.getSkyblockAuction('auction', '')).rejects.toThrowError(client.errors.NO_NICKNAME_UUID);
client.destroy();
});

Expand Down Expand Up @@ -62,17 +62,8 @@ test('getSkyblockAuction (Auction)', async () => {
expect(auction.bin).toBeDefined();
expectTypeOf(auction.bin).toEqualTypeOf<boolean>();
expect(auction.itemBytes).toBeDefined();
expect(auction.itemBytes).toBeNull();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes | null>();
if (auction.itemBytes) {
expect(auction.itemBytes).toBeDefined();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes>();
expect(auction.itemBytes.bytesBuffer).toBeDefined();
expectTypeOf(auction.itemBytes.bytesBuffer).toEqualTypeOf<Buffer>();
expect(auction.itemBytes.base64).toBeDefined();
expectTypeOf(auction.itemBytes.base64).toEqualTypeOf<() => string>();
expect(auction.itemBytes.base64()).toBeDefined();
expectTypeOf(auction.itemBytes.base64()).toEqualTypeOf<string>();
}
expect(auction.coop).toBeDefined();
expectTypeOf(auction.coop).toEqualTypeOf<string[]>();
expect(auction.auctionStartTimestamp).toBeDefined();
Expand Down Expand Up @@ -157,18 +148,9 @@ test('getSkyblockAuction (Player)', async () => {
expectTypeOf(auction.auctioneerProfile).toEqualTypeOf<string | null>();
expect(auction.bin).toBeDefined();
expectTypeOf(auction.bin).toEqualTypeOf<boolean>();
expect(auction.itemBytes).toBeNull();
expect(auction.itemBytes).toBeDefined();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes | null>();
if (auction.itemBytes) {
expect(auction.itemBytes).toBeDefined();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes>();
expect(auction.itemBytes.bytesBuffer).toBeDefined();
expectTypeOf(auction.itemBytes.bytesBuffer).toEqualTypeOf<Buffer>();
expect(auction.itemBytes.base64).toBeDefined();
expectTypeOf(auction.itemBytes.base64).toEqualTypeOf<() => string>();
expect(auction.itemBytes.base64()).toBeDefined();
expectTypeOf(auction.itemBytes.base64()).toEqualTypeOf<string>();
}
expect(auction.coop).toBeDefined();
expectTypeOf(auction.coop).toEqualTypeOf<string[]>();
expect(auction.auctionStartTimestamp).toBeDefined();
Expand Down Expand Up @@ -237,6 +219,95 @@ test('getSkyblockAuction (Profile)', async () => {
expect(data).toBeDefined();
expectTypeOf(data).toEqualTypeOf<object>();

expect(data).toBeDefined();
expectTypeOf(data).toEqualTypeOf<Auction[]>();
expect(data.length).greaterThanOrEqual(0);
expectTypeOf(data.length).toEqualTypeOf<number>();
data.forEach((auction: Auction) => {
expect(auction).toBeDefined();
expect(auction).toBeInstanceOf(Auction);
expectTypeOf(auction).toEqualTypeOf<Auction>();
expect(auction.auctionId).toBeDefined();
expectTypeOf(auction.auctionId).toEqualTypeOf<string | null>();
expect(auction.auctioneerUuid).toBeDefined();
expectTypeOf(auction.auctioneerUuid).toEqualTypeOf<string | null>();
expect(auction.auctioneerProfile).toBeDefined();
expectTypeOf(auction.auctioneerProfile).toEqualTypeOf<string | null>();
expect(auction.bin).toBeDefined();
expectTypeOf(auction.bin).toEqualTypeOf<boolean>();
expect(auction.itemBytes).toBeDefined();
expect(auction.itemBytes).toBeNull();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes | null>();
expect(auction.coop).toBeDefined();
expectTypeOf(auction.coop).toEqualTypeOf<string[]>();
expect(auction.auctionStartTimestamp).toBeDefined();
expect(auction.auctionStartTimestamp).greaterThanOrEqual(0);
expectTypeOf(auction.auctionStartTimestamp).toEqualTypeOf<number>();
expect(auction.auctionStart).toBeDefined();
expectTypeOf(auction.auctionStart).toEqualTypeOf<Date>();
expect(auction.auctionEndTimestamp).toBeDefined();
expectTypeOf(auction.auctionEndTimestamp).toEqualTypeOf<number | null>();
expect(auction.auctionEnd).toBeDefined();
expectTypeOf(auction.auctionEnd).toEqualTypeOf<Date | null>();
expect(auction.item).toBeDefined();
expectTypeOf(auction.item).toEqualTypeOf<string>();
expect(auction.itemLore).toBeDefined();
expectTypeOf(auction.itemLore).toEqualTypeOf<string>();
expect(auction.itemLoreRaw).toBeDefined();
expectTypeOf(auction.itemLoreRaw).toEqualTypeOf<string>();
expect(auction.rarity).toBeDefined();
expectTypeOf(auction.rarity).toEqualTypeOf<Rarity>();
expect(auction.startingBid).toBeDefined();
expectTypeOf(auction.startingBid).toEqualTypeOf<number>();
expect(auction.highestBid).toBeDefined();
expectTypeOf(auction.highestBid).toEqualTypeOf<number>();
expect(auction.bids).toBeDefined();
expectTypeOf(auction.bids).toEqualTypeOf<Bid[]>();
auction.bids.forEach((bid: Bid) => {
expect(bid).toBeDefined();
expect(bid).toBeInstanceOf(Bid);
expectTypeOf(bid).toEqualTypeOf<Bid>();
expect(bid.auctionId).toBeDefined();
expectTypeOf(bid.auctionId).toEqualTypeOf<string>();
expect(bid.profileId).toBeDefined();
expectTypeOf(bid.profileId).toEqualTypeOf<string>();
expect(bid.amount).toBeDefined();
expect(bid.amount).greaterThanOrEqual(0);
expectTypeOf(bid.amount).toEqualTypeOf<number>();
expect(bid.timestamp).toBeDefined();
expectTypeOf(bid.timestamp).toEqualTypeOf<number>();
expect(bid.at).toBeDefined();
expectTypeOf(bid.at).toEqualTypeOf<Date>();
expect(bid.bidder).toBeDefined();
expectTypeOf(bid.bidder).toEqualTypeOf<string>();
expect(bid.toString()).toBeDefined();
expect(bid.toString()).toBe(`${bid.bidder} bid ${bid.amount} coins`);
expectTypeOf(bid.toString()).toEqualTypeOf<string>();
});
expect(auction.claimed).toBeDefined();
expectTypeOf(auction.claimed).toEqualTypeOf<boolean>();
expect(auction.claimedBidders).toBeDefined();
expectTypeOf(auction.claimedBidders).toEqualTypeOf<string[]>();
expect(auction.toString()).toBeDefined();
expect(auction.toString()).toEqual(auction.item);
expectTypeOf(auction.toString()).toEqualTypeOf<string>();
});
client.destroy();
});

test('getSkyblockAuction (Include Item Bytes)', async () => {
const client = new Client(process.env.HYPIXEL_KEY ?? '', { cache: false, checkForUpdates: false, rateLimit: 'NONE' });
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
const auctions = await client.getSkyblockAuctions(1);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
const data = await client.getSkyblockAuction('profile', auctions.auctions[0].auctioneerProfile, {
includeItemBytes: true
});
expect(data).toBeDefined();
expectTypeOf(data).toEqualTypeOf<object>();

expect(data).toBeDefined();
expectTypeOf(data).toEqualTypeOf<Auction[]>();
expect(data.length).greaterThanOrEqual(0);
Expand All @@ -255,9 +326,9 @@ test('getSkyblockAuction (Profile)', async () => {
expectTypeOf(auction.bin).toEqualTypeOf<boolean>();
expect(auction.itemBytes).toBeDefined();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes | null>();
expect(auction.itemBytes).toBeDefined();
if (auction.itemBytes) {
expect(auction.itemBytes).toBeDefined();
expectTypeOf(auction.itemBytes).toEqualTypeOf<ItemBytes>();
expect(auction.itemBytes).instanceOf(ItemBytes);
expect(auction.itemBytes.bytesBuffer).toBeDefined();
expectTypeOf(auction.itemBytes.bytesBuffer).toEqualTypeOf<Buffer>();
expect(auction.itemBytes.base64).toBeDefined();
Expand Down
25 changes: 1 addition & 24 deletions src/API/getSkyblockAuction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,7 @@ class getSkyblockAction extends Endpoint {
} else {
throw new Error(this.client.errors.BAD_AUCTION_FILTER);
}
if (!query) {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
console.log('aaaaaaaaaaaaaaaaaaaaaaaaa');
throw new Error(this.client.errors.NO_NICKNAME_UUID);
}
if (!query) throw new Error(this.client.errors.NO_NICKNAME_UUID);
const res = await this.client.requests.request(`/skyblock/auction?${filter}=${query}`, options);
if (res.options.raw) return res.data;
return res.data.auctions.map((a: any) => new Auction(a, options?.includeItemBytes ?? false));
Expand Down
2 changes: 1 addition & 1 deletion src/API/getSkyblockAuctionsByPlayer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class getSkyblockActionsByPlayer extends Endpoint {
async execute(query: string, options?: AuctionRequestOptions): Promise<Auction[]> {
if (!query) throw new Error(this.client.errors.NO_NICKNAME_UUID);
query = await this.client.requests.toUUID(query);
const res = await this.client.requests.request(`/skyblock/auction?player=${query}`);
const res = await this.client.requests.request(`/skyblock/auction?player=${query}`, options);
if (res.options.raw) return res.data;
return res.data.auctions.map((a: any) => new Auction(a, options?.includeItemBytes ?? false));
}
Expand Down
100 changes: 100 additions & 0 deletions src/utils/Player.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/* eslint-disable camelcase */
import {
parseClaimedRewards,
playerLevelProgress,
getSocialMedia,
getPlayerLevel,
xpToNextLevel,
levelToXP,
getRank
} from '../utils/Player';
import { describe, expect, test } from 'vitest';

test('getRank', () => {
expect(getRank({ prefix: '[EVENTS]' })).toBe('Events');
expect(getRank({ prefix: '[MOJANG]' })).toBe('Mojang');
expect(getRank({ prefix: '[PIG+++]' })).toBe('PIG+++');
expect(getRank({ prefix: '[INNIT]' })).toBe('Innit');
expect(getRank({ prefix: '[meow]' })).toBe('Default');

expect(getRank({ rank: 'ADMIN' })).toBe('Admin');
expect(getRank({ rank: 'GAME_MASTER' })).toBe('Game Master');
expect(getRank({ rank: 'Meow' })).toBe('Default');

expect(getRank({ newPackageRank: 'MVP_PLUS', monthlyPackageRank: 'SUPERSTAR' })).toBe('MVP++');
expect(getRank({ newPackageRank: 'MVP_PLUS', monthlyPackageRank: 'Meow' })).toBe('MVP+');
expect(getRank({ newPackageRank: 'MVP' })).toBe('MVP');
expect(getRank({ newPackageRank: 'VIP_PLUS' })).toBe('VIP+');
expect(getRank({ newPackageRank: 'VIP' })).toBe('VIP');
expect(getRank({ newPackageRank: 'meow' })).toBe('Default');
});

test('getPlayerLevel', () => {
describe('should calculate the player level correctly', () => {
const exp = 10000;
expect(getPlayerLevel(exp)).toBe(1);
});
});

test('xpToNextLevel', () => {
describe('should calculate the XP required for the next level correctly', () => {
const xp = 10000;
expect(xpToNextLevel(xp)).toBe(25000);
});

describe('should return 10000 if the XP is less than 10000', () => {
const xp = 5000;
expect(xpToNextLevel(xp)).toBe(10000);
});
});

test('levelToXP', () => {
describe('should calculate the XP required for a given level correctly', () => {
const level = 2;
expect(levelToXP(level)).toBe(20000);
});
});

test('playerLevelProgress', () => {
describe('should calculate the player level progress correctly', () => {
const xp = 15000;
const expectedProgress = {
xpToNext: 37500,
remainingXP: 22500,
currentXP: 12500,
percent: 33.33,
percentRemaining: 66.67
};
expect(playerLevelProgress(xp)).toEqual(expectedProgress);
});
});

test('getSocialMedia', () => {
describe('should return the formatted social media links', () => {
const data = {
links: {
TWITTER: 'https://twitter.com/example',
YOUTUBE: 'https://youtube.com/example',
INSTAGRAM: 'https://instagram.com/example'
}
};
const expectedSocialMedia = [
{ name: 'Twitter', link: 'https://twitter.com/example', id: 'TWITTER' },
{ name: 'YouTube', link: 'https://youtube.com/example', id: 'YOUTUBE' },
{ name: 'Instagram', link: 'https://instagram.com/example', id: 'INSTAGRAM' }
];
expect(getSocialMedia(data)).toEqual(expectedSocialMedia);
});
});

test('parseClaimedRewards', () => {
describe('should parse the claimed rewards correctly', () => {
const data = {
levelingReward_1: true,
levelingReward_3: true,
levelingReward_5: true
};
const expectedRewards = [1, 3, 5];
expect(parseClaimedRewards(data)).toEqual(expectedRewards);
});
});
18 changes: 18 additions & 0 deletions src/utils/oscillation.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { expect, test } from 'vitest';
import { monthAB } from './oscillation';

test('oscillation', () => {
expect(monthAB(0)).toBe('b');
expect(monthAB(1)).toBe('a');
expect(monthAB(2)).toBe('b');
expect(monthAB(3)).toBe('a');
expect(monthAB(4)).toBe('b');
expect(monthAB(5)).toBe('a');
expect(monthAB(6)).toBe('b');
expect(monthAB(7)).toBe('a');
expect(monthAB(8)).toBe('b');
expect(monthAB(9)).toBe('a');
expect(monthAB(10)).toBe('b');
expect(monthAB(11)).toBe('a');
expect(monthAB(12)).toBe('b');
});
7 changes: 5 additions & 2 deletions src/utils/oscillation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
// Month oscillation started in December 2014, so every month that is pair ( odd in js!! ) is month A
// Weekly oscillation started... just refer to the code in the docs
const weeklyOscillationStart = 1417237200000;
export function monthAB() {
return new Date().getMonth() % 2 ? 'a' : 'b';
export function monthAB(month?: number) {
if (month === undefined) {
month = new Date().getMonth();
}
return month % 2 ? 'a' : 'b';
}

export function weekAB() {
Expand Down

0 comments on commit 13c99fb

Please sign in to comment.