API Testing
Testing Genocs's Web API
Genocsâs Web API can be tested via ThunderClient
, Postman as well as the built in Swagger.
Once the WebAPI is up and running (by default of port 5001 of localhost), here are the ways to test the functionalilty easily.
Swagger
Navigate to https://localhost:5001/swagger/index.html

Here you can see all the available endpoints. Since all of the endpoints except the login and registration endpoints are secured, you would need a Authentication Token to access these services.
Letâs see how to generate a token via Swagger.
You would have to the /token endpoint for this.

As mentioned earlier, the default credentials are
{
"email":"admin@root.com",
"password":"123Pa$$word!"
}
and the default tenant is root
. Once you send a POST request to the /token endpoint with these parameters, the API would return a valid JWT token which can be used to authenticate your further requests to various other endpoints of the API.
Below is the response sent by the API.

Once you have the token, simply copy it , click on the Authoize button (found at the top of the Swagger UI) and paste the token as shown below. This makes sure that the token is sent alongwith all the requests as an Auth Header.

ThunderClient
This is my personal favorite way to test any .NET API that I work with. This will be very helpful to you too if you use Visual Code for .NET development. Make sure that you have the ThunderClient VsCode Extension installed.
I have included the files required for you to test the Genocs WebAPI in the ./thunder-tests folder at the root of the solution.

Get Authentication Token
As mentioned earlier, to the /api/tokens endpoint we POST a request with the following body and add a tenantId = root
key to the request header. This should return a valid token from the webapi.
{
"email": "admin@root.com",
"password": "123Pa$$word!"
}

Environment Variables

Postman
Postman is also supported!
Now that our application is up and running, letâs fire up POSTMAN and run some basic requests. You can find the updated Postman collection under the /postman folder of your solution or here. Import this postman collection on to your local Postman.
Note that I have set up some default collection variables to make things easier.

In case your application happens to start on a different Port, you would have to change the url
variable on this collection and save it.
Generating Access Token
Letâs start by generating a token for the root admin
user! Navigate to the Identity/get-token request and simply run it. If everything goes as expected, you would be seeing a valid token as your response.
Note that here, we are passing the tenant header as root

Whenever a valid token is generated via Postman, it is stored as a variable of the collection and is used by default for all the subsequent requests via Postman until the token expires. By default, tokens have a lifetime of 60 minutes which is configurable via the Host/Configurations/security.json
under SecuritySettings / JwtSettings / tokenExpirationInMinutes
.
Search Brands
You can test that the token is valid by sending the âsearch-brandsâ request.
Your request body would look somewhat like this:
{
"keyword": "",
"pageNumber": 0,
"pageSize": 10,
"orderBy": [
"id"
]
}
So, by default as soon as your application in run for the first time, a couple of Brands are seeded into the database for demo purposes.
The keyword parameter in the above request denotes the keyword you want to search for in the brands table. Letâs leave it empty for now and let all the other parameters stay unchanged.
Presuming that you have a valid token youâll see:

{
"data": [
{
"id": "ca6247e8-3d7a-4c04-8d64-08d9f76d2c72",
"name": "Razor",
"description": "Sample Data"
},
{
"id": "c5b447c6-a518-4268-8d65-08d9f76d2c72",
"name": "Samsung",
"description": "Sample Data"
},
{
"id": "bb49e53d-9149-41d3-8d66-08d9f76d2c72",
"name": "MSI",
"description": "Sample Data"
},
{
"id": "3214bf2d-9a0d-454e-8d67-08d9f76d2c72",
"name": "Huawei",
"description": "Sample Data"
}
],
"currentPage": 1,
"totalPages": 1,
"totalCount": 4,
"pageSize": 10,
"hasPreviousPage": false,
"hasNextPage": false
}
Create a new Brand
Letâs create a new Brand. Open up Catalog/Brands/create-brand request via Postman and POST the following body.
{
"name":"Bra1nod #29",
"description":"Something Cool!"
}
Once you send your request and things work as expected, the API would send back a 200 Status Code along with your new Brandâs ID as shown below.

Resend the âsearch-brandsâ request to see your new brand listed in the response!
Create a new Product
Next letâs add a product. Run the âcreate-productâ request at this point and youâll see a failure message:
{
"source": "DN.WebApi.Application",
"exception": "brand.notfound [en-US]",
"errorCode": 404,
"succeeded": false
}
What went wrong?? Click the âBodyâ tab and look at the value for the brandId. That field needs to match the ID value of the Brands table. When I created the Postman collection I had to use the values that existed while I was building the project from my workstation. If you revisit the âsearch-brandsâ request and look at the results youâll see a value for âidâ. Copy that value - return to the `create-productâ request - replace the id value with what youâd copied and re-send the command. It should report success now.