Files
你的用户名 237c7802e5
Some checks failed
Deploy / deploy (push) Has been cancelled
Initial commit: Telegram Management System
Full-stack web application for Telegram management
- Frontend: Vue 3 + Vben Admin
- Backend: NestJS
- Features: User management, group broadcast, statistics

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 15:37:50 +08:00

101 lines
3.1 KiB
JavaScript

import request from 'supertest';
import app from '../src/app.js';
import { Subscription } from '../src/models/Subscription.js';
import mongoose from 'mongoose';
describe('Subscription API', () => {
beforeAll(async () => {
// Connect to test database
await mongoose.connect('mongodb://localhost:27017/billing-test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
});
afterAll(async () => {
// Clean up and close connection
await mongoose.connection.dropDatabase();
await mongoose.connection.close();
});
afterEach(async () => {
// Clean up data after each test
await Subscription.deleteMany({});
});
describe('POST /api/subscriptions', () => {
it('should create a new subscription', async () => {
const subscriptionData = {
plan: 'starter',
billingCycle: 'monthly'
};
const response = await request(app)
.post('/api/subscriptions')
.set('Authorization', 'Bearer test-token')
.set('x-tenant-id', 'test-tenant')
.send(subscriptionData);
expect(response.status).toBe(201);
expect(response.body.success).toBe(true);
expect(response.body.subscription).toBeDefined();
expect(response.body.subscription.plan).toBe('starter');
});
it('should validate required fields', async () => {
const response = await request(app)
.post('/api/subscriptions')
.set('Authorization', 'Bearer test-token')
.set('x-tenant-id', 'test-tenant')
.send({});
expect(response.status).toBe(400);
expect(response.body.success).toBe(false);
expect(response.body.errors).toBeDefined();
});
});
describe('GET /api/subscriptions', () => {
it('should return tenant subscriptions', async () => {
// Create test subscription
const subscription = new Subscription({
tenantId: 'test-tenant',
plan: 'professional',
status: 'active'
});
await subscription.save();
const response = await request(app)
.get('/api/subscriptions')
.set('Authorization', 'Bearer test-token')
.set('x-tenant-id', 'test-tenant');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.subscriptions).toHaveLength(1);
expect(response.body.subscriptions[0].plan).toBe('professional');
});
});
describe('POST /api/subscriptions/:id/cancel', () => {
it('should cancel a subscription', async () => {
// Create test subscription
const subscription = new Subscription({
tenantId: 'test-tenant',
plan: 'starter',
status: 'active'
});
await subscription.save();
const response = await request(app)
.post(`/api/subscriptions/${subscription._id}/cancel`)
.set('Authorization', 'Bearer test-token')
.set('x-tenant-id', 'test-tenant')
.send({ reason: 'No longer needed' });
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.subscription.status).toBe('canceled');
});
});
});