mongodb-dynamic-api
Version:
Auto generated CRUD API for MongoDB using NestJS
161 lines • 6.23 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestGateway = exports.server = exports.handleSocketResponse = exports.handleSocketException = exports.closeTestingApp = exports.createTestingApp = void 0;
const websockets_1 = require("@nestjs/websockets");
const mongoose_1 = require("mongoose");
const supertest = require("supertest");
const socket_io_client_1 = require("socket.io-client");
const truncateMongoDb = async () => {
const connection = await mongoose_1.default.createConnection(`${process.env.MONGO_DB_URL}`).asPromise();
const collections = await connection.db.collections();
if (!collections?.length) {
return;
}
await Promise.all(collections.map((c) => c.drop()));
await connection.close();
};
const verifyApp = () => {
if (!global.app?.getHttpServer) {
throw new Error('App is not initialized');
}
return supertest.agent(global.app.getHttpServer());
};
async function createTestingApp(moduleRef, initFixtures, initMainCb) {
global.app = moduleRef.createNestApplication();
if (initMainCb) {
await initMainCb(global.app);
}
await global.app.init();
await truncateMongoDb();
if (initFixtures) {
const connection = await mongoose_1.default.createConnection(`${process.env.MONGO_DB_URL}`).asPromise();
await initFixtures(connection);
await connection.close();
}
return global.app;
}
exports.createTestingApp = createTestingApp;
async function closeTestingApp(connections) {
if (!global.app) {
return;
}
await global.app.close();
if (connections?.length) {
await Promise.all(connections.map((c) => c.close()));
}
}
exports.closeTestingApp = closeTestingApp;
exports.handleSocketException = jest.fn();
exports.handleSocketResponse = jest.fn();
exports.server = {
get: async (path, { authToken, query, headers = {} } = {}) => {
return verifyApp()
.get(path)
.query(query ?? {})
.set({
...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
'Content-Type': 'application/json',
'User-Agent': 'Chrome/51.0.2704.103 Safari/537.36',
...headers,
});
},
post: async (path, body, { authToken, query, headers = {} } = {}) => {
return verifyApp()
.post(path)
.query(query ?? {})
.send(body)
.set({
...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
'Content-Type': 'application/json',
'User-Agent': 'Chrome/51.0.2704.103 Safari/537.36',
...headers,
});
},
patch: async (path, body, { authToken, query, headers = {} } = {}) => {
return verifyApp()
.patch(path)
.query(query ?? {})
.send(body)
.set({
...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
'Content-Type': 'application/json',
'User-Agent': 'Chrome/51.0.2704.103 Safari/537.36',
...headers,
});
},
put: async (path, body, { authToken, query, headers = {} } = {}) => {
return verifyApp()
.put(path)
.query(query ?? {})
.send(body)
.set({
...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
'Content-Type': 'application/json',
'User-Agent': 'Chrome/51.0.2704.103 Safari/537.36',
...headers,
});
},
delete: async (path, { authToken, query, headers = {} } = {}) => {
return verifyApp()
.delete(path)
.query(query ?? {})
.set({
...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
'Content-Type': 'application/json',
'User-Agent': 'Chrome/51.0.2704.103 Safari/537.36',
...headers,
});
},
emit: async (event, data, { accessToken, namespace } = {}) => {
verifyApp();
try {
await global.app.getUrl();
}
catch {
await global.app.listen(8080);
}
return new Promise((resolve) => {
const ws = (0, socket_io_client_1.io)('http://localhost:8080', { query: { accessToken }, path: namespace });
ws.on('exception', (exception) => {
(0, exports.handleSocketException)(exception);
ws.close();
resolve(exception);
});
ws.on(event, (data) => {
(0, exports.handleSocketResponse)(data);
ws.close();
resolve(data);
});
ws.emit(event, data);
});
},
};
let TestGateway = class TestGateway {
test(data) {
return { event: 'test', data };
}
};
exports.TestGateway = TestGateway;
__decorate([
(0, websockets_1.SubscribeMessage)('test'),
__param(0, (0, websockets_1.MessageBody)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], TestGateway.prototype, "test", null);
exports.TestGateway = TestGateway = __decorate([
(0, websockets_1.WebSocketGateway)()
], TestGateway);
//# sourceMappingURL=e2e.setup.js.map