npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ln-maf/api

v2.0.7

Published

This module is created to allow other projects to easily perform API requests, utilizing a set of steps.

Downloads

4,576

Readme

API Cucumber Steps

This module is created to allow other projects to easily perform API requests, utilizing a set of steps.

npm package GitHub Actions Dependencies

Set up

  1. Install by running npm i @ln-maf/api

  2. Add a new step file in the features folder with the following code:

require('@ln-maf/api')

Step Definitions

This library implements some step definitions and adheres to the global cucumber implementation for various internals.

Given url {string}

Assigns a string to the url item

Given api {string}

Assigns a string to the api item

Given body {string}

Defines the body for a given request

Given headers {string}

Takes a string of headers. These should represent a json object.

When api request from {jsonObject} is performed

Performs a request based on the json file and given values. An example json file would be:

{
    "api": "driver/users/1",
    "method": "POST",
    "headers": {
      "Accept": "application/json",
      "X-Api-Service-Version": "2.0",
      "Content-Type": "application/json",
      "X-AliasRequired": false
    },
    "jsonBody": {
      "clientNumber" : "111",
      "email": "[email protected]"
      "mobilePhone":"1"
    }
  }

Additionally, you can provide variables in the template literal form which would take from variables that have been set. The body parameters that are accepted are:

"body": "Expects Text"
"jsonBody": { "expects": "jsonObject"}
"urlEncodedBody": { "expects": "jsonObject"}

The headers parameter expects a json object and the method is required. It accepts any http method.

After the request is performed, the results will be stored in this.results.lastRun, consistent with the global cucumber testing standard. This can be accessed in other tests following this standard with the template literal ${lastRun}

Additionally, the response will be stored as this.results.response as well to allow easier access to the response directly.

The api form also support apiParams to allow you to pass a json object in as a url encoded api request. An example would be:

{ 
  "api": "/driver/user/${userID}/stats",
  "apiParams": {
    "nocache": "1579901950296",
    "stats": "1,2,5,6"
  },
  "headers": {
    "accept": "application/json",
    "accept-language": "en-US,en;q=0.9,es;q=0.8",
    "authorization": "Bearer ${a_t}",
    "content-type": "application/json;charset=UTF-8"
  },
  "method": "GET"
}

How to perform a multi-part request

The request supports and additional body type of: formBody. This supports arrays(untested) and will append it to element + [].
As of now the only portion of this that is tested and is not included in this CI is the file. Hopefully this will be tested in more detail soon.

An example would be:

{
    "api": "/driver/upload?ft=1&fn=${outputFilename}",
    "headers": {
        "X-Api-Key": "${apiKey}",
        "X-File-Format": "DECRYPTED",
        "X-File-Format-Version": "4.0",
        "accept": "application/json",
        "accept-encoding": "gzip",
        "accept-language": "en-US,en;q=0.9",
        "authorization": "Bearer ${a_t}",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "x-api-service-version": "1.0"
    },
    "formBody": {
      "file": {
        "type": "file",
        "fileName": "${outputFilename}"
      },
      "stringParam": "string",
      "numParam": 3,
      "blobParam": {
        "type": "base64blob",
        "base64blob": "SEVMTE8gV09STEQ="
      },
      "stringArray": ["hello", "world"],
      "fileArray": [
        {
          "type": "file",
          "fileName": "${outputFilename}"
        },
        {
          "type": "file",
          "fileName": "${outputFilename2}"
        }
      ]
    },
    "method": "POST"
}

When perform api request: {docString}

Performs using a doc string instead of a file. Please see When api request {string} is performed

Example:

When perform api request:
"""
{
  "url" : "http://google.com",
  "method": "GET"
}
"""

When api request from {jsonObject} is performed with: {dataTable}

Performs an api request using a json file. dataTable contains the values that are replaced within the request. This will assign the variables in dataTable globally.

Example: Assuming badge.json is:

{
    "api": "/user/${userID}/badges",
    "headers": {
        "accept": "application/json",
        "accept-language": "en-US,en;q=0.9,es;q=0.8",
        "authorization": "Bearer ${a_t}",
        "content-type": "application/json;charset=UTF-8",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin"
    },
    "body": null,
    "method": "GET"
}

Then the "${userID}" would be replaced with 123456 in the below.

When api request "badge.json" is performed with:
        |userID|
        |123456|

When api request from item {string} is performed

Performs an api request using an existing item.

When set "testConfig" to:
"""
  {
    "url":"http://google.com",
    "method": "GET"
  }
"""
And api request from item "testConfig" is performed

When method post

Performs a post using the defined values listed above and stores the result in this.results.lastRun which can be accessed with ${lastRun}

When method get

Performs a post using the defined values listed above and stores the result in this.results.lastRun which can be accessed with ${lastRun}

Then the status is not ok

Makes sure that this.results.lastRun.status is not between 200 and 299.

Then status not ok

Makes sure that this.results.lastRun.status is not between 200 and 299.

Then the status is ok

Makes sure that this.results.lastRun.status is between 200 and 299.

Then status ok

Makes sure that this.results.lastRun is between 200 and 299.

Then status {int}

Makes sure that this.results.lastRun.status is equal to the integer specified.