# Finished testing using Jest
### Screenshot test

### Test Script
```typescript=
jest.setTimeout(30000);
describe("Test Jalan Mimpi API", () => {
describe("Test API root path", () => {
test("It should respond with an json object", async () => {
try {
return request(app)
.get("/v1")
.expect(200)
.expect("Access-Control-Allow-Origin", "*")
.then((response) => console.log(response.body));
} catch (error) {}
});
});
describe("Test Account API, These APIs are need an authorization", () => {
test("Register Account", () => {
return request(app)
.post("/v1/account/register")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get user account info", () => {
return request(app)
.get("/v1/account/")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Record profile of a registered user account.", () => {
return request(app)
.post("/v1/account/profile")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(userProfileRegister)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get user profile", () => {
return request(app)
.get("/v1/account/profile")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Update existing user profile", () => {
return request(app)
.put("/v1/account/profile")
.type("application/json")
.send(userProfileUpdate)
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Register user bank account", () => {
return request(app)
.post("/v1/account/bank-account/register")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(bankAccountRegister)
.expect("Access-Control-Allow-Origin", "*")
.expect(200)
.then((response) => {
bankAccountUpdate.bankAccountId = response.body.id;
});
});
test("Update registed bank account", () => {
return request(app)
.put("/v1/account/bank-account")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(bankAccountUpdate)
.expect(200);
});
test("Get user bank account info", () => {
return request(app)
.get("/v1/account/bank-account")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Request email verification", () => {
return request(app)
.get("/v1/account/email/verify")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Request email reset password", () => {
return request(app)
.get("/v1/account/resetPassword")
.expect("Access-Control-Allow-Origin", "*")
.query({ email: "fs.rofiq@gmail.com" })
.expect(200)
.catch((error) => console.log(error.body));
});
});
describe("Test Users API", () => {
test("Get All User Profile, should return list of user profiles", () => {
return request(app)
.get("/v1/users")
.then((response) => {
expect(response.status).toBe(200);
expect(typeof response.body).toBe("object");
});
});
test("Get user profile by user UID", () => {
return request(app)
.get("/v1/users/profile/5QrOtbtKocYwUz1jwV6DdLrhUVC2")
.then((response) => {
expect(response.status).toBe(200);
expect(response.body.uid).toBe("5QrOtbtKocYwUz1jwV6DdLrhUVC2");
});
});
});
describe("Test Donation API", () => {
test("Get list of all registered donations, with query strings", () => {
return request(app)
.get("/v1/donation/list")
.query({ limit: 10 })
.query({ offset: 0 })
.query({ status: "Ongoing" })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get list of all registered donations without query strings", () => {
return request(app)
.get("/v1/donation/list")
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Create donation", () => {
return request(app)
.post("/v1/donation/create")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(donationRegister)
.expect("Access-Control-Allow-Origin", "*")
.expect(200)
.then((response) => {
donationUpdate.donationId = response.body.donation_id;
fundDetailsRegister.donationId = response.body.donation_id;
fundDetailsUpdate.donationId = response.body.donation_id;
});
});
test("Insert fund details", () => {
return request(app)
.post("/v1/donation/insert/fund")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(fundDetailsRegister)
.expect("Access-Control-Allow-Origin", "*")
.expect(200)
.then((response) => {
fundDetailsUpdate.fundDetailsId = response.body[0].id;
});
});
test("Update donation item", () => {
return request(app)
.put("/v1/donation/update")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(donationUpdate)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Update fund details", () => {
return request(app)
.put("/v1/donation/update/fund")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(fundDetailsUpdate)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get donation details by ID", () => {
return request(app)
.get("/v1/donation/details")
.query({ donationId: fundDetailsRegister.donationId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get fund details by donation id", () => {
return request(app)
.get("/v1/donation/details/fund")
.query({ donationId: fundDetailsRegister.donationId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get donors list of a donation item with limit and offset", () => {
return request(app)
.get("/v1/donation/details/donors")
.query({ donationId: fundDetailsRegister.donationId })
.query({ limit: 10 })
.query({ offset: 0 })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get donors list of a donation item without limit and offset", () => {
return request(app)
.get("/v1/donation/details/donors")
.query({ donationId: fundDetailsRegister.donationId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Search donation with status, limit and offset", () => {
return request(app)
.get("/v1/donation/search")
.query({ query: "Skripsi" })
.query({ status: "Ongoing" })
.query({ limit: 10 })
.query({ offset: 0 })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Search donation without status, limit and offset", () => {
return request(app)
.get("/v1/donation/search")
.query({ query: "skripsi" })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Change status of a donation item to COMPLETED", () => {
return request(app)
.put(`/v1/donation/${fundDetailsRegister.donationId}/completed`)
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Change status of a donation item to CLOSED", () => {
return request(app)
.put(`/v1/donation/${fundDetailsRegister.donationId}/close`)
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Change status of a donation item to REJECTED", () => {
return request(app)
.put(`/v1/donation/${fundDetailsRegister.donationId}/reject`)
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Change status of a CLOSED donation item to ONGOING", () => {
return request(app)
.put(`/v1/donation/${fundDetailsRegister.donationId}/resume`)
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
});
describe("Test Payment API", () => {
var transactionId: string = "";
test("Create new payment", () => {
return request(app)
.post("/v1/payment")
.type("application/json")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.send(createPayment)
.expect("Access-Control-Allow-Origin", "*")
.expect(200)
.then((response) => {
transactionId = response.body.transaction_id;
})
.catch((error) => console.log(error.body));
});
test("Get payment info", () => {
return request(app)
.get("/v1/payment")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.query({ transactionId: transactionId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get payment status", () => {
return request(app)
.get("/v1/payment/status")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.query({ transactionId: transactionId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get list of transactions by User UID", () => {
return request(app)
.get("/v1/payment/list/user")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
test("Get list of transactions by Donation ID", () => {
return request(app)
.get("/v1/payment/list/donation")
.set(
"authorization",
`Bearer ${process.env.FIREBASE_TOKEN_TEST as string}`
)
.query({ donationId: createPayment.donationId })
.expect("Access-Control-Allow-Origin", "*")
.expect(200);
});
});
});
```
### Constant file
This file contains all dummy data passed to the API.
```typescript=
export var userProfileRegister = {
firstName: "Faiz",
lastName: "Ainur Rofiq",
email: "fs.rofiq@gmail.com",
gender: "Male",
profession: "Software Developer",
phoneNumber: "08665155775",
photoUrl: "photoku.com",
idCardUrl: "",
addressLine1: "Sawangan",
addressLine2: "",
city: "Depok",
province: "Jawa Barat",
country: "Indonesia",
postalCode: "16436",
};
export var userProfileUpdate = {
firstName: "Faiz Ainur",
lastName: "Rofiq",
email: "fs.rofiq@gmail.com",
gender: "Male",
profession: "Web Developer",
phoneNumber: "08665155775",
photoUrl: "photoku.com",
idCardUrl: "",
addressLine1: "Sawangan",
addressLine2: "",
city: "Depok",
province: "Jawa Barat",
country: "Indonesia",
postalCode: "16436",
};
export var bankAccountRegister = {
bankName: "Bank Mandiri",
accountNumber: "10011001011",
description: "My personal account",
};
export var bankAccountUpdate = {
bankAccountId: 0,
bankName: "Bank Mandiri",
accountNumber: "10011001011",
description: "My personal account updated",
};
export var donationRegister = {
title: "Skripsi 2020",
description: "Untuk biaya skripsi 2020",
totalNominal: 1000000,
imageUrl: "",
};
export var donationUpdate = {
donationId: "",
title: "Skripsi 2020",
description: "Untuk biaya skripsi 2020",
totalNominal: 1000000,
imageUrl: "",
};
export var fundDetailsRegister = {
donationId: "",
fundDetails: [
{
itemDetail: "Beli credit AWS",
nominalDetail: 200000,
description: "Untuk credit cloud service AWS",
},
{
itemDetail: "Sewa hosting dan domain",
nominalDetail: 300000,
description: "Sewa hosting dan beli domain untuk website",
},
],
};
export var fundDetailsUpdate = {
fundDetailsId: 0,
donationId: "",
itemDetail: "Beli credit AWS",
nominalDetail: 200000,
description: "Untuk credit cloud service AWS",
};
export var createPayment = {
donationId: "DN-jYjrtRic8eD5Ee50miN0xed9p",
nominal: 10000,
description: "Semangat yaa",
};
```