Socket
Socket
Sign inDemoInstall

@expressen/tallahassee

Package Overview
Dependencies
Maintainers
4
Versions
206
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@expressen/tallahassee - npm Package Compare versions

Comparing version 0.3.0 to 0.4.0

52

index.js
"use strict";
const supertest = require("supertest");
const url = require("url");
const {Document, Fetch, Window, Compiler} = require("./lib");

@@ -12,3 +13,3 @@ const {compile} = Compiler;

navigateTo,
load
load,
};

@@ -28,2 +29,4 @@

function load(resp) {
let pending;
compile();

@@ -39,10 +42,55 @@

document,
$: document.$
$: document.$,
};
Object.defineProperty(browserContext, "_pending", {
get: () => pending
});
global.window = window;
global.document = document;
document.addEventListener("submit", onDocumentSubmit);
return browserContext;
function onDocumentSubmit(event) {
if (event.target.tagName === "FORM") {
pending = new Promise((resolve) => {
process.nextTick(navigate, resolve);
});
}
function navigate(resolve) {
if (event.defaultPrevented) return resolve();
const form = event.target;
const qs = getFormInputAsQs(form);
const p = url.parse(form.getAttribute("action"), true);
Object.assign(p.query, qs);
const navigation = navigateTo(url.format(p), {
cookie: document.cookie
});
resolve(navigation);
}
}
}
}
function getFormInputAsQs(form) {
const inputs = form.getElementsByTagName("input");
return inputs.reduce((acc, input) => {
if (input.name && input.value) {
if (input.type === "radio") {
if (input.checked) {
acc[input.name] = input.value;
}
} else {
acc[input.name] = input.value;
}
}
return acc;
}, {});
}

@@ -14,3 +14,3 @@ "use strict";

const location = getLocation(resp.request);
let cookieHeader = getHeaders(resp).cookie || "";
let cookieHeader = getHeaders(resp.request).cookie || "";
const setCookies = {};

@@ -20,4 +20,11 @@

const loaded = [];
const document = Object.assign(new EventEmitter(), {
const emitter = new EventEmitter();
const document = {
_getElement: getElement,
_emitter: emitter,
addEventListener,
createElement,
dispatchEvent,
getElementById,

@@ -27,7 +34,9 @@ getElementsByTagName,

location,
removeEventListener,
textContent: null,
$,
_getElement: getElement,
});
};
preloadForms();
Object.defineProperty(document, "head", {

@@ -41,2 +50,6 @@ get: getHead

Object.defineProperty(document, "documentElement", {
get: () => getElement($("html"))
});
Object.defineProperty(document, "firstElementChild", {

@@ -79,2 +92,3 @@ get: () => getElement($("html"))

if ($elm === $) return document;
if (!$elm.length) return;

@@ -87,2 +101,3 @@ let mockElement = loaded.find((mockedElm) => mockedElm.$elm[0] === $elm[0]);

mockElement = Element(document, $elm);
loaded.push(mockElement);

@@ -112,2 +127,25 @@ return mockElement;

function preloadForms() {
const forms = getElementsByTagName("form");
for (let i = 0; i < forms.length; i++) {
forms[i].addEventListener("submit", onFormSubmit);
}
}
function addEventListener(...args) {
emitter.on(...args);
}
function removeEventListener(...args) {
emitter.removeListener(...args);
}
function dispatchEvent(...args) {
emitter.emit(...args);
}
function onFormSubmit(event) {
emitter.emit("submit", event);
}
function parseSetCookie(cookie) {

@@ -114,0 +152,0 @@ const setCookiePattern = /^(\w+)=(.*?)(;(.*?))?$/g;

35

lib/Element.js

@@ -23,2 +23,3 @@ "use strict";

_listenEvents: listenEvents,
_setBoundingClientRect: setBoundingClientRect,
addEventListener,

@@ -35,2 +36,3 @@ appendChild,

insertAdjacentHTML,
remove,
removeAttribute,

@@ -41,3 +43,2 @@ removeChild,

setAttribute,
setBoundingClientRect,
style: getStyle(),

@@ -118,3 +119,3 @@ };

return Url.format(Object.assign({}, location, {path: rel}));
return Url.format(Object.assign({}, location, {pathname: rel, path: rel}));
},

@@ -147,3 +148,3 @@ set: (value) => {

if (value === undefined) {
if (tagName !== "input") return value;
if (!["input", "button"].includes(tagName)) return;
}

@@ -158,2 +159,10 @@ return value === "disabled";

Object.defineProperty(element, "form", {
get: () => _getElement($elm.closest("form"))
});
if (tagName === "form") {
element.submit = submit;
}
return element;

@@ -217,6 +226,8 @@

function click() {
emitter.emit("click", {
preventDefault: () => {},
stopPropagation: () => {}
});
const clickEvent = emptyEvent();
emitter.emit("click", clickEvent);
if (!clickEvent.defaultPrevented && element.form) {
if (element.type === "submit") element.form.submit();
}
}

@@ -240,2 +251,6 @@

function remove() {
$elm.remove();
}
function find(selector) {

@@ -316,5 +331,11 @@ return $elm.find(selector);

function submit() {
const submitEvent = emptyEvent();
emitter.emit("submit", submitEvent);
}
function emptyEvent() {
let defaultPrevented;
const event = {
target: element,
preventDefault,

@@ -321,0 +342,0 @@ stopPropagation: () => {}

@@ -24,3 +24,3 @@ "use strict";

const {top} = elm.getBoundingClientRect();
elm.setBoundingClientRect(top + diff);
elm._setBoundingClientRect(top + diff);
}

@@ -27,0 +27,0 @@

@@ -10,3 +10,3 @@ "use strict";

const {cookie} = getHeaders(resp);
const {cookie} = getHeaders(resp.request);

@@ -13,0 +13,0 @@ fetching._pendingRequests = stack;

"use strict";
module.exports = function getHeaders(resp) {
if (!resp || !resp.request || !resp.request.header) return {};
module.exports = function getHeaders(request) {
if (!request || !request.header) return {};
const reqHeader = resp.request.header;
const reqHeader = request.header;

@@ -8,0 +8,0 @@ const headers = {};

"use strict";
const getHeaders = require("./getHeaders");
const Url = require("url");

@@ -8,12 +9,18 @@

const {header, url} = request;
const {host, Host} = header;
const {host, proto} = getHeaders(request);
const {url} = request;
let location = Url.parse(url);
if (host || Host) {
location.host = host || Host;
if (host) {
location.port = undefined;
location.host = undefined;
location.hostname = host;
location = Url.parse(Url.format(location));
}
if (proto) {
location.protocol = `${proto}:`;
location = Url.parse(Url.format(location));
}
return location;
};
{
"name": "@expressen/tallahassee",
"version": "0.3.0",
"version": "0.4.0",
"description": "Expressen client testing framework",

@@ -5,0 +5,0 @@ "main": "index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc