Best JavaScript code snippet using playwright-internal
WebhookServer.js
Source: WebhookServer.js
...284 log.mock((msg, status) => {285 expect(msg).to.match(/Error for route type github: Invalid headers/i);286 expect(status).to.equal(2);287 });288 expect(() => whs._parseRequest(req, route))289 .to.throw(/Error for route type github: Invalid headers/);290 expect(log.count).to.equal(1);291 log.checkMocks();292 });293 it('throws if unknown type', () => {294 let route = {295 type: 'nope'296 };297 let req = {298 headers: {}299 };300 log.mock((msg, status) => {301 expect(msg).to.match(/Error unknown route type nope/i);302 expect(status).to.equal(2);303 });304 expect(() => whs._parseRequest(req, route))305 .to.throw(/Error unknown route type nope/);306 expect(log.count).to.equal(1);307 log.checkMocks();308 });309 describe('[github]', () => {310 it('checks the headers', () => {311 let route = {312 type: 'github'313 };314 let req = {315 headers: {}316 };317 log.mock((msg, status) => {318 expect(status).to.equal(2);319 expect(msg).to.match(/Error for route type github: Invalid headers/);320 });321 expect(() => whs._parseRequest(req, route))322 .to.throw(/Error for route type github: Invalid headers/);323 log.checkMocks();324 });325 it('doesn\'t throw if headers found', () => {326 let route = {};327 let req = {328 headers: {329 'x-github-event': 'push',330 'x-hub-signature': 'sha1=asdadsa'331 }332 };333 expect(() => whs._parseRequest(req, route)).to.not.throw();334 });335 it('checks if secret fails', () => {336 let route = {337 secret: 'lol'338 };339 let req = {340 headers: {341 'x-github-event': 'push',342 'x-hub-signature': 'sha1=nopenopenope'343 },344 rawBody: 'superbody'345 };346 log.mock((msg, status) => {347 expect(status).to.equal(2);348 expect(msg).to.match(/Error for route type github: Invalid secret/);349 });350 expect(() => whs._parseRequest(req, route))351 .to.throw(/Error for route type github: Invalid secret/);352 log.checkMocks();353 });354 it('checks if secret works', () => {355 let route = {356 secret: 'lol'357 };358 let req = {359 headers: {360 'x-github-event': 'push',361 'x-hub-signature': 'sha1=241946ca6d19a74a9e52ea4b6a59ceb9c5cf309f'362 },363 rawBody: '{"lol":"yeah"}'364 };365 expect(() => whs._parseRequest(req, route)).to.not.throw();366 });367 it('returns the action', () => {368 let route = {};369 let req = {370 headers: {371 'x-github-event': 'push',372 'x-hub-signature': 'sha1=241949ceb9c5cf309f'373 },374 body: '{"lol":"yeah"}'375 };376 let result = whs._parseRequest(req, route);377 expect(result.action).to.equal('push');378 });379 it('returns the repository name', () => {380 let route = {};381 let req = {382 headers: {383 'x-github-event': 'push',384 'x-hub-signature': 'sha1=241949ceb9c5cf309f'385 },386 body: JSON.stringify({387 repository: {388 name: 'pm2-hooks'389 }390 })391 };392 let result = whs._parseRequest(req, route);393 expect(result.name).to.equal('pm2-hooks');394 });395 it('returns the branch name', () => {396 let route = {};397 let req = {398 headers: {399 'x-github-event': 'push',400 'x-hub-signature': 'sha1=241949ceb9c5cf309f'401 },402 body: JSON.stringify({403 ref: 'refs/heads/develop',404 repository: {405 name: 'pm2-hooks'406 }407 })408 };409 let result = whs._parseRequest(req, route);410 expect(result.branch).to.equal('develop');411 });412 it('works with a payload key', () => {413 let route = {};414 let req = {415 headers: {416 'x-github-event': 'push',417 'x-hub-signature': 'sha1=241949ceb9c5cf309f'418 },419 body: {420 payload: JSON.stringify({421 ref: 'refs/heads/develop',422 repository: {423 name: 'pm2-hooks'424 }425 })426 }427 };428 let result = whs._parseRequest(req, route);429 expect(result.branch).to.equal('develop');430 });431 it('real example', () => {432 let mock = mocks.github.push;433 let route = {};434 let req = {435 headers: mock.headers,436 body: JSON.stringify(mock.body)437 };438 let result = whs._parseRequest(req, route);439 expect(result).to.deep.equal({440 action: 'push',441 branch: 'changes',442 name: 'public-repo'443 });444 });445 });446 describe('[bitbucket]', () => {447 it('checks the headers', () => {448 let route = {449 type: 'bitbucket'450 };451 let req = {452 headers: {}453 };454 log.mock((msg, status) => {455 expect(status).to.equal(2);456 expect(msg).to.match(/Error for route type bitbucket: Invalid headers/);457 });458 expect(() => whs._parseRequest(req, route))459 .to.throw(/Error for route type bitbucket: Invalid headers/);460 log.checkMocks();461 });462 it('throw if no body found', () => {463 let route = {};464 let req = {465 headers: mocks.bitbucket.push.headers,466 body: {}467 };468 log.mock((msg, status) => {469 expect(status).to.equal(2);470 expect(msg).to.match(/Error for route type bitbucket: Invalid body/);471 });472 expect(() => whs._parseRequest(req, route))473 .to.throw(/Error for route type bitbucket: Invalid body/);474 log.checkMocks();475 });476 it('throw if body isn\'t an object', () => {477 let route = {};478 let req = {479 headers: mocks.bitbucket.push.headers,480 body: 'nope'481 };482 log.mock((msg, status) => {483 expect(status).to.equal(2);484 expect(msg).to.match(/Error for route type bitbucket: Invalid body/);485 });486 expect(() => whs._parseRequest(req, route))487 .to.throw(/Error for route type bitbucket: Invalid body/);488 log.checkMocks();489 });490 it('throw if uncapable of find the action', () => {491 let route = {};492 let req = {493 headers: _.clone(mocks.bitbucket.push.headers),494 body: {}495 };496 req.headers['X-Event-Key'] = 'repo:';497 log.mock((msg, status) => {498 expect(status).to.equal(2);499 expect(msg).to.match(/Error for route type bitbucket: Invalid headers/);500 });501 expect(() => whs._parseRequest(req, route))502 .to.throw(/Error for route type bitbucket: Invalid headers/);503 log.checkMocks();504 });505 it('throw if invalid "changes" key found', () => {506 let route = {};507 let req = {508 headers: mocks.bitbucket.push.headers,509 body: {510 push: {}511 }512 };513 log.mock((msg, status) => {514 expect(status).to.equal(2);515 expect(msg).to.match(/Error for route type bitbucket: Invalid "changes" key on body/);516 });517 expect(() => whs._parseRequest(req, route))518 .to.throw(/Error for route type bitbucket: Invalid "changes" key on body/);519 log.checkMocks();520 });521 it('throws when there is a secret, as is not supported yet', () => {522 let route = {523 type: 'bitbucket',524 secret: 'lol'525 };526 let req = {527 headers: mocks.bitbucket.push.headers,528 body: {}529 };530 log.mock((msg, status) => {531 expect(status).to.equal(2);532 expect(msg).to.match(/Error for route type bitbucket: Secret not supported for bitbucket yet/);533 });534 expect(() => whs._parseRequest(req, route))535 .to.throw(/Error for route type bitbucket: Secret not supported for bitbucket yet/);536 log.checkMocks();537 });538 it('returns the action', () => {539 let route = {};540 let req = mocks.bitbucket.push;541 let result = whs._parseRequest(req, route);542 expect(result.action).to.equal('push');543 });544 it('returns the repository name', () => {545 let route = {};546 let req = mocks.bitbucket.push;547 let result = whs._parseRequest(req, route);548 expect(result.name).to.equal('pm2-hooks');549 });550 it('returns the branch name', () => {551 let route = {};552 let req = mocks.bitbucket.push;553 let result = whs._parseRequest(req, route);554 expect(result.branch).to.equal('master');555 });556 });557 });558 describe('_getRouteName', () => {559 let whs, mockReq;560 before(() => {561 whs = new WebhookServer({562 port: 1234,563 routes: {564 demo: {565 method() {}566 }567 }...
AttributeController.js
Source: AttributeController.js
...36 * @param request37 * @param response38 */39 statistics(request, response) {40 var options = this._parseRequest(request.body);41 var uuid = new UUID().toString();42 logger.info(`AttributeController#statistics UUID: ${uuid} Start: ${moment().format()} Attributes: `, options.attributes);43 var distribution = request.body.distribution;44 let attributes = new Attributes(options.areaTemplate, options.periods, options.places, options.attributes);45 this._statistics.statistics(attributes, options.attributesMap, distribution).then(json => {46 response.json({attributes: json});47 logger.info(`AttributeController#statistics UUID: ${uuid} End: ${moment().format()}`);48 }).catch(err => {49 response.status(500).json({status: 'err', message: err});50 throw new Error(51 logger.error(`AttributeController#statistics Error: `, err)52 )53 })54 }55 filter(request, response) {56 var options = this._parseRequest(request.body);57 var uuid = new UUID().toString();58 logger.info(`AttributeController#filter UUID: ${uuid} Start: ${moment().format()}`);59 let attributes = new Attributes(options.areaTemplate, options.periods, options.places, options.attributes);60 this._filter.statistics(attributes, options.attributesMap, options.attributes).then(json => {61 let result = this._deduplicate(_.flatten(json), json.length);62 response.json(result);63 logger.info(`AttributeController#filter UUID: ${uuid} End: ${moment().format()}`);64 }).catch(err => {65 response.status(500).json({status: 'err', message: err});66 throw new Error(67 logger.error(`AttributeController#filter Error: `, err)68 )69 });70 }71 /**72 * It returns amount of areas which satisfy all limitations passed as the part of the result. There is always only one73 * number. If there is issue 500 is returned.74 * The sql here doesnt need geometry.75 * @param request76 * @param response77 */78 amount(request, response) {79 var options = this._parseRequest(request.body);80 var uuid = new UUID().toString();81 logger.info(`AttributeController#amount UUID: ${uuid} Start: ${moment().format()}`);82 // When I ask for multiple periods, it is the only time, where it actually needs the deduplication and stuff.83 // Otherwise it is actually quite simple.84 let attributes = new Attributes(options.areaTemplate, options.periods, options.places, options.attributes);85 if(options.periods.length > 1) {86 this._filter.statistics(attributes, options.attributesMap, options.attributes).then(json => {87 let result = this._deduplicate(_.flatten(json), json.length);88 response.json({amount: result.length});89 logger.info(`AttributeController#amount UUID: ${uuid} End: ${moment().format()}`);90 }).catch(err => {91 response.status(500).json({status: 'err', message: err});92 throw new Error(93 logger.error(`AttributeController#amount Error: `, err)94 )95 });96 } else {97 this._filter.amount(attributes, options.attributes).then(amount => {98 response.json({amount: amount});99 logger.info(`AttributeController#amount UUID: ${uuid} End: ${moment().format()}`);100 }).catch(err => {101 response.status(500).json({status: 'err', message: err});102 throw new Error(103 logger.error(`AttributeController#amount Error: `, err)104 )105 });106 }107 }108 /**109 * Returns values for received attributes for specific polygon.110 * @param request111 * @param response112 */113 info(request, response) {114 var options = this._parseRequest(request.body);115 let gid = request.body.gid;116 var uuid = new UUID().toString();117 logger.info(`AttributeController#info UUID: ${uuid} Start: ${moment().format()}`);118 let attributesObj = new AttributesForInfo(options.areaTemplate, options.periods, options.places, options.attributes);119 this._info.statistics(attributesObj, options.attributesMap, gid).then(json => {120 response.json(json);121 logger.info(`AttributeController#info UUID: ${uuid} End: ${moment().format()}`);122 }).catch(err => {123 response.status(500).json({status: 'err', message: err});124 throw new Error(125 logger.error(`AttributeController#info Error: `, err)126 )127 });128 }129 /**130 * Get bounding box for given areas131 * @param request132 * @param response133 */134 getBoundingBox(request,response){135 let areas = request.body.areas;136 let periods = request.body.periods;137 let promises = [];138 if (!areas){139 response.json({140 status: "error",141 message: "No selected area!"142 });143 }144 areas.map(locationObj => {145 let areaTemplate = locationObj.at;146 let options = this._parseRequestForBoundingBox(areaTemplate, locationObj.loc, periods);147 let attributesObj = new AttributesForInfo(options.areaTemplate, options.periods, options.places, options.attributes);148 promises.push(this._info.getBoundingBoxes(attributesObj, locationObj.gids));149 });150 let self = this;151 Promise.all(promises).then(function(result){152 let extents = [];153 if (result && result.length){154 result.map(areas => {155 areas.map(extent => {156 extents.push(extent);157 });158 });159 } else {160 response.json({161 status: "error",162 message: "No selected area!"163 });164 }165 return extents;166 }).catch(err => {167 response.status(500).json({status: 'err', message: err});168 throw new Error(169 logger.error(`AttributeController#getBoundingBox Error: `, err)170 )171 }).then(function(extents){172 if (extents.length){173 let points = [];174 extents.map(extent => {175 extent.map(coord => {176 points.push(coord);177 });178 });179 let bbox = self._info.boundingBox.getExtentFromPoints(points);180 response.json({181 status: "ok",182 bbox: bbox183 });184 }185 }).catch(err => {186 response.status(500).json({status: 'err', message: err});187 throw new Error(188 logger.error(`AttributeController#getBoundingBox Error: `, err)189 )190 });191 }192 _parseRequestForBoundingBox(areaTemplate, location, periods) {193 let attributes = [];194 let attributesMap = {};195 attributes.forEach(196 attribute => attributesMap[`as_${attribute.attributeSet}_attr_${attribute.attribute}`] = attribute197 );198 return {199 attributes: attributes,200 attributesMap: attributesMap,201 areaTemplate: Number(areaTemplate),202 periods: periods.map(period => Number(period)),203 places: [Number(location)]204 };205 }206 _parseRequest(params) {207 let attributes;208 if (!params.isArray){209 attributes = _.toArray(params.attributes);210 } else {211 attributes = params.attributes;212 }213 var attributesMap = {};214 attributes.forEach(215 attribute => attributesMap[`as_${attribute.attributeSet}_attr_${attribute.attribute}`] = attribute216 );217 return {218 attributes: attributes,219 attributesMap: attributesMap,220 areaTemplate: Number(params.areaTemplate),...
vlc.js
Source: vlc.js
...42 {43 var time = 1000;44 if(!err && this._intervalEnabled)45 {46 this._parseRequest(result);47 var isPlaying = (result.state === 'playing');48 time = this._getProbeTime(isPlaying, result.time, result.rate);49 }50 if(this._intervalEnabled)51 this._getDataTimeout = setTimeout(() => onTimeout(), time);52 });53 },54 _parseRequest: function(result)55 {56 for(var key in playerData)57 {58 var value = result[playerData[key]];59 switch(key)60 {61 case 'pause':62 value = (value === 'paused');63 break;64 case 'eof-reached':65 value = (launched && !loading && value === 'stopped');66 break;67 case 'time-pos':68 case 'duration':69 value = parseInt(value);70 if(value < 0)71 continue;72 else if(!launched && key === 'time-pos' && value > 0)73 launched = true;74 break;75 case 'volume':76 value = Math.round(value / 2.56) / 100;77 if(value < 0)78 continue;79 break;80 case 'speed':81 value = Number(parseFloat(value).toFixed(2));82 if(previous.speed && previous.speed != value)83 this._onSpeedChanged(value);84 break;85 default:86 if(value == 'true')87 value = true;88 else if(value == 'false')89 value = false;90 break;91 }92 if(93 previous.hasOwnProperty(key)94 && previous[key] === value95 )96 continue;97 previous[key] = value;98 this.emit('playback', { name: key, value: value });99 }100 previous.repeat = (result.repeat === true || result.repeat === 'true');101 previous.fullscreen = (result.fullscreen > 0);102 if(result.currentplid > 0)103 previous.id = result.currentplid;104 if(105 !result.information106 || !result.information.category107 || !result.information.category.length108 || (streams.count109 && streams.count === result.information.category.length)110 )111 return;112 streams = {113 count: result.information.category.length,114 video: [],115 audio: [],116 subs: []117 };118 for(var cat of result.information.category)119 {120 if(!cat['$'].name.startsWith('Stream'))121 continue;122 var index = cat['$'].name.split(' ')[1];123 var streamType = cat.info.find(inf => inf['$'].name === 'Type');124 switch(streamType._)125 {126 case 'Video':127 streams.video.push(index);128 break;129 case 'Audio':130 streams.audio.push(index);131 break;132 case 'Subtitle':133 streams.subs.push(index);134 break;135 default:136 break;137 }138 }139 for(var type in streams)140 {141 if(type === 'count')142 continue;143 if(streams[type].length > 1)144 streams[type].sort();145 }146 this.emit('streams-changed');147 },148 cleanup: function()149 {150 this._intervalEnabled = false;151 if(this._getDataTimeout)152 clearTimeout(this._getDataTimeout);153 },154 _getSpawnArgs: function(opts)155 {156 /* VLC requires password for web interface */157 httpOpts.pass = opts.httpPass || 'vlc';158 httpOpts.port = opts.httpPort;159 var presetArgs = [160 '--no-play-and-exit',161 '--no-qt-recentplay',162 '--qt-continue', '0',163 '--image-duration', '-1',164 '--extraintf', 'http',165 '--http-port', httpOpts.port,166 '--http-password', httpOpts.pass,167 opts.media168 ];169 return [ ...opts.args, ...presetArgs ];170 },171 command: function(params, cb)172 {173 cb = cb || noop;174 var command = null;175 if(!Array.isArray(params))176 return cb(new Error('No command parameters array!'));177 for(var cmd of params)178 {179 if(!command)180 command = cmd;181 else182 command += `&${cmd}`;183 }184 httpOpts.path = '/requests/status.xml?command=' + command;185 helper.httpRequest(httpOpts, (err, result) =>186 {187 if(err) return cb(err);188 httpOpts.path = '/requests/status.xml';189 helper.httpRequest(httpOpts, (err, result) =>190 {191 if(err) return cb(err);192 this._debug(command);193 this._parseRequest(result);194 cb(null);195 });196 });197 },198 play: function(cb)199 {200 cb = cb || noop;201 if(previous.pause)202 this.cyclePause(cb);203 else204 cb(null);205 },206 pause: function(cb)207 {208 cb = cb || noop;209 if(!previous.pause)210 this.cyclePause(cb);211 else212 cb(null);213 },214 cyclePause: function(cb)215 {216 cb = cb || noop;217 this.command(['pl_pause'], cb);218 },219 _load: function(media, cb)220 {221 cb = cb || noop;222 previous.duration = null;223 loading = true;224 var changeTimeout;225 const onStreamsChange = function()226 {227 if(changeTimeout)228 {229 clearTimeout(changeTimeout);230 changeTimeout = null;231 }232 loading = false;233 cb(null);234 }235 var delId = previous.id;236 this.command(['in_play', `input=${media}`], (err) =>237 {238 if(err) return cb(err);239 currStreams = {};240 this.command(['pl_delete', `id=${delId}`], (err) =>241 {242 if(err) return cb(err);243 changeTimeout = setTimeout(() =>244 {245 changeTimeout = null;246 loading = false;247 this.removeListener('streams-changed', onStreamsChange);248 cb(new Error('Streams change timeout'));249 }, 15000);250 this.once('streams-changed', onStreamsChange);251 streams = {};252 httpOpts.path = '/requests/status.xml';253 helper.httpRequest(httpOpts, (err, result) =>254 {255 /* Ignore this req and wait for next */256 if(err) return;257 this._parseRequest(result);258 });259 });260 });261 },262 seek: function(position, cb)263 {264 cb = cb || noop;265 position = (position > 0) ? parseInt(position) : 0;266 this.command(['seek', `val=${position}`], cb);267 },268 setVolume: function(value, cb)269 {270 cb = cb || noop;271 value = (value > 0) ? parseInt(value * 256) : 0;272 this.command(['volume', `val=${value}`], (err) =>273 {274 if(err) return cb(err);275 /* Setting volume on VLC sometimes requires another refresh */276 httpOpts.path = '/requests/status.xml';277 helper.httpRequest(httpOpts, (err, result) =>278 {279 if(err) return cb(err);280 this._parseRequest(result);281 cb(null);282 });283 });284 },285 setSpeed: function(value, cb)286 {287 cb = cb || noop;288 value = (value > 0) ? value : 1;289 this.command(['rate', `val=${value}`], cb);290 },291 setRepeat: function(isEnabled, cb)292 {293 cb = cb || noop;294 switch(isEnabled)...
WebhookManager.js
Source: WebhookManager.js
...22 this.bot.emit("warn", `${port} is already being listened on`);23 }24 } else {25 const server = http.createServer((req, res) => {26 this._parseRequest(port, req, res);27 }).listen(port, () => {28 if (this.bot.Logger) {29 this.bot.Logger.info(`Listening on http://0.0.0.0:${port}`);30 } else {31 console.log(`Listening on http://0.0.0.0:${port}`);32 }33 });34 this.ports.set(port, { server: server, waitFor: [] });35 }36 }37 /**38 * Waits for the specified URL on the port39 * @param {Number} port Port assiociated with the function40 * @param {String} waitFor URL to wait for (i.e. /bfdwebhook)41 * @param {Function} fn Function to be executed upon request (bot, data)42 * @param {String} [auth] Authoirsation token to compare43 */44 waitFor(port, waitFor, fn, auth = undefined) {45 if (!this.ports.has(port)) {46 if (this.bot.Logger) {47 this.bot.Logger.warn(`${port} hasn't been registered yet`);48 } else {49 this.bot.emit("warn", `${port} hasn't been registered yet`);50 }51 } else {52 if ((typeof waitFor !== "string" || !waitFor.startsWith("/"))53 && typeof fn !== "function"54 && !["string", "undefined"].includes(auth)) {55 if (this.bot.Logger) {56 this.bot.Logger.warn(`Can't wait on ${port}${waitFor}, invalid information was provided`);57 } else {58 this.bot.emit("warn", `Can't wait on ${port}${waitFor}, invalid information was provided`);59 }60 }61 const portInfo = this.ports.get(port);62 portInfo.waitFor.push({ url: waitFor, fn: fn, auth: auth });63 this.ports.set(port, portInfo);64 }65 }66 /**67 * Manages incomming requests68 * @param {Number} port 69 * @param {http.IncomingMessage} req 70 * @param {http.ServerResponse} res 71 */72 _parseRequest(port, req, res) {73 if (!this.ports.has(port)) {74 return;75 }76 const url = req.url;77 const waitFors = this.ports.get(port).waitFor;78 for (const waitFor of waitFors) {79 if (waitFor.url === url && req.method === "POST") {80 if (waitFor.auth != undefined) {81 if (req.headers.authorization !== waitFor.auth) {82 return;83 }84 }85 if (req.headers["content-type"] === "application/json") {86 let data = "";...
index.spec.js
Source: index.spec.js
...15 })16 })17 describe('_parseRequest', () => {18 it('Should be able to parse query parameters properly', () => {19 expect(obj._parseRequest('http://test.com/whatever.html?test=hi&what=ever')).to.deep.equal({20 test: 'hi',21 what: 'ever'22 })23 })24 })25 describe('stub and unstub', () => {26 it('Should allow unstubbing', () => {27 expect(obj._stubbed).to.be.false28 obj.stub()29 expect(obj._stubbed).to.be.true30 obj.unstub()31 expect(obj._stubbed).to.be.false32 })33 })...
request.js
Source: request.js
1import {parseRequest} from './utils';2export default class HTTPRequest {3 constructor(rawReq) {4 if (rawReq) {5 const packet = this._parseRequest(rawReq);6 this.method = packet.method;7 this.path = packet.path;8 this.httpVersion = packet.httpVersion;9 this.headers = packet.headers;10 this.payload = packet.payload;11 } else {12 this.method = 'GET';13 this.path = '/';14 this.httpVersion = 'HTTP/1.1';15 this.headers = {};16 this.payload = '';17 }18 }19 _parseRequest(rawReq) {20 const {firstLineParts, ...request} = parseRequest(rawReq);21 request.method = firstLineParts[0];22 request.path = firstLineParts[1];23 request.httpVersion = firstLineParts[2];24 return request;25 }26 toString() {27 let result = '';28 result += `${this.method} ${this.path} ${this.httpVersion}\r\n`;29 for (const header in this.headers) {30 result += `${header}: ${this.headers[header]}\r\n`;31 }32 result += '\r\n';33 result += this.payload;...
index.js
Source: index.js
1export default class RequestError {2 constructor(request, originalError ) {3 this.uri = `${ request.method.toUpperCase() } ${ request.path }`;4 this.isError = true;5 this._parseRequest(request);6 if (originalError) {7 const { message, stack, constructor } = originalError;8 this.sourceError = { message, stack, name: constructor.name };9 }10 }11 toJSON() {12 const { uri, sourceError, message, name } = this;13 return {14 name,15 message,16 uri,17 sourceError: {18 name: sourceError && sourceError.name || 'Unknown',19 message: sourceError && sourceError.message || 'Unknown'20 }21 };22 }23 _parseRequest(req) {24 const { id, headers, info, method, params, path, payload, query } = req;25 this.request = {26 id,27 headers,28 method: method.toUpperCase(),29 path,30 params,31 query,32 payload,33 issuer: info.remoteAddress34 };35 }...
01b7020c8fa6b5ae2807ed257eee948703094171controller.spec.js
Source: 01b7020c8fa6b5ae2807ed257eee948703094171controller.spec.js
1var Controller = require( "./controller" );2describe( "Controller", function() {3 it( "_parseRequest parse JSON", function() {4 var controller = new Controller();5 expect( controller._parseRequest( '{ "command" : "notifications", "data" : "" }' ) ).toEqual({6 command : 'notifications',7 data : ''8 });9 });10 it( "_parseRequest wrong JSON return Error", function() {11 var controller = new Controller();12 expect( function() {13 controller._parseRequest( '{ "command" : }' );14 } ).toThrow();15 }); 16 it( "_parseRequest fields 'command' and 'data' are required", function() {17 var controller = new Controller();18 expect( function() {19 controller._parseRequest( '{ "command" : "notifications" }' );20 } ).toThrow();21 expect( function() {22 controller._parseRequest( '{ "data" : "" }' );23 } ).toThrow();24 });...
Using AI Code Generation
1const { _parseRequest } = require('playwright/lib/utils/utils');2const request = {3 headers: {4 },5 postData: '{"name": "John"}',6};7const parsedRequest = _parseRequest(request);8console.log(parsedRequest);9{10 headers: {11 },12 postData: '{"name": "John"}'13}
Using AI Code Generation
1const { _parseRequest } = require('playwright/lib/server/network');2const request = _parseRequest({3 headers: {4 },5});6console.log(request.postDataBuffer());
Using AI Code Generation
1const { _parseRequest } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');2const { parse } = require('playwright/lib/utils/parseRequest.js');3const request = {4};5const parsedRequest = _parseRequest(request);6console.log(parsedRequest);7const parsedRequest2 = parse(request);8console.log(parsedRequest2);9const { _parseRequest } = require('playwright/lib/server/supplements/recorder/recorderSupplement.js');10const { parse } = require('playwright/lib/utils/parseRequest.js');11const request = {12};13const parsedRequest = _parseRequest(request);14console.log(parsedRequest);15const parsedRequest2 = parse(request);16console.log(parsedRequest2);
Using AI Code Generation
1const { Playwright } = require('playwright');2const { Internal } = require('playwright/lib/server/playwright.js');3const playwright = new Playwright();4const internal = new Internal(playwright);5const request = {6 headers: {7 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',8 },9};10const result = internal._parseRequest(request);11console.log(result);12const { Playwright } = require('playwright');13const { Internal } = require('playwright/lib/server/playwright.js');14const playwright = new Playwright();15const internal = new Internal(playwright);16const request = {17 headers: {18 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',19 },20};21const result = internal._parseRequest(request);22console.log(result);
Using AI Code Generation
1const { parseRequest } = require('playwright/lib/server/network.js');2const { parseRequest } = require('playwright/lib/server/network.js');3const request = parseRequest({4 headers: { 'content-type': 'application/json' },5 postData: '{"foo":"bar"}'6});7console.log(request.postDataJSON());8const { parseRequest } = require('playwright/lib/server/network.js');9const request = parseRequest({10 headers: { 'content-type': 'application/json' },11 postData: '{"foo":"bar"}'12});13console.log(request.postDataJSON());14const { parseRequest } = require('playwright/lib/server/network.js');15const request = parseRequest({16 headers: { 'content-type': 'application/json' },17 postData: '{"foo":"bar"}'18});19console.log(request.postDataJSON());20const { parseRequest } = require('playwright/lib/server/network.js');21const request = parseRequest({22 headers: { 'content-type': 'application/json' },23 postData: '{"foo":"bar"}'24});25console.log(request.postDataJSON());26const { parseRequest } = require('playwright/lib/server/network.js');27const request = parseRequest({28 headers: { 'content-type': 'application/json' },29 postData: '{"foo":"bar"}'30});31console.log(request.postDataJSON());32const { parseRequest } = require('playwright/lib/server/network.js');33const request = parseRequest({34 headers: { 'content-type': 'application/json' },35 postData: '{"foo":"bar"}'36});37console.log(request.postDataJSON());38const { parseRequest } = require('playwright/lib/server/network.js');39const request = parseRequest({
Using AI Code Generation
1const { _parseRequest } = require('playwright/lib/server/network');2const { parse } = require('url');3const request = {4 headers: {},5};6const parsed = _parseRequest(request, parse(url));7console.log(parsed);8{9 headers: {},10}11const { _parseRequest } = require('playwright/lib/server/network');12const { parse } = require('url');13const request = {14 headers: {},15};16const parsed = _parseRequest(request, parse(url));17console.log(parsed);18{19 headers: {},20}21const { _parseRequest } = require('playwright/lib/server/network');22const { parse } = require('url');23const request = {24 headers: {},25};
Using AI Code Generation
1const { Playwright } = require('playwright');2const playwright = new Playwright();3const browserServer = playwright.chromium.launchServer();4(async () => {5 const { port } = await browserServer.start();6 const wsEndpoint = await browserServer.wsEndpoint();7 console.log(wsEndpoint);8 const { headers, method, postData, path } = playwright._parseRequest(wsEndpoint);9 console.log(headers);10 console.log(method);11 console.log(postData);12 console.log(path);13 await browserServer.close();14})();
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!