flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
55 lines • 2.12 kB
JavaScript
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
;