UNPKG

flagpole

Version:

Simple and fast DOM integration, headless or headful browser, and REST API testing framework.

55 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RssResponse = void 0; const xml_response_1 = require("./xml-response"); const cheerio = require("cheerio"); const validMimeTypes = ["application/rss+xml", "text/xml", "text/rss+xml"]; class RssResponse extends xml_response_1.XmlResponse { init(httpResponse) { var _a; super.init(httpResponse); this.context.assert(this.statusCode).between(200, 299); const mimeType = (_a = String(this.header("Content-Type").$) .split(";") .shift()) === null || _a === void 0 ? void 0 : _a.trim(); this.context .assert(`Mime Type is valid for RSS (${validMimeTypes.join(", ")})`, mimeType) .in(validMimeTypes); this.context .assert("Has required RSS 2.0 fields", this.hasRequiredRss2Fields()) .equals(true); } hasRequiredRss2Fields() { const rss = this.cheerio("rss"); const channel = rss.children("channel"); if (rss.length !== 1 || channel.length != 1) { return false; } const channelLink = channel.children("link"); const channelTitle = channel.children("title"); const channelDesc = channel.children("description"); if (channelLink.length !== 1 || channelTitle.length != 1 || channelDesc.length != 1) { return false; } const items = channel.children("item"); if (items.length > 0) { let allItemsAreValid = true; items.each((i, item) => { const itemTitle = cheerio(item).children("title"); const itemDesc = cheerio(item).children("description"); if (itemTitle.length == 0 && itemDesc.length == 0) { allItemsAreValid = false; return false; } }); if (!allItemsAreValid) { return false; } } return true; } } exports.RssResponse = RssResponse; //# sourceMappingURL=rss-response.js.map