UNPKG

@serenity-js/rest

Version:

Serenity/JS Screenplay Pattern library for interacting with REST and other HTTP-based services, supporting comprehensive API testing and blended testing scenarios

80 lines 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GetRequest = void 0; const core_1 = require("@serenity-js/core"); const HTTPRequest_1 = require("./HTTPRequest"); /** * The HTTP GET method requests a representation of the specified resource. * It is the most frequent type of request made by consumers of a typical HTTP API. * For this reason it's important to test every known endpoint that responds to GET requests and ensure that it * behaves correctly. * * Since the GET method is used to _retrieve_ data from a server, it should be implemented * as [safe](https://developer.mozilla.org/en-US/docs/Glossary/Safe) * and [idempotent](https://developer.mozilla.org/en-US/docs/Glossary/Idempotent). * This means that an identical request can be made once or several times in a row with the same effect while leaving * the server in the same state. * * ## Verify response to a GET request * * ```ts * import { actorCalled } from '@serenity-js/core' * import { CallAnApi, GetRequest, LastResponse, Send } from '@serenity-js/rest' * import { Ensure, equals } from '@serenity-js/assertions' * * interface Book { * title: string; * author: string; * } * * await actorCalled('Apisitt') * .whoCan(CallAnApi.at('https://api.example.org/')) * .attemptsTo( * Send.a(GetRequest.to('/books/0-688-00230-7')), * Ensure.that(LastResponse.status(), equals(200)), * Ensure.that(LastResponse.body<Book>(), equals({ * title: 'Zen and the Art of Motorcycle Maintenance: An Inquiry into Values', * author: 'Robert M. Pirsig', * })), * ) * ``` * * ## Learn more * - https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET * - https://tools.ietf.org/html/rfc7231#section-4.3.1 * * @group Models */ class GetRequest extends HTTPRequest_1.HTTPRequest { /** * Configures the object with a destination URI. * * When the `resourceUri` is not a fully qualified URL but a path, such as `/products/2`, * it gets concatenated with the URL provided to the Axios instance * when the [ability](https://serenity-js.org/api/core/class/Ability/) to [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/) was instantiated. * * @param resourceUri * The URI where the [`Actor`](https://serenity-js.org/api/core/class/Actor/) * should send the [`HTTPRequest`](https://serenity-js.org/api/rest/class/HTTPRequest/) */ static to(resourceUri) { return new GetRequest(resourceUri); } /** * Overrides the default Axios request configuration provided * when the [ability](https://serenity-js.org/api/core/class/Ability/) to [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/) was instantiated. * * #### Learn more * - [`Answerable`](https://serenity-js.org/api/core/#Answerable) * - [`WithAnswerableProperties`](https://serenity-js.org/api/core/#WithAnswerableProperties) * - [AxiosRequestConfig](https://axios-http.com/docs/req_config) * * @param {Answerable<WithAnswerableProperties<AxiosRequestConfig>>} config * Axios request configuration overrides */ using(config) { return new GetRequest(this.resourceUri, undefined, core_1.Question.fromObject(config)); } } exports.GetRequest = GetRequest; //# sourceMappingURL=GetRequest.js.map