Some checks failed
Deploy / deploy (push) Has been cancelled
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>
101 lines
3.1 KiB
JavaScript
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');
|
|
});
|
|
});
|
|
}); |