Best JavaScript code snippet using testcafe
RequestValidator.js
Source:RequestValidator.js  
...7const response = new Response()8// Regiter9exports.regiter =  [10	// Heater token11	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),12	// Name:13	body('name').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),14	// Email:15	body('email').exists().not().isEmpty().isLength({min: 5, max:100 }).isEmail().trim().rtrim().escape().normalizeEmail(),16	// Password:17	body('password').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),18	// Registration Pin:19	body('registrationPin').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),20	sanitizeBody('notifyOnReply').toBoolean(),21	(req, res, next) => {22		const errors = validationResult(req)23		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)24		else next()25	}26]27// EmailConfirm28exports.EmailConfirm =  [29	// Heater token30	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),31	// Id:32	body('id').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),33	// TokenFirebase:34	body('tokenFirebase').exists().not().isEmpty().isLength({ min: 5, max:350 }).trim().rtrim(),35	sanitizeBody('notifyOnReply').toBoolean(),36	(req, res, next) => {37		const errors = validationResult(req)38		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)39		else next()40	}41]42// Login:43exports.login =  [44	// Heater token45	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),46	// Username:47	body('username').exists().not().isEmpty().isLength({max:50 }).trim().rtrim().escape(),48	// TokenFirebase:49	body('tokenFirebase').exists().not().isEmpty().isLength({ min: 5, max:350 }).trim().rtrim().escape(),50	// Password:51	body('password').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),52	sanitizeBody('notifyOnReply').toBoolean(),53	(req, res, next) => {54		const errors = validationResult(req)55		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)56		else next()57	}58]59// ForgotPassword:60exports.forgotPassword =  [61	// Heater token62	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),63	// email:64	body('email').exists().not().isEmpty().isLength({min: 5, max:100}).isEmail().trim().rtrim().escape().normalizeEmail(),65	sanitizeBody('notifyOnReply').toBoolean(),66	(req, res, next) => {67		const errors = validationResult(req)68		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)69		else next()70	}71]72// StoreNewPassword:73exports.storeNewPassword =  [74	// Heater token75	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),76	// idStore:77	body('idStore').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),78	// Password:79	body('password').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),80	sanitizeBody('notifyOnReply').toBoolean(),81	(req, res, next) => {82		const errors = validationResult(req)83		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)84		else next()85	}86]87// SellerNewPassword88exports.sellerNewPassword =  [89	// Heater token90	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),91	// idSeller:92	body('idSeller').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),93	// Password:94	body('password').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),95	sanitizeBody('notifyOnReply').toBoolean(),96	(req, res, next) => {97		const errors = validationResult(req)98		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)99		else next()100	}101]102/*----------------------------------------------------------*/103/* Protected Routes                                         */104/*----------------------------------------------------------*/105// ChangePassword106exports.changePassword =  [107	// Heater token108	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),109	// Heater identifier110	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),111	// idSeller:112	body('idSeller').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),113	sanitizeBody('notifyOnReply').toBoolean(),114	(req, res, next) => {115		const errors = validationResult(req)116		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)117		else next()118	}119]120// InfoProfile121exports.infoProfile =  [122	// Heater token123	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),124	// Heater identifier125	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),126	sanitizeBody('notifyOnReply').toBoolean(),127	(req, res, next) => {128		const errors = validationResult(req)129		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)130		else next()131	}132]133// EditProfile134exports.editProfile =  [135	// Heater token136	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),137	// Heater identifier138	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),139	// Bank:140	body('bank').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),141	// AccountType142	body('accountType').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),143	// AccountNumber144	body('accountNumber').exists().not().isEmpty().isLength({max:50}).trim().rtrim().escape(),145	// AccountHolder146	body('accountHolder').exists().not().isEmpty().isLength({max:50}).trim().rtrim().escape(),147	// DocumentNumber148	body('documentNumber').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),149	// Cellphone150	body('cellphone').exists().not().isEmpty().isLength({max:50}).isNumeric().trim().rtrim().escape(),151	// City152	body('city').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),153	// Country154	body('country').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),155	// Address156	body('address').exists().not().isEmpty().isLength({max:100 }).trim().rtrim().escape(),157	// Name158	body('name').exists().not().isEmpty().isLength({max:50 }).trim().rtrim().escape(),159	sanitizeBody('notifyOnReply').toBoolean(),160	(req, res, next) => {161		const errors = validationResult(req)162		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)163		else next()164	}165]166// Sellers167exports.sellers =  [168	// Heater token169	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),170	// Heater identifier171	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),172	sanitizeBody('notifyOnReply').toBoolean(),173	(req, res, next) => {174		const errors = validationResult(req)175		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)176		else next()177	}178]179// Department180exports.department =  [181	// Heater token182	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),183	// Heater identifier184	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),185	// Country186	body('idCountry').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),187	sanitizeBody('notifyOnReply').toBoolean(),188	(req, res, next) => {189		const errors = validationResult(req)190		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)191		else next()192	}193]194// Cities195exports.cities =  [196	// Heater token197	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),198	// Heater identifier199	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),200	// Departament201	body('idDepartment').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),202	sanitizeBody('notifyOnReply').toBoolean(),203	(req, res, next) => {204		const errors = validationResult(req)205		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)206		else next()207	}208]209// Seller210exports.seller =  [211	// Heater token212	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),213	// Heater identifier214	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),215	// Name:216	body('name').exists().not().isEmpty().isLength({ min: 5, max:50 }).trim().rtrim().escape(),217	sanitizeBody('notifyOnReply').toBoolean(),218	(req, res, next) => {219		const errors = validationResult(req)220		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)221		else next()222	}223]224// HistorySales225exports.historySales =  [226	// Heater token227	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),228	// Heater identifier229	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),230	sanitizeBody('notifyOnReply').toBoolean(),231	(req, res, next) => {232		const errors = validationResult(req)233		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)234		else next()235	}236]237// SellerSales238exports.sellerSales =  [239	// Heater token240	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),241	// Heater identifier242	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),243	// idSeller:244	body('idSeller').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),245	sanitizeBody('notifyOnReply').toBoolean(),246	(req, res, next) => {247		const errors = validationResult(req)248		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)249		else next()250	}251]252// DeleteSeller253exports.deleteSeller =  [254	// Heater token255	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),256	// Heater identifier257	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),258	// idSeller:259	body('idSeller').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),260	sanitizeBody('notifyOnReply').toBoolean(),261	(req, res, next) => {262		const errors = validationResult(req)263		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)264		else next()265	}266]267// Policies268exports.policies =  [269	// Heater token270	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),271	// Heater identifier272	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),273	sanitizeBody('notifyOnReply').toBoolean(),274	(req, res, next) => {275		const errors = validationResult(req)276		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)277		else next()278	}279]280// SchedulePayments281exports.schedulePayments =  [282	// Heater token283	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),284	// Heater identifier285	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),286	sanitizeBody('notifyOnReply').toBoolean(),287	(req, res, next) => {288		const errors = validationResult(req)289		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)290		else next()291	}292]293// UpdatePayment294exports.updatePayment =  [295	// Heater token296	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),297	// Heater identifier298	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),299	// idPayment:300	body('idPayment').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),301	sanitizeBody('notifyOnReply').toBoolean(),302	(req, res, next) => {303		const errors = validationResult(req)304		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)305		else next()306	}307]308// HistoryPayments309exports.historyPayments =  [310	// Heater token311	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),312	// Heater identifier313	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),314	sanitizeBody('notifyOnReply').toBoolean(),315	(req, res, next) => {316		const errors = validationResult(req)317		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)318		else next()319	}320]321// PaymentsInfo322exports.paymentsInfo =  [323	// Heater token324	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),325	// Heater identifier326	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),327	sanitizeBody('notifyOnReply').toBoolean(),328	(req, res, next) => {329		const errors = validationResult(req)330		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)331		else next()332	}333]334// RequestPayments335exports.requestPayments =  [336	// Heater token337	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),338	// Heater identifier339	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),340	// idtypepayment:341	body('idtypepayment').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),342	sanitizeBody('notifyOnReply').toBoolean(),343	(req, res, next) => {344		const errors = validationResult(req)345		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)346		else next()347	}348]349// CollectionInfo350exports.collectionInfo =  [351	// Heater token352	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),353	// Heater identifier354	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),355	sanitizeBody('notifyOnReply').toBoolean(),356	(req, res, next) => {357		const errors = validationResult(req)358		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)359		else next()360	}361]362// Process Collection363exports.processCollection =  [364	// Heater token365	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),366	// Heater identifier367	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),368	// Coin:369	body('coin').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),370	// Value:371	body('value').exists().not().isEmpty().isLength({max:50}).isNumeric().trim().rtrim().escape(),372	sanitizeBody('notifyOnReply').toBoolean(),373	(req, res, next) => {374		const errors = validationResult(req)375		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)376		else next()377	}378]379// Cancel Collection380exports.cancelCollection =  [381	// Heater token382	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),383	// Heater identifier384	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),385	// idTransaction:386	body('idTransaction').exists().not().isEmpty().isLength({max:11}).isNumeric().trim().rtrim().escape(),387	sanitizeBody('notifyOnReply').toBoolean(),388	(req, res, next) => {389		const errors = validationResult(req)390		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)391		else next()392	}393]394// Update Firebase395exports.updateFirebase =  [396	// Heater token397	header('http_wlv_token').exists().not().isEmpty().trim().rtrim().escape().isLength({min:50, max:50}),398	// Heater identifier399	header('http_wlv_identifier').exists().not().isEmpty().isLength({max:500}).trim().rtrim().escape(),400	// tokenFirebase:401	body('tokenFirebase').exists().not().isEmpty().isLength({max:350}).trim().rtrim().escape(),402	sanitizeBody('notifyOnReply').toBoolean(),403	(req, res, next) => {404		const errors = validationResult(req)405		if (!errors.isEmpty()) res.status(response.NCTV01.status).json(response.NCTV01.msg)406		else next()407	}...home.js
Source:home.js  
1import { rest } from "../../lib/connection";2import Cors from "cors";3import initMiddleware from "../../lib/init-middleware";4const cors = initMiddleware(5  Cors({6    methods: ["GET"],7  })8);9export default async function getProductsByCategorie(req, res) {10  // http://localhost:3000/api/todos-los-articulos11  // Run cors12  await cors(req, res);13  if (req.method !== "GET") {14    res15      .status(500)16      .json({ message: "Lo sentimos, sólo aceptamos solicitudes GET" });17  }18  const slidersItems = `SELECT RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESCRIBEAR) AS text, RTRIM(a.URL) AS link, cast('' as xml).value(19    'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'20) AS image21FROM ARTICULO AS a22LEFT OUTER JOIN ARTICULO_IMG AS i23    ON a.CLAVEART = i.CLAVEART24WHERE a.CLAVEART IN ('SLIDER1', 'SLIDER2', 'SLIDER3', 'SLIDER4') AND i.IMAGEN IS NOT NULL25ORDER BY a.FECHA_ALTA DESC`;26  const bestSellers = `SELECT *27  FROM (28      SELECT ROW_NUMBER () OVER(ORDER BY a.FECHA_ALTA DESC) AS row_id, RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESC_BREVE) AS name, RTRIM(a.DESCRIBEAR) AS description, RTRIM(l.PREC_IVA1) AS price, RTRIM(g.DESGIR) AS category, RTRIM(g2.DESC_GIR2) AS main_category, RTRIM(m.DESC_MARCA) AS brand, cast('' as xml).value(29      'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'30  ) AS image_url31    FROM ARTICULO AS a32  LEFT OUTER JOIN ARTLISTA AS l33      ON a.CLAVEART = l.CLAVEART34  LEFT OUTER JOIN ARTGIRO AS g35      ON a.CLAVEGIR = g.CLAVEGIR36  LEFT OUTER JOIN ARTGIRO2 AS g237      ON a.CLAVEGIR2 = g2.CLAVEGIR238  LEFT OUTER JOIN ARTICULO_IMG AS i39      ON a.CLAVEART = i.CLAVEART40  LEFT OUTER JOIN ART_ALM AS s41      ON a.CLAVEART = s.CLAVEART42  LEFT OUTER JOIN MARCAS AS m43      ON a.CVE_MARCA = m.CVE_MARCA44  WHERE a.HABVTAS = '' AND g.DESGIR = 'LO MÃS VENDIDOS' AND l.NO_LISTAP = '001' AND i.IMAGEN IS NOT NULL AND i.SELECTO = 'S' AND s.CVEALM IN ('0020','0007','0018','0014','0015','0002','0008','0023','0017','0028','0027', '0021')45  GROUP BY a.CLAVEART, a.DESC_BREVE, a.DESCRIBEAR, l.PREC_IVA1, g.DESGIR, a.CLAVEGIR, g2.DESC_GIR2, i.IMAGEN, a.FECHA_ALTA, m.DESC_MARCA46  ) AS articles_with_row_nums47  WHERE row_id BETWEEN 1 AND 12;`;48  const lightingItems = `SELECT *49  FROM (50      SELECT ROW_NUMBER () OVER(ORDER BY a.FECHA_ALTA DESC) AS row_id, RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESC_BREVE) AS name, RTRIM(a.DESCRIBEAR) AS description, RTRIM(l.PREC_IVA1) AS price, RTRIM(g.DESGIR) AS category, RTRIM(g2.DESC_GIR2) AS main_category, RTRIM(m.DESC_MARCA) AS brand, cast('' as xml).value(51      'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'52  ) AS image_url53    FROM ARTICULO AS a54  LEFT OUTER JOIN ARTLISTA AS l55      ON a.CLAVEART = l.CLAVEART56  LEFT OUTER JOIN ARTGIRO AS g57      ON a.CLAVEGIR = g.CLAVEGIR58  LEFT OUTER JOIN ARTGIRO2 AS g259      ON a.CLAVEGIR2 = g2.CLAVEGIR260  LEFT OUTER JOIN ARTICULO_IMG AS i61      ON a.CLAVEART = i.CLAVEART62  LEFT OUTER JOIN ART_ALM AS s63      ON a.CLAVEART = s.CLAVEART64  LEFT OUTER JOIN MARCAS AS m65      ON a.CVE_MARCA = m.CVE_MARCA66  WHERE a.HABVTAS = '' AND g2.DESC_GIR2 = 'ILUMINACION' AND l.NO_LISTAP = '001' AND i.IMAGEN IS NOT NULL AND i.SELECTO = 'S' AND s.CVEALM IN ('0020','0007','0018','0014','0015','0002','0008','0023','0017','0028','0027', '0021')67  GROUP BY a.CLAVEART, a.DESC_BREVE, a.DESCRIBEAR, l.PREC_IVA1, g.DESGIR, a.CLAVEGIR, g2.DESC_GIR2, i.IMAGEN, a.FECHA_ALTA, m.DESC_MARCA68  ) AS articles_with_row_nums69  WHERE row_id BETWEEN 1 AND 12;`;70  const ferrItems = `SELECT *71  FROM (72      SELECT ROW_NUMBER () OVER(ORDER BY a.FECHA_ALTA DESC) AS row_id, RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESC_BREVE) AS name, RTRIM(a.DESCRIBEAR) AS description, RTRIM(l.PREC_IVA1) AS price, RTRIM(g.DESGIR) AS category, RTRIM(g2.DESC_GIR2) AS main_category, RTRIM(m.DESC_MARCA) AS brand, cast('' as xml).value(73      'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'74  ) AS image_url75    FROM ARTICULO AS a76  LEFT OUTER JOIN ARTLISTA AS l77      ON a.CLAVEART = l.CLAVEART78  LEFT OUTER JOIN ARTGIRO AS g79      ON a.CLAVEGIR = g.CLAVEGIR80  LEFT OUTER JOIN ARTGIRO2 AS g281      ON a.CLAVEGIR2 = g2.CLAVEGIR282  LEFT OUTER JOIN ARTICULO_IMG AS i83      ON a.CLAVEART = i.CLAVEART84  LEFT OUTER JOIN ART_ALM AS s85      ON a.CLAVEART = s.CLAVEART86  LEFT OUTER JOIN MARCAS AS m87      ON a.CVE_MARCA = m.CVE_MARCA88  WHERE a.HABVTAS = '' AND g.DESGIR = 'FERRETERIA' AND l.NO_LISTAP = '001' AND i.IMAGEN IS NOT NULL AND i.SELECTO = 'S' AND s.CVEALM IN ('0020','0007','0018','0014','0015','0002','0008','0023','0017','0028','0027', '0021')89  GROUP BY a.CLAVEART, a.DESC_BREVE, a.DESCRIBEAR, l.PREC_IVA1, g.DESGIR, a.CLAVEGIR, g2.DESC_GIR2, i.IMAGEN, a.FECHA_ALTA, m.DESC_MARCA90  ) AS articles_with_row_nums91  WHERE row_id BETWEEN 1 AND 12;`;92  const doorsItems = `SELECT *93  FROM (94      SELECT ROW_NUMBER () OVER(ORDER BY a.FECHA_ALTA DESC) AS row_id, RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESC_BREVE) AS name, RTRIM(a.DESCRIBEAR) AS description, RTRIM(l.PREC_IVA1) AS price, RTRIM(g.DESGIR) AS category, RTRIM(g2.DESC_GIR2) AS main_category, RTRIM(m.DESC_MARCA) AS brand, cast('' as xml).value(95      'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'96  ) AS image_url97    FROM ARTICULO AS a98  LEFT OUTER JOIN ARTLISTA AS l99      ON a.CLAVEART = l.CLAVEART100  LEFT OUTER JOIN ARTGIRO AS g101      ON a.CLAVEGIR = g.CLAVEGIR102  LEFT OUTER JOIN ARTGIRO2 AS g2103      ON a.CLAVEGIR2 = g2.CLAVEGIR2104  LEFT OUTER JOIN ARTICULO_IMG AS i105      ON a.CLAVEART = i.CLAVEART106  LEFT OUTER JOIN ART_ALM AS s107      ON a.CLAVEART = s.CLAVEART108  LEFT OUTER JOIN MARCAS AS m109      ON a.CVE_MARCA = m.CVE_MARCA110  WHERE a.HABVTAS = '' AND g2.DESC_GIR2 = 'PUERTAS Y VENTANAS' AND l.NO_LISTAP = '001' AND i.IMAGEN IS NOT NULL AND i.SELECTO = 'S' AND s.CVEALM IN ('0020','0007','0018','0014','0015','0002','0008','0023','0017','0028','0027', '0021')111  GROUP BY a.CLAVEART, a.DESC_BREVE, a.DESCRIBEAR, l.PREC_IVA1, g.DESGIR, a.CLAVEGIR, g2.DESC_GIR2, i.IMAGEN, a.FECHA_ALTA, m.DESC_MARCA112  ) AS articles_with_row_nums113  WHERE row_id BETWEEN 1 AND 12;`;114  const ventilationItems = `SELECT *115  FROM (116      SELECT ROW_NUMBER () OVER(ORDER BY a.FECHA_ALTA DESC) AS row_id, RTRIM(a.CLAVEART) AS articulo_id, RTRIM(a.DESC_BREVE) AS name, RTRIM(a.DESCRIBEAR) AS description, RTRIM(l.PREC_IVA1) AS price, RTRIM(g.DESGIR) AS category, RTRIM(g2.DESC_GIR2) AS main_category, RTRIM(m.DESC_MARCA) AS brand, cast('' as xml).value(117      'xs:base64Binary(sql:column("i.IMAGEN"))', 'varchar(max)'118  ) AS image_url119    FROM ARTICULO AS a120  LEFT OUTER JOIN ARTLISTA AS l121      ON a.CLAVEART = l.CLAVEART122  LEFT OUTER JOIN ARTGIRO AS g123      ON a.CLAVEGIR = g.CLAVEGIR124  LEFT OUTER JOIN ARTGIRO2 AS g2125      ON a.CLAVEGIR2 = g2.CLAVEGIR2126  LEFT OUTER JOIN ARTICULO_IMG AS i127      ON a.CLAVEART = i.CLAVEART128  LEFT OUTER JOIN ART_ALM AS s129      ON a.CLAVEART = s.CLAVEART130  LEFT OUTER JOIN MARCAS AS m131      ON a.CVE_MARCA = m.CVE_MARCA132  WHERE a.HABVTAS = '' AND g2.DESC_GIR2 = 'VENTILACION Y CALEFACCIÃN' AND l.NO_LISTAP = '001' AND i.IMAGEN IS NOT NULL AND i.SELECTO = 'S' AND s.CVEALM IN ('0020','0007','0018','0014','0015','0002','0008','0023','0017','0028','0027', '0021')133  GROUP BY a.CLAVEART, a.DESC_BREVE, a.DESCRIBEAR, l.PREC_IVA1, g.DESGIR, a.CLAVEGIR, g2.DESC_GIR2, i.IMAGEN, a.FECHA_ALTA, m.DESC_MARCA134  ) AS articles_with_row_nums135  WHERE row_id BETWEEN 1 AND 12;`;136  setTimeout(async () => {137    const slider = await rest.executeQuery(slidersItems);138    const bests = await rest.executeQuery(bestSellers);139    const lighting = await rest.executeQuery(lightingItems);140    const ferr = await rest.executeQuery(ferrItems);141    const doors = await rest.executeQuery(doorsItems);142    const ventilation = await rest.executeQuery(ventilationItems);143    ventilation &&144      res.status(200).json({145        name: `Inicio`,146        slider: slider.data[0],147        bests: bests.data[0],148        lighting: lighting.data[0],149        ferr: ferr.data[0],150        doors: doors.data[0],151        ventilation: ventilation.data[0],152        status: true,153      });154  }, 800);...publisher.js
Source:publisher.js  
1// ====================================================2// Publisher model3// ====================================================4var photoeye  = rootRequire('app/db/sequelize').photoeye;5var misc      = rootRequire('app/utils/misc');6var async     = require('async');7var unidecode = require('unidecode');8function getPublisher (title, callback) {9  var translit_t = unidecode(title);10  var sql =11    `SELECT 12        showcaseid,13        title,14        logoname,15        RIGHT(logoname, 3) AS extension,16        about,17        begindate,18        showcaseimg,19        logoandtitle20      FROM pubshowcase21      WHERE 22        REPLACE(RTRIM(LTRIM(title)), ' ', '-') = :title23        OR REPLACE(RTRIM(LTRIM(altsearch1)), ' ', '-') = :title 24        OR REPLACE(RTRIM(LTRIM(altsearch2)), ' ', '-') = :title 25        OR REPLACE(RTRIM(LTRIM(altsearch3)), ' ', '-') = :title26        OR REPLACE(RTRIM(LTRIM(title)), ' ', '-') = :translit_t27        OR REPLACE(RTRIM(LTRIM(altsearch1)), ' ', '-') = :translit_t 28        OR REPLACE(RTRIM(LTRIM(altsearch2)), ' ', '-') = :translit_t 29        OR REPLACE(RTRIM(LTRIM(altsearch3)), ' ', '-') = :translit_t30        OR REPLACE(REPLACE(RTRIM(LTRIM(title)), ' ', ''), '-', '') = REPLACE(REPLACE(:title, ' ', ''), '-', '')31        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch1)), ' ', ''), '-', '') = REPLACE(REPLACE(:title, ' ', ''), '-', '') 32        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch2)), ' ', ''), '-', '') = REPLACE(REPLACE(:title, ' ', ''), '-', '') 33        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch3)), ' ', ''), '-', '') = REPLACE(REPLACE(:title, ' ', ''), '-', '')34        OR REPLACE(REPLACE(RTRIM(LTRIM(title)), ' ', ''), '-', '') = REPLACE(REPLACE(:translit_t, ' ', ''), '-', '')35        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch1)), ' ', ''), '-', '') = REPLACE(REPLACE(:translit_t, ' ', ''), '-', '') 36        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch2)), ' ', ''), '-', '') = REPLACE(REPLACE(:translit_t, ' ', ''), '-', '') 37        OR REPLACE(REPLACE(RTRIM(LTRIM(altsearch3)), ' ', ''), '-', '') = REPLACE(REPLACE(:translit_t, ' ', ''), '-', '')`;38  var params = { title: title, translit_t: translit_t };39  photoeye40    .query(sql, { replacements: params })41    .spread(function(results, metadata) {42      callback(results);43    });44}45function getPublisherBooks (publisher, skip, take, callback) {46  var translit_t = unidecode(publisher);47  var sql =48    `SELECT * FROM (49        SELECT ROW_NUMBER() OVER (ORDER BY publisher_books.datepub DESC) AS row_number, * FROM (50            SELECT * FROM (51              (52                SELECT 53                  inventory.recordid, 54                  LTRIM(RTRIM(inventory.catalog)) AS catalog, 55                  LTRIM(RTRIM(inventory.hard_isbn)) AS hard_isbn, 56                  LTRIM(RTRIM(inventory.soft_isbn)) AS soft_isbn, 57                  LTRIM(RTRIM(inventory.subjectx)) AS subjectx, 58                  LTRIM(RTRIM(inventory.title2x)) AS title2x, 59                  LTRIM(RTRIM(inventory.publisherx)) AS publisherx, 60                  LTRIM(RTRIM(inventory.authorsx)) AS authorsx, 61                  inventory.use_pe_image_only, 62                  inventory.ltd_editio,63                  inventory.datepub,64                  1 AS nyp,65                  ROW_NUMBER() OVER(PARTITION BY inventory.catalog ORDER BY recordid DESC) row_num66                FROM inventory 67                WHERE 68                  (hardbound = 1 AND hard_nyp = 1) 69                  OR 70                  (softbound = 1 AND soft_nyp = 1)71              )72              UNION73              (74                SELECT 75                  inventory.recordid, 76                  LTRIM(RTRIM(inventory.catalog)) AS catalog, 77                  LTRIM(RTRIM(inventory.hard_isbn)) AS hard_isbn, 78                  LTRIM(RTRIM(inventory.soft_isbn)) AS soft_isbn, 79                  LTRIM(RTRIM(inventory.subjectx)) AS subjectx, 80                  LTRIM(RTRIM(inventory.title2x)) AS title2x, 81                  LTRIM(RTRIM(inventory.publisherx)) AS publisherx, 82                  LTRIM(RTRIM(inventory.authorsx)) AS authorsx, 83                  inventory.use_pe_image_only, 84                  inventory.ltd_editio,85                  inventory.datepub,86                  0 AS nyp,87                  ROW_NUMBER() OVER(PARTITION BY inventory.catalog ORDER BY recordid DESC) row_num88                FROM inventory 89                WHERE  90                  hard_nyp = 0 AND soft_nyp = 091              )92            ) unique_books WHERE unique_books.row_num = 193        ) publisher_books94        WHERE95          REPLACE(RTRIM(LTRIM(publisher_books.publisherx)), ' ', '-') = :publisher96          OR97          REPLACE(RTRIM(LTRIM(publisher_books.publisherx)), ' ', '-') = :translit_t98          OR99          REPLACE(REPLACE(RTRIM(LTRIM(publisher_books.publisherx)), ' ', ''), '-', '') = REPLACE(REPLACE(:publisher, ' ', ''), '-', '')100          OR101          REPLACE(REPLACE(RTRIM(LTRIM(publisher_books.publisherx)), ' ', ''), '-', '') = REPLACE(REPLACE(:translit_t, ' ', ''), '-', '')102      ) paged_books103      WHERE104        row_number BETWEEN105          :skip + 1106          AND 107          :skip + :take108      ORDER BY 109        paged_books.nyp DESC,110        paged_books.datepub DESC`;111  var params = { publisher: publisher, translit_t: translit_t, skip: parseInt(skip), take: parseInt(take) };112  photoeye113    .query(sql, { replacements: params })114    .spread(function(results, metadata) {115      misc.normalizeInventoryData(results);116      callback(results);117    });118}119module.exports = {120  getPublisher:      getPublisher,121  getPublisherBooks: getPublisherBooks...ClientController.js
Source:ClientController.js  
1const sql = require("mssql");2module.exports = {3  async index(req, res) {4    const request = new sql.Request();5           6    const { filial } = req.query;7    8    if(filial!=null) {9      filial_condition = `SA1.A1_FILIAL IN ('${filial}') AND`;10    } else {filial_condition = ``;};11        // query to the database and get the records12        await request.query(13            `14            SELECT15                    RTRIM(SA1.A1_FILIAL) AS filial,16                    RTRIM(SA1.A1_COD) AS codigo_cliente,17                    RTRIM(SA1.A1_NOME) AS razao_social,18                    RTRIM(SA1.A1_CGC) AS cnpj,19                    RTRIM(SA1.A1_INSCR) AS inscricao_estadual,20                    RTRIM(SA1.A1_CONTRIB) AS contribuinte,21                    RTRIM(SA1.A1_END) AS endereco,22                    RTRIM(SA1.A1_BAIRRO) AS bairro,23                    RTRIM(SA1.A1_MUN) AS municipio,24                    RTRIM(SA1.A1_EST) AS uf,25                    RTRIM(SA1.A1_CEP) AS cep,26                    RTRIM(SA1.A1_CONTATO) AS contato,27                    RTRIM(SA1.A1_EMAIL) AS email,28                    RTRIM(SA1.A1_TEL) AS telefone29            FROM    SA1010 AS SA1 WITH (NOLOCK) 30            WHERE	  31                    ${filial_condition}32                    SA1.A1_MSBLQL <> 1 AND33                    SA1.D_E_L_E_T_ = ''34            `, function (err, recordset) {35            36            if (err) console.log(err)37            return res.json(recordset.recordsets[0]);38            // send records as a response39            }40        )41  }...rtrim.js
Source:rtrim.js  
1var equal = require('assert').equal;2var rtrim = require('../rtrim');3test('#rtrim', function() {4  equal(rtrim('http://foo/', '/'), 'http://foo', 'clean trailing slash');5  equal(rtrim(' foo'), ' foo');6  equal(rtrim('foo '), 'foo');7  equal(rtrim('foo     '), 'foo');8  equal(rtrim('foo  bar     '), 'foo  bar');9  equal(rtrim(' foo '), ' foo');10  equal(rtrim('ffoo', 'f'), 'ffoo');11  equal(rtrim('ooff', 'f'), 'oo');12  equal(rtrim('ffooff', 'f'), 'ffoo');13  equal(rtrim('_-foobar-_', '_-'), '_-foobar');14  equal(rtrim(123, 3), '12');15  equal(rtrim(''), '', 'rtrim empty string should return empty string');16  equal(rtrim(null), '', 'rtrim null should return empty string');...borrowstag2.js
Source:borrowstag2.js  
...13/** 14    Remove whitespace from the right side of a string.15    @param {string} str16 */17function rtrim(str) {...Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3        .typeText('#developer-name', 'John Smith')4        .click('#submit-button')5        .expect(Selector('#article-header').textContent).eql('Thank you, John Smith!');6});7import { Selector } from 'testcafe';8test('My first test', async t => {9        .typeText('#developer-name', 'John Smith')10        .click('#submit-button')11        .expect(Selector('#article-header').textContent).eql('Thank you, John Smith!');12});13import { Selector } from 'testcafe';14test('My first test', async t => {15        .typeText('#developer-name', 'John Smith')16        .click('#submit-button')17        .expect(Selector('#article-header').textContent).eql('Thank you, John Smith!');18});19import { Selector } from 'testcafe';20test('My first test', async t => {21        .typeText('#developer-name', 'John Smith')22        .click('#submit-button')23        .expect(Selector('#article-header').textContent).eql('Thank you, John Smith!');24});25import { Selector } from 'testcafe';26test('My firstUsing AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3        .typeText('#developer-name', 'John Smith')4        .click('#tried-test-cafe')5        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');6});7import { Selector } from 'testcafe';8test('My first test', async t => {9        .typeText('#developer-name', 'John Smith')10        .click('#tried-test-cafe')11        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');12});13import { Selector } from 'testcafe';14test('My first test', async t => {15        .typeText('#developer-name', 'John Smith')16        .click('#tried-test-cafe')17        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');18});19import { Selector } from 'testcafe';20test('My first test', async t => {21        .typeText('#developer-name', 'John Smith')22        .click('#tried-test-cafe')23        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');24});25import { Selector } from 'testcafe';Using AI Code Generation
1import { ClientFunction } from 'testcafe';2test('My first test', async t => {3    const getLocation = ClientFunction(() => document.location.href);4    const url = await getLocation();5    console.log(url);6});7import { ClientFunction } from 'testcafe';8test('My first test', async t => {9    const getLocation = ClientFunction(() => document.location.href);10    const url = await getLocation();11    console.log(url);12});13import { ClientFunction } from 'testcafe';14test('My first test', async t => {15    const getLocation = ClientFunction(() => document.location.href);16    const url = await getLocation();17    console.log(url);18});19import { ClientFunction } from 'testcafe';20test('My first test', async t => {21    const getLocation = ClientFunction(() => document.location.href);22    const url = await getLocation();23    console.log(url);24});25import { ClientFunction } from 'testcafe';26test('My first test', async t => {27    const getLocation = ClientFunction(() => document.location.href);28    const url = await getLocation();29    console.log(url);30});31import { ClientFunction } from 'testcafe';32test('My first test', async t => {33    const getLocation = ClientFunction(() => document.location.href);34    const url = await getLocation();35    console.log(url);36});37import { ClientFunction } from 'testcafe';38test('My first testUsing AI Code Generation
1import { ClientFunction } from 'testcafe';2const rtrim = ClientFunction((str, charlist) => {3    charlist = !charlist ? ' \\s\u00A0' : (charlist + '')4        .replace(/([[\]().?/*{}+$^:])/g, '\\$1');5    let re = new RegExp('[' + charlist + ']+$', 'g');6    return (str + '')7        .replace(re, '');8});9test('Test', async t => {10        .typeText('#lst-ib', 'Testcafe')11        .expect(rtrim(await t.eval(() => document.querySelector('#lst-ib').value))).eql('Testcafe');12});Using AI Code Generation
1import { Selector } from 'testcafe';2import { ClientFunction } from 'testcafe';3import { t } from 'testcafe';4test('My first test', async t => {5        .typeText('#lst-ib', 'Hello, World!')6        .click('#tsf > div.tsf-p > div.jsb > center > input[type="submit"]:nth-child(1)')7        .wait(5000)8        .expect(Selector('#resultStats').innerText).eql('About 1,140,000,000 results (0.66 seconds)');9});10test('My second test', async t => {11        .typeText('#lst-ib', 'Hello, World!')12        .click('#tsf > div.tsf-p > div.jsb > center > input[type="submit"]:nth-child(1)')13        .wait(5000)14        .expect(Selector('#resultStats').innerText).eql('About 1,140,000,000 results (0.66 seconds)');15});16test('My third test', async t => {17        .typeText('#lst-ib', 'Hello, World!')18        .click('#tsf > div.tsf-p > div.jsb > center > input[type="submit"]:nth-child(1)')19        .wait(5000)20        .expect(Selector('#resultStats').innerText).eql('About 1,140,000,000 results (0.66 seconds)');21});22test('My fourth test', async t => {23        .typeText('#lst-ib', 'Hello, World!')24        .click('#tsf > div.tsf-p > div.jsb > center > input[type="submit"]:nth-child(1)')25        .wait(5000)26        .expect(Selector('#resultStats').innerText).eql('About 1,140,000,000 results (0.66 seconds)');27});28test('My fifth test', async t => {29        .typeText('#lst-ib', 'Hello, WorldUsing AI Code Generation
1const { Selector } = require('testcafe');2const testControllerHolder = require('../testControllerHolder');3test('My first test', async t => {4    await testControllerHolder.set(t);5        .typeText('#developer-name', 'Peter')6        .click('#tried-test-cafe')7        .click(Selector('input').withAttribute('type', 'submit'));8    const articleHeader = await Selector('.result-content').find('h1');9    let headerText = await articleHeader.textContent;10    headerText = headerText.trim();11    const expectedHeaderText = await articleHeader.getAttribute('data-header');12    await t.expect(headerText).eql(expectedHeaderText);13});Using AI Code Generation
1import { t } from 'testcafe';2test('My test', async t => {3        .typeText('#developer-name', 'John Smith')4        .click('#submit-button')5        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');6});7var _ = require('lodash');8var trimmed = _.trimEnd('  abc  ');9console.log(trimmed);10var _ = require('underscore');11var trimmed = _.trimRight('  abc  ');12console.log(trimmed);13var trimmed = $.trimRight('  abc  ');14console.log(trimmed);15var trimmed = '  abc  '.trimRight();16console.log(trimmed);17var trimmed = '  abc  '.trimRight();18console.log(trimmed);19var trimmed = YAHOO.lang.trimRight('  abc  ');20console.log(trimmed);21var trimmed = Ext.String.trimRight('  abc  ');22console.log(trimmed);23var trimmed = '  abc  '.rtrim();24console.log(trimmed);25var trimmed = qx.lang.String.trimRight('  abc  ');26console.log(trimmed);27var trimmed = dojo.trimRight('  abc  ');28console.log(trimmed);29var trimmed = com.google.gwt.lang.String.rtrim('  abc  ');30console.log(trimmed);31var trimmed = goog.string.trimRight('  abc  ');32console.log(trimmed);Using AI Code Generation
1import { Selector } from 'testcafe';2test('Test', async t => {3    const searchBox = Selector('#lst-ib');4    await t.typeText(searchBox, 'Testcafe', { replace: true });5});6import { Selector } from 'testcafe';7test('Test', async t => {8    const searchBox = Selector('#lst-ib');9    await t.typeText(searchBox, 'Testcafe', { replace: true });10});11import { Selector } from 'testcafe';12test('Test', async t => {13    const searchBox = Selector('#lst-ib');14    await t.typeText(searchBox, 'Testcafe', { replace: true });15});16import { Selector } from 'testcafe';17test('Test', async t => {18    const searchBox = Selector('#lst-ib');19    await t.typeText(searchBox, 'Testcafe', { replace: trueUsing AI Code Generation
1import { Selector } from 'testcafe';2const test = Selector('#test');3const text = await test.innerText;4const trimmedText = text.trimRight();5console.log(trimmedText);6import { Selector } from 'testcafe';7const test = Selector('#test');8const text = await test.innerText;9const trimmedText = text.trimRight();10console.log(trimmedText);11import { Selector } from 'testcafe';12const test = Selector('#test');13const text = await test.innerText;14const trimmedText = text.trimRight();15console.log(trimmedText);16import { Selector } from 'testcafe';17const test = Selector('#test');18const text = await test.innerText;19const trimmedText = text.trimRight();20console.log(trimmedText);21import { Selector } from 'testcafe';22const test = Selector('#test');23const text = await test.innerText;24const trimmedText = text.trimRight();25console.log(trimmedText);26import { Selector } from 'testcafe';27const test = Selector('#test');28const text = await test.innerText;29const trimmedText = text.trimRight();30console.log(trimmedText);31import { Selector } from 'testcafe';32const test = Selector('#test');33const text = await test.innerText;34const trimmedText = text.trimRight();35console.log(trimmedText);36import { Selector } from 'testcafe';37const test = Selector('#test');38const text = await test.innerText;39const trimmedText = text.trimRight();40console.log(trimmedText);41import { Selector } from 'testcafe';42const test = Selector('#test');43const text = await test.innerText;44const trimmedText = text.trimRight();45console.log(trimmedText);46import { Selector } from 'testcafe';47const test = Selector('#test');48const text = await test.innerText;49const trimmedText = text.trimRight();50console.log(trimmedText);51import { Selector } from 'testcaLearn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
