Skip to content

Commit 9a7f04e

Browse files
Merge pull request #20 from topcoder-platform/add-tests
Add tests
2 parents aebbb59 + 70ca51f commit 9a7f04e

28 files changed

+8068
-249
lines changed

README.md

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- nodejs https://nodejs.org/en/ (v10)
66
- DynamoDB
77
- AWS S3
8+
- Elasticsearch v6
89
- Docker, Docker Compose
910

1011
## Configuration
@@ -52,9 +53,20 @@ Set the following environment variables so that the app can get TC M2M token (us
5253

5354
Also properly configure AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, ATTACHMENT_S3_BUCKET, IS_LOCAL_DB config parameters.
5455

55-
## DynamoDB Setup
56-
We can use DynamoDB setup on Docker for testing purpose. Just run `docker-compose up` in `local` folder.
57-
You can also use your own AWS DynamoDB service for testing purpose.
56+
Test configuration is at `config/test.js`. You don't need to change them.
57+
The following test parameters can be set in config file or in env variables:
58+
59+
- ADMIN_TOKEN: admin token
60+
- COPILOT_TOKEN: copilot token
61+
- USER_TOKEN: user token
62+
- EXPIRED_TOKEN: expired token
63+
- INVALID_TOKEN: invalid token
64+
- M2M_FULL_ACCESS_TOKEN: M2M full access token
65+
- M2M_READ_ACCESS_TOKEN: M2M read access token
66+
- M2M_UPDATE_ACCESS_TOKEN: M2M update (including 'delete') access token
67+
68+
## Local Elasticsearch and DynamoDB setup
69+
In the `local` folder, run `docker-compose up`
5870

5971
## AWS S3 Setup
6072
Go to https://console.aws.amazon.com/ and login. Choose S3 from Service folder and click `Create bucket`. Following the instruction to create S3 bucket.
@@ -74,6 +86,7 @@ Go to `mock-api` folder and run command `npm run start` to start the mock-api li
7486
3. Seed/Insert data to tables: `npm run seed-tables`
7587
4. Initialize/Clear database in default environment: `npm run init-db`
7688
5. View table data in default environment: `npm run view-data <ModelName>`, ModelName can be `Challenge`, `ChallengeType`, `ChallengeSetting`, `AuditLog`, `Phase`, `TimelineTemplate`or `Attachment`
89+
6. Create Elasticsearch index: `npm run init-db`, or to re-create index: `npm run init-db force`
7790

7891
### Notes
7992
- The seed data are located in `src/scripts/seed`
@@ -83,12 +96,48 @@ Go to `mock-api` folder and run command `npm run start` to start the mock-api li
8396
- Install dependencies `npm install`
8497
- Run lint `npm run lint`
8598
- Run lint fix `npm run lint:fix`
99+
- initialize Elasticsearch, create configured Elasticsearch index if not present: `npm run init-es`,
100+
or re-create the index: `npm run init-es force`
86101
- Create tables `npm run create-tables`
87102
- Clear and init db `npm run init-db`
88103
- Start app `npm start`
89104
- App is running at `http://localhost:3000`
90105
- Start mock-api, go to `mock-api` folder and `npm start`, mock api is running at `http://localhost:4000`
91106

107+
## Running tests
108+
109+
Before running tests, DynamoDB tables should be created, ES index should be initialized, mock API should be started and
110+
various config parameters are properly set.
111+
Seeding db data is not needed.
112+
113+
### Running unit tests
114+
115+
To run unit tests alone
116+
117+
```bash
118+
npm run test
119+
```
120+
121+
To run unit tests with coverage report
122+
123+
```bash
124+
npm run test:cov
125+
```
126+
127+
### Running integration tests
128+
129+
To run integration tests alone
130+
131+
```bash
132+
npm run e2e
133+
```
134+
135+
To run integration tests with coverage report
136+
137+
```bash
138+
npm run e2e:cov
139+
```
140+
92141
## Verification
93142
Refer to the verification document `Verification.md`
94143

app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,5 @@ app.use((err, req, res, next) => {
8787
app.listen(app.get('port'), () => {
8888
logger.info(`Express server listening on port ${app.get('port')}`)
8989
})
90+
91+
module.exports = app

config/default.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module.exports = {
3333
ES: {
3434
// above AWS_REGION is used if we use AWS ES
3535
HOST: process.env.ES_HOST || 'localhost:9200',
36-
API_VERSION: process.env.ES_API_VERSION || '6.3',
36+
API_VERSION: process.env.ES_API_VERSION || '6.7',
3737
ES_INDEX: process.env.ES_INDEX || 'challenge',
3838
ES_TYPE: process.env.ES_TYPE || '_doc' // ES 6.x accepts only 1 Type per index and it's mandatory to define it
3939
},

config/test.js

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/topcoder-challenge-api.postman_environment.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,22 @@
99
},
1010
{
1111
"key": "user_token",
12-
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJkZW5pcyIsImV4cCI6MTU2MjgwMDE2OSwidXNlcklkIjoiMjUxMjgwIiwiaWF0IjoxNTQ5Nzk5NTY5LCJlbWFpbCI6ImVtYWlsQGRvbWFpbi5jb20ueiIsImp0aSI6IjljNDUxMWM1LWMxNjUtNGExYi04OTllLWI2NWFkMGUwMmI1NSJ9.a5-oBMwFtwGkSw2161y0lEu1XvKsKElCmRu6e8Q6PPk",
12+
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJkZW5pcyIsImV4cCI6MTU4MjgwMDE2OSwidXNlcklkIjoiMjUxMjgwIiwiaWF0IjoxNTQ5Nzk5NTY5LCJlbWFpbCI6ImVtYWlsQGRvbWFpbi5jb20ueiIsImp0aSI6IjljNDUxMWM1LWMxNjUtNGExYi04OTllLWI2NWFkMGUwMmI1NSJ9.rYOYAZaM9P8c4jwbn7tC4YTSvs0MfO_5ZCMseJ-aqsM",
1313
"enabled": true
1414
},
1515
{
1616
"key": "copilot1_token",
17-
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJjb3BpbG90IiwiQ29ubmVjdCBTdXBwb3J0Il0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJHaG9zdGFyIiwiZXhwIjoxNTYyODAwMDc3LCJ1c2VySWQiOiIxNTE3NDMiLCJpYXQiOjE1NDk3OTk0NzcsImVtYWlsIjoiZW1haWxAZG9tYWluLmNvbS56IiwianRpIjoiMTJjMWMxMGItOTNlZi00NTMxLTgzMDUtYmE2NjVmYzRlMWI0In0.TgxNCChFrM6QhKYFyXkd6FWNg_XRC-0aWCW0nM3Z9mE",
17+
"value": "eeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJjb3BpbG90IiwiQ29ubmVjdCBTdXBwb3J0Il0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJHaG9zdGFyIiwiZXhwIjoxNTgyODAwMDc3LCJ1c2VySWQiOiIxNTE3NDMiLCJpYXQiOjE1NDk3OTk0NzcsImVtYWlsIjoiZW1haWxAZG9tYWluLmNvbS56IiwianRpIjoiMTJjMWMxMGItOTNlZi00NTMxLTgzMDUtYmE2NjVmYzRlMWI0In0.Y3SsmT-C21ahWrQQgd2SALDBgC_4qKyrWXesc2cB1Ys",
1818
"enabled": true
1919
},
2020
{
2121
"key": "copilot2_token",
22-
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJjb3BpbG90Il0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJob2hvc2t5IiwiZXhwIjoxNTYxNzkyMzcwLCJ1c2VySWQiOiIxNjA5NjgyMyIsImlhdCI6MTU0OTc5MTc3MCwiZW1haWwiOiJlbWFpbEBkb21haW4uY29tLnoiLCJqdGkiOiJmMWU2MTNiZS1kNWI5LTQyMzEtYmFhZS1lZTlmMmQyMjcyMzQifQ._ehIlaqxU5AdEdt2IFsYrulT40msSSV5j8gNuQaWwgQ",
22+
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJjb3BpbG90Il0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJob2hvc2t5IiwiZXhwIjoxNTgxNzkyMzcwLCJ1c2VySWQiOiIxNjA5NjgyMyIsImlhdCI6MTU0OTc5MTc3MCwiZW1haWwiOiJlbWFpbEBkb21haW4uY29tLnoiLCJqdGkiOiJmMWU2MTNiZS1kNWI5LTQyMzEtYmFhZS1lZTlmMmQyMjcyMzQifQ.C58nUJ2rb0E5fI3xL34W_qrw7zldrMw4YMjcNA5CuZc",
2323
"enabled": true
2424
},
2525
{
2626
"key": "admin_token",
27-
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiQ29ubmVjdCBTdXBwb3J0IiwiYWRtaW5pc3RyYXRvciIsInRlc3RSb2xlIiwiYWFhIiwidG9ueV90ZXN0XzEiLCJDb25uZWN0IE1hbmFnZXIiLCJDb25uZWN0IEFkbWluIiwiY29waWxvdCIsIkNvbm5lY3QgQ29waWxvdCBNYW5hZ2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJUb255SiIsImV4cCI6MTU2MTc5MjIxMSwidXNlcklkIjoiODU0Nzg5OSIsImlhdCI6MTU0OTc5MTYxMSwiZW1haWwiOiJ0amVmdHMrZml4QHRvcGNvZGVyLmNvbSIsImp0aSI6ImY5NGQxZTI2LTNkMGUtNDZjYS04MTE1LTg3NTQ1NDRhMDhmMSJ9.o8VQsaYepIZmgBNuVuU7K7HWnqcPWJSnd8p88SqDgQU",
27+
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiQ29ubmVjdCBTdXBwb3J0IiwiYWRtaW5pc3RyYXRvciIsInRlc3RSb2xlIiwiYWFhIiwidG9ueV90ZXN0XzEiLCJDb25uZWN0IE1hbmFnZXIiLCJDb25uZWN0IEFkbWluIiwiY29waWxvdCIsIkNvbm5lY3QgQ29waWxvdCBNYW5hZ2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJUb255SiIsImV4cCI6MTU4MTc5MjIxMSwidXNlcklkIjoiODU0Nzg5OSIsImlhdCI6MTU0OTc5MTYxMSwiZW1haWwiOiJ0amVmdHMrZml4QHRvcGNvZGVyLmNvbSIsImp0aSI6ImY5NGQxZTI2LTNkMGUtNDZjYS04MTE1LTg3NTQ1NDRhMDhmMSJ9.3nxk6c9P1GBWQ__XPsouddjXHAA3s_7t4E83tbFSFCA",
2828
"enabled": true
2929
},
3030
{
@@ -54,7 +54,7 @@
5454
},
5555
{
5656
"key": "m2m_token",
57-
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoiZW5qdzE4MTBlRHozWFR3U08yUm4yWTljUVRyc3BuM0JAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vbTJtLnRvcGNvZGVyLWRldi5jb20vIiwiaWF0IjoxNTUyMTE5NDQ4LCJleHAiOjE1NjIyMDU4NDgsImF6cCI6ImVuancxODEwZUR6M1hUd1NPMlJuMlk5Y1FUcnNwbjNCIiwic2NvcGUiOiJ1cGRhdGU6dXNlcl9wcm9maWxlcyBhbGw6d3JpdGU6dXNlcl9wcm9maWxlcyB3cml0ZTp1c2VyX3Byb2ZpbGVzIHJlYWQ6Y2hhbGxlbmdlcyByZWFkOmdyb3VwcyB1cGRhdGU6c3VibWlzc2lvbiByZWFkOnN1Ym1pc3Npb24gY3JlYXRlOnN1Ym1pc3Npb24gcmVhZDpyZXZpZXdfdHlwZSB1cGRhdGU6cmV2aWV3X3N1bW1hdGlvbiByZWFkOnJldmlld19zdW1tYXRpb24gZGVsZXRlOnJldmlld19zdW1tYXRpb24gY3JlYXRlOnJldmlld19zdW1tYXRpb24gYWxsOnJldmlld19zdW1tYXRpb24gdXBkYXRlOnJldmlldyByZWFkOnJldmlldyBkZWxldGU6cmV2aWV3IGNyZWF0ZTpyZXZpZXcgYWxsOnJldmlldyB3cml0ZTpidXNfYXBpIHJlYWQ6dXNlcl9wcm9maWxlcyByZWFkOnJvbGVzIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.FBnnL5MKwDQXyliCwKsVVAootakpcO6VHwMTOl44nF0",
57+
"value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3RvcGNvZGVyLWRldi5hdXRoMC5jb20vIiwic3ViIjoiZW5qdzE4MTBlRHozWFR3U08yUm4yWTljUVRyc3BuM0JAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vbTJtLnRvcGNvZGVyLWRldi5jb20vIiwiaWF0IjoxNTUyMTE5NDQ4LCJleHAiOjE1ODIyMDU4NDgsImF6cCI6ImVuancxODEwZUR6M1hUd1NPMlJuMlk5Y1FUcnNwbjNCIiwic2NvcGUiOiJ1cGRhdGU6dXNlcl9wcm9maWxlcyBhbGw6d3JpdGU6dXNlcl9wcm9maWxlcyB3cml0ZTp1c2VyX3Byb2ZpbGVzIHJlYWQ6Y2hhbGxlbmdlcyByZWFkOmdyb3VwcyB1cGRhdGU6c3VibWlzc2lvbiByZWFkOnN1Ym1pc3Npb24gY3JlYXRlOnN1Ym1pc3Npb24gcmVhZDpyZXZpZXdfdHlwZSB1cGRhdGU6cmV2aWV3X3N1bW1hdGlvbiByZWFkOnJldmlld19zdW1tYXRpb24gZGVsZXRlOnJldmlld19zdW1tYXRpb24gY3JlYXRlOnJldmlld19zdW1tYXRpb24gYWxsOnJldmlld19zdW1tYXRpb24gdXBkYXRlOnJldmlldyByZWFkOnJldmlldyBkZWxldGU6cmV2aWV3IGNyZWF0ZTpyZXZpZXcgYWxsOnJldmlldyB3cml0ZTpidXNfYXBpIHJlYWQ6dXNlcl9wcm9maWxlcyByZWFkOnJvbGVzIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.DA9HQvYY-bye_4KfAfJTQVAusbGFNXd7ab2p55KZeh8",
5858
"enabled": true
5959
},
6060
{

local/docker-compose.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ services:
55
ports:
66
- "7777:7777"
77
command: "-inMemory -port 7777"
8+
esearch:
9+
image: "docker.elastic.co/elasticsearch/elasticsearch:6.3.1"
10+
ports:
11+
- "9200:9200"

0 commit comments

Comments
 (0)