Skip to content

Commit 49c1907

Browse files
committed
setting up EM for ecommerce
1 parent bd0d159 commit 49c1907

5 files changed

Lines changed: 6139 additions & 184 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
const em = require("evomaster-client-js);
2+
const dbHandler = require("./db-handler");
3+
4+
const { NestFactory } = require('@nestjs/core');
5+
const { AppModule } = require('./../src/app.module');
6+
7+
class AppController extends em.SutController {
8+
9+
setupForGeneratedTest(){
10+
}
11+
12+
getInfoForAuthentication(){
13+
return [];
14+
}
15+
16+
getPreferredOutputFormat() {
17+
return em.dto.OutputFormat.JS_JEST;
18+
}
19+
20+
getProblemInfo() {
21+
const dto = new em.dto.GraphQLProblemDto();
22+
dto.endpoint = "/graphql"
23+
return dto;
24+
}
25+
26+
isSutRunning(){
27+
if (!this.server) {
28+
return false;
29+
}
30+
return this.server.listening;
31+
}
32+
33+
resetStateOfSUT(){
34+
return dbHandler.cleanDb();
35+
}
36+
37+
startSut(){
38+
39+
return new Promise( async (resolve) => {
40+
41+
await dbHandler.startDb();
42+
43+
process.env.SECRET = "a secret";
44+
process.env.DATABASE_USER = "foo"
45+
process.env.DATABASE_PASSWORD = "bar"
46+
process.env.DATABASE_HOST="localhost"
47+
process.env.DATABASE_NAME="db";
48+
process.env.DATABASE_PORT=process.env.DB_PORT
49+
50+
const app = await NestFactory.create(AppModule);
51+
app.setGlobalPrefix('api')
52+
53+
app.listen(0, "localhost", () => {
54+
this.server = app.server;
55+
this.port = this.server.address().port;
56+
resolve("http://localhost:" + this.port);
57+
});
58+
});
59+
}
60+
61+
stopSut() {
62+
return new Promise( async (resolve) => {
63+
await dbHandler.stopDb();
64+
this.server.close( () => resolve())
65+
});
66+
}
67+
68+
}
69+
70+
71+
module.exports = AppController;
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
const { GenericContainer } = require("testcontainers");
2+
3+
//https://www.npmjs.com/package/postgres
4+
const postgres = require("postgres");
5+
6+
// docker run -p 5432:5432 -e POSTGRES_PASSWORD=bar -e POSTGRES_USER=foo postgres:11
7+
8+
let dbPort = 5432;
9+
let exposedDbPort = 0;
10+
let dbURL = "postgres://localhost"
11+
let test_container = null;
12+
let connection = null;
13+
14+
15+
16+
module.exports ={
17+
18+
startDb: async () =>{
19+
20+
dbPort = process.env.DB_PORT || 5432;
21+
22+
if(process.env.DOCKER_DBC && process.env.DOCKER_DBC === '0'){
23+
process.env.DB_PORT = dbPort
24+
console.log("use local Postgres on port:" + dbPort)
25+
}else{
26+
console.log("start db with test container")
27+
test_container= await new GenericContainer("postgres:11")
28+
.withEnv("POSTGRES_USER", "foo")
29+
.withEnv("POSTGRES_PASSWORD", "bar")
30+
.withEnv("POSTGRES_DB","db")
31+
.withExposedPorts(dbPort)
32+
.withTmpFs({ "/var/lib/postgresql/data": "rw" })
33+
.start();
34+
exposedDbPort = test_container.getMappedPort(dbPort)
35+
process.env.DB_PORT = exposedDbPort
36+
dbURL = `postgres://localhost:${exposedDbPort}`
37+
38+
console.log("connecting "+dbURL);
39+
}
40+
41+
connection = postgres(dbURL, {
42+
// host : '', // Postgres ip address[s] or domain name[s]
43+
// port : 5432, // Postgres server port[s]
44+
database : 'db', // Name of database to connect to
45+
username : 'foo', // Username of database user
46+
password : 'bar', // Password of database user
47+
})
48+
49+
return test_container;
50+
51+
},
52+
53+
checkdb: async () =>{
54+
console.log("todo check")
55+
},
56+
57+
cleanDb: () =>{
58+
59+
const queryAllTables = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where (TABLE_TYPE=\'TABLE\' OR TABLE_TYPE=\'BASE TABLE\')'
60+
+ " AND TABLE_SCHEMA='public' ";
61+
62+
//TODO
63+
// return new Promise(resolve => {
64+
//
65+
// querySql(queryAllTables)
66+
// .then(results => {
67+
// let truncateAll= '';
68+
// let resetSeq = '';
69+
// for (const element of results){
70+
// truncateAll += `TRUNCATE TABLE ${element.TABLE_NAME};`;
71+
// resetSeq += `ALTER TABLE ${element.TABLE_NAME} AUTO_INCREMENT=1;`;
72+
// }
73+
//
74+
// querySql(truncateAll+resetSeq).then(e=>
75+
// querySql(enableReferentialIntegrity).then(f=>resolve())
76+
// )
77+
// })
78+
79+
80+
},
81+
82+
stopDb : async () =>{
83+
if (connection)
84+
connection.end();
85+
86+
if (test_container){
87+
await test_container.stop();
88+
test_container = null;
89+
}
90+
}
91+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const AppController = require("./app-driver");
2+
const em = require("evomaster-client-js");
3+
4+
5+
const controller = new em.EMController(new AppController());
6+
7+
8+
port = process.env.EM_PORT || 40100;
9+
controller.setPort(port);
10+
11+
controller.startTheControllerServer();
12+
13+

0 commit comments

Comments
 (0)