| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /* eslint-disable @typescript-eslint/no-explicit-any */
- import { MojangRestAPI } from 'common/mojang/rest/MojangRestAPI'
- import { expect } from 'chai'
- import nock from 'nock'
- import { Session } from 'common/mojang/rest/Auth'
- import { MojangErrorCode, MojangResponse } from 'common/mojang/rest/internal/MojangResponse'
- import { RestResponseStatus, RestResponse } from 'common/got/RestResponse'
- function assertResponse(res: RestResponse<unknown>) {
- expect(res).to.not.be.an('error')
- expect(res).to.be.an('object')
- }
- function expectSuccess(res: RestResponse<unknown>) {
- assertResponse(res)
- expect(res).to.have.property('responseStatus')
- expect(res.responseStatus).to.equal(RestResponseStatus.SUCCESS)
- }
- function expectFailure(res: RestResponse<unknown>) {
- expect(res.responseStatus).to.not.equal(RestResponseStatus.SUCCESS)
- }
- function expectMojangResponse(res: MojangResponse<unknown>, responseCode: MojangErrorCode, negate = false) {
- assertResponse(res)
- expect(res).to.have.property('mojangErrorCode')
- if(!negate) {
- expect(res.mojangErrorCode).to.equal(responseCode)
- } else {
- expect(res.mojangErrorCode).to.not.equal(responseCode)
- }
- }
- describe('[Mojang Rest API] Errors', () => {
- after(() => {
- nock.cleanAll()
- })
- it('Status (Offline)', async () => {
- const defStatusHack = MojangRestAPI['statuses']
- nock(MojangRestAPI.STATUS_ENDPOINT)
- .get('/check')
- .reply(500, 'Service temprarily offline.')
- const res = await MojangRestAPI.status()
- expectFailure(res)
- expect(res.data).to.be.an('array')
- expect(res.data).to.deep.equal(defStatusHack)
- }).timeout(2500)
- it('Authenticate (Invalid Credentials)', async () => {
- nock(MojangRestAPI.AUTH_ENDPOINT)
- .post('/authenticate')
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- .reply(403, (uri, requestBody: unknown): { error: string, errorMessage: string } => {
- return {
- error: 'ForbiddenOperationException',
- errorMessage: 'Invalid credentials. Invalid username or password.'
- }
- })
- const res = await MojangRestAPI.authenticate('user', 'pass', 'xxx', true)
- expectMojangResponse(res, MojangErrorCode.ERROR_INVALID_CREDENTIALS)
- expect(res.data).to.be.a('null')
- expect(res.error).to.not.be.a('null')
- })
- })
- describe('[Mojang Rest API] Status', () => {
- it('Status (Online)', async () => {
- const defStatusHack = MojangRestAPI['statuses']
- nock(MojangRestAPI.STATUS_ENDPOINT)
- .get('/check')
- .reply(200, defStatusHack)
- const res = await MojangRestAPI.status()
- expectSuccess(res)
- expect(res.data).to.be.an('array')
- expect(res.data).to.deep.equal(defStatusHack)
- }).timeout(2500)
- })
- describe('[Mojang Rest API] Auth', () => {
-
- it('Authenticate', async () => {
- nock(MojangRestAPI.AUTH_ENDPOINT)
- .post('/authenticate')
- .reply(200, (uri, requestBody: any): Session => {
- const mockResponse: Session = {
- accessToken: 'abc',
- clientToken: requestBody.clientToken,
- selectedProfile: {
- id: 'def',
- name: 'username'
- }
- }
- if(requestBody.requestUser) {
- mockResponse.user = {
- id: 'def',
- properties: []
- }
- }
- return mockResponse
- })
- const res = await MojangRestAPI.authenticate('user', 'pass', 'xxx', true)
- expectSuccess(res)
- expect(res.data!.clientToken).to.equal('xxx')
- expect(res.data).to.have.property('user')
- })
- it('Validate', async () => {
- nock(MojangRestAPI.AUTH_ENDPOINT)
- .post('/validate')
- .times(2)
- .reply((uri, requestBody: any) => {
- return [
- requestBody.accessToken === 'abc' ? 204 : 403
- ]
- })
- const res = await MojangRestAPI.validate('abc', 'def')
- expectSuccess(res)
- expect(res.data).to.be.a('boolean')
- expect(res.data).to.equal(true)
- const res2 = await MojangRestAPI.validate('def', 'def')
- expectSuccess(res2)
- expect(res2.data).to.be.a('boolean')
- expect(res2.data).to.equal(false)
- })
- it('Invalidate', async () => {
- nock(MojangRestAPI.AUTH_ENDPOINT)
- .post('/invalidate')
- .reply(204)
- const res = await MojangRestAPI.invalidate('adc', 'def')
- expectSuccess(res)
- })
- it('Refresh', async () => {
- nock(MojangRestAPI.AUTH_ENDPOINT)
- .post('/refresh')
- .reply(200, (uri, requestBody: any): Session => {
- const mockResponse: Session = {
- accessToken: 'abc',
- clientToken: requestBody.clientToken,
- selectedProfile: {
- id: 'def',
- name: 'username'
- }
- }
- if(requestBody.requestUser) {
- mockResponse.user = {
- id: 'def',
- properties: []
- }
- }
- return mockResponse
- })
- const res = await MojangRestAPI.refresh('gfd', 'xxx', true)
- expectSuccess(res)
- expect(res.data!.clientToken).to.equal('xxx')
- expect(res.data).to.have.property('user')
- })
- })
|