221 lines
6.3 KiB
JavaScript
221 lines
6.3 KiB
JavaScript
const request = require('supertest');
|
|
const mongoose = require('mongoose');
|
|
const app = require('../server');
|
|
const Player = require('../models/Player');
|
|
|
|
describe('API Tests', () => {
|
|
let token;
|
|
let testUser;
|
|
|
|
beforeAll(async () => {
|
|
// Connect to test database
|
|
const mongoUri = process.env.MONGODB_TEST_URI || 'mongodb://localhost:27017/galaxystrikeonline_test';
|
|
await mongoose.connect(mongoUri);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
// Clean up and close connection
|
|
await Player.deleteMany({});
|
|
await mongoose.connection.close();
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
// Clean up before each test
|
|
await Player.deleteMany({});
|
|
});
|
|
|
|
describe('Authentication', () => {
|
|
test('POST /api/auth/register - should register new user', async () => {
|
|
const userData = {
|
|
username: 'testuser',
|
|
email: 'test@example.com',
|
|
password: 'password123'
|
|
};
|
|
|
|
const response = await request(app)
|
|
.post('/api/auth/register')
|
|
.send(userData)
|
|
.expect(201);
|
|
|
|
expect(response.body).toHaveProperty('token');
|
|
expect(response.body.user).toHaveProperty('username', userData.username);
|
|
expect(response.body.user).toHaveProperty('email', userData.email);
|
|
});
|
|
|
|
test('POST /api/auth/login - should login existing user', async () => {
|
|
// First register a user
|
|
const userData = {
|
|
username: 'testuser',
|
|
email: 'test@example.com',
|
|
password: 'password123'
|
|
};
|
|
|
|
await request(app)
|
|
.post('/api/auth/register')
|
|
.send(userData);
|
|
|
|
// Then login
|
|
const loginData = {
|
|
email: userData.email,
|
|
password: userData.password
|
|
};
|
|
|
|
const response = await request(app)
|
|
.post('/api/auth/login')
|
|
.send(loginData)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('token');
|
|
token = response.body.token;
|
|
testUser = response.body.user;
|
|
});
|
|
|
|
test('GET /api/auth/verify - should verify token', async () => {
|
|
// First login to get token
|
|
const userData = {
|
|
username: 'testuser',
|
|
email: 'test@example.com',
|
|
password: 'password123'
|
|
};
|
|
|
|
const registerResponse = await request(app)
|
|
.post('/api/auth/register')
|
|
.send(userData);
|
|
|
|
token = registerResponse.body.token;
|
|
|
|
const response = await request(app)
|
|
.get('/api/auth/verify')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('valid', true);
|
|
expect(response.body.user).toHaveProperty('username', userData.username);
|
|
});
|
|
});
|
|
|
|
describe('Game API', () => {
|
|
beforeEach(async () => {
|
|
// Create and login a user for game tests
|
|
const userData = {
|
|
username: 'testuser',
|
|
email: 'test@example.com',
|
|
password: 'password123'
|
|
};
|
|
|
|
const loginResponse = await request(app)
|
|
.post('/api/auth/login')
|
|
.send({
|
|
email: userData.email,
|
|
password: userData.password
|
|
});
|
|
|
|
token = loginResponse.body.token;
|
|
testUser = loginResponse.body.user;
|
|
});
|
|
|
|
test('GET /api/game/player - should get player data', async () => {
|
|
const response = await request(app)
|
|
.get('/api/game/player')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('userId');
|
|
expect(response.body).toHaveProperty('stats');
|
|
expect(response.body).toHaveProperty('attributes');
|
|
});
|
|
|
|
test('GET /api/game/ships - should get player ships', async () => {
|
|
const response = await request(app)
|
|
.get('/api/game/ships')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('ships');
|
|
expect(Array.isArray(response.body.ships)).toBe(true);
|
|
});
|
|
|
|
test('GET /api/game/inventory - should get player inventory', async () => {
|
|
const response = await request(app)
|
|
.get('/api/game/inventory')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('items');
|
|
expect(response.body).toHaveProperty('summary');
|
|
});
|
|
|
|
test('POST /api/game/daily-reward - should claim daily reward', async () => {
|
|
const response = await request(app)
|
|
.post('/api/game/daily-reward')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('success');
|
|
});
|
|
});
|
|
|
|
describe('Server API', () => {
|
|
beforeEach(async () => {
|
|
// Create and login a user for server tests
|
|
const userData = {
|
|
username: 'testuser',
|
|
email: 'test@example.com',
|
|
password: 'password123'
|
|
};
|
|
|
|
const loginResponse = await request(app)
|
|
.post('/api/auth/login')
|
|
.send({
|
|
email: userData.email,
|
|
password: userData.password
|
|
});
|
|
|
|
token = loginResponse.body.token;
|
|
testUser = loginResponse.body.user;
|
|
});
|
|
|
|
test('GET /api/servers - should get server list', async () => {
|
|
const response = await request(app)
|
|
.get('/api/servers')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('servers');
|
|
expect(response.body).toHaveProperty('totalServers');
|
|
expect(Array.isArray(response.body.servers)).toBe(true);
|
|
});
|
|
|
|
test('POST /api/servers/create - should create new server', async () => {
|
|
const serverData = {
|
|
name: 'Test Server',
|
|
type: 'public',
|
|
maxPlayers: 10,
|
|
region: 'us-east'
|
|
};
|
|
|
|
const response = await request(app)
|
|
.post('/api/servers/create')
|
|
.set('Authorization', `Bearer ${token}`)
|
|
.send(serverData)
|
|
.expect(201);
|
|
|
|
expect(response.body).toHaveProperty('message');
|
|
expect(response.body.server).toHaveProperty('name', serverData.name);
|
|
expect(response.body.server).toHaveProperty('type', serverData.type);
|
|
});
|
|
});
|
|
|
|
describe('Health Check', () => {
|
|
test('GET /health - should return health status', async () => {
|
|
const response = await request(app)
|
|
.get('/health')
|
|
.expect(200);
|
|
|
|
expect(response.body).toHaveProperty('status', 'OK');
|
|
expect(response.body).toHaveProperty('timestamp');
|
|
expect(response.body).toHaveProperty('uptime');
|
|
});
|
|
});
|
|
});
|