Best JavaScript code snippet using root
preview.js
Source:preview.js
...109 }110 // make an entry in issArray. start, len: position in text to mark111 // code: issue, optional type overrides issueType,112 // subText is text to substitute in some messages113 function reportIssue(start, len, code, type = null, subText = "") {114 if (!(config.suppress[code])) {115 if(type == null) {116 type = issueType[code];117 }118 issArray.push({start: start, len: len, code: code, type: type, subText: subText});119 }120 }121 const reNoteStart = /\[\*\*/g;122 function checkProoferNotes() {123 // look for [** then look for ] skipping matched [ ]124 let result, closeIndex;125 while(null !== (result = reNoteStart.exec(txt))) {126 closeIndex = findClose(txt, reNoteStart.lastIndex);127 if (0 === closeIndex) {128 // no ] found129 reportIssue(result.index, 3, "noCloseBrack", 1);130 badParse();131 return;132 } else {133 // continue search from the ] we found134 reNoteStart.lastIndex = closeIndex;135 }136 }137 }138 let notes = [];139 // make text with notes removed, put them in an array with indexes into the new text140 function removeAllNotes(txt) {141 // Remove trailing whitespace on each line so whole line notes142 // are not disguised.143 txt = removeTrail(txt);144 let beginIndex = 0;145 let txtOut = "";146 let result, noteStartIndex, noteEndIndex;147 // start of note relative to txtOut148 let outNoteStart = 0;149 const maxIndex = txt.length - 1;150 reNoteStart.lastIndex = 0;151 // we've already checked that notes are correctly terminated152 // find start of note153 while (null != (result = reNoteStart.exec(txt))) {154 noteStartIndex = result.index;155 noteEndIndex = findClose(txt, reNoteStart.lastIndex);156 // copy text to start of note157 txtOut += txt.slice(beginIndex, noteStartIndex);158 outNoteStart += noteStartIndex - beginIndex;159 // if note starts at beginning of a line and ends at the end of a line160 // remove any following nl character also so doesn't count as a blank line and include the nl in the note161 if(((noteStartIndex === 0) || (txt.charAt(noteStartIndex - 1) === "\n"))162 && ((noteEndIndex === maxIndex) || (txt.charAt(noteEndIndex + 1) === "\n"))) {163 // let next copy begin after the ending \n164 beginIndex = noteEndIndex + 2;165 } else {166 // let next copy begin after the note167 beginIndex = noteEndIndex + 1;168 }169 notes.push({start: outNoteStart, text: txt.slice(noteStartIndex, beginIndex)});170 reNoteStart.lastIndex = beginIndex;171 }172 // copy any remaining text173 // If beginIndex is greater than or equal to str.length, an empty string is returned.174 txtOut += txt.slice(beginIndex);175 return txtOut;176 }177 // find end of line (or eot) following ix178 function findEnd(ix) {179 var re = /\n|$/g;180 var result;181 re.lastIndex = ix;182 result = re.exec(txt);183 return result.index;184 }185 function chkCharAfter(start, len, type, descriptor) {186 const ix = start + len;187 const end = findEnd(ix);188 if (/\S/.test(txt.slice(ix, end))) {189 reportIssue(start, len, "charAfter", type, descriptor);190 return true;191 }192 return false;193 }194 // the parsers for inline and out-of-line tags work with a stack:195 // for correct nesting opening tags are pushed onto the stack and popped off196 // when a corresponding closing tag is found197 // parse the out-of-line tags198 // cases for tag on stack top:199 // none: /* or /# -> push, else error200 // /*: */ pop, #/ -> mismatch, /# -> BQ not allowed inside NW, /* -> NW inside NW201 // /#: /# or /* -> push, #/ -> pop, */ mismatch202 function parseOol() {203 var tagStack = []; // holds start tag /* or /# and index204 var start;205 var tagString;206 var stackTop;207 var result;208 var oolre = /\/\*|\/#|\*\/|#\//g; // any out-of-line tag209 var prevLin;210 // find previous line, assume ix > 0211 function findPrevLine(ix) {212 var pStart = ix - 1;213 while (pStart > 0) {214 pStart -= 1;215 if (txt.charAt(pStart) === "\n") {216 pStart += 1;217 break;218 }219 }220 return txt.slice(pStart, ix - 1);221 }222 // check that no other characters are on the same line223 function chkAlone(start, len, descriptor) {224 if(chkCharAfter(start, len, 1, descriptor)) {225 return;226 }227 if (/./.test(txt.charAt(start - 1))) {228 reportIssue(start, len, "charBefore");229 }230 }231 while ((result = oolre.exec(txt)) !== null) {232 start = result.index;233 tagString = result[0];234 chkAlone(start, 2, tagString);235 // for an opening tag check previous line is blank236 // or an opening block quote tag237 // allow also an opening no-wrap to avoid giving a misleading message238 // that it is "normal text". The error will be caught elsewhere.239 if ((tagString.charAt(0) === "/") && (start > 1) && (txt.charAt(start - 2) !== "\n")) {240 prevLin = findPrevLine(start);241 if (!(("/#" === prevLin) || ("/*" === prevLin))) {242 reportIssue(start, 2, "OolPrev");243 }244 }245 // for a closing tag check following line is blank246 // or a closing block quote or ] (ending a footnote).247 // allow also closing no-wrap to avoid misleading error message248 if (tagString.charAt(1) === "/") {249 if (/[^#*\n\]]/.test(txt.charAt(findEnd(start + 2) + 1))) {250 reportIssue(start, 2, "OolNext");251 }252 }253 if (tagStack.length === 0) {254 if ('/' === tagString.charAt(0)) { // start tag255 tagStack.push({tag: tagString, start: start});256 } else {257 reportIssue(start, 2, "noStartTag");258 }259 } else { // there are tags in the stack260 stackTop = tagStack[tagStack.length - 1];261 if (stackTop.tag.charAt(1) === "*") { // open NW;262 switch (tagString) {263 case "*/": // close NW ok264 tagStack.pop();265 break;266 case "#/": // close BQ267 tagStack.pop();268 reportIssue(start, 2, "misMatchTag");269 reportIssue(stackTop.start, 2, "misMatchTag");270 break;271 case "/*": // open NW272 reportIssue(start, 2, "NWinNW");273 tagStack.push({tag: tagString, start: start});274 break;275 default: // open BQ276 reportIssue(start, 2, "BQinNW");277 tagStack.push({tag: tagString, start: start});278 break;279 }280 } else { // top of stack is /#281 switch (tagString) {282 case "#/": // close BQ283 tagStack.pop();284 break;285 case "*/": // close NW286 tagStack.pop();287 reportIssue(start, 2, "misMatchTag");288 reportIssue(stackTop.start, 2, "misMatchTag");289 break;290 default: // open either291 tagStack.push({tag: tagString, start: start});292 break;293 }294 }295 }296 }297 // if there are any tags on the stack mark them as errors298 while (tagStack.length !== 0) {299 stackTop = tagStack.pop();300 reportIssue(stackTop.start, 2, "noEndTag");301 }302 }303 // if find a start tag, check if any same already in stack, push onto stack304 // if end tag, check it matches stack top, pop else error305 // if none found, if stack empty finished else error306 function parseInLine() {307 var tagString;308 var end = 0;309 var tagLen;310 var start = 0;311 var tagStack = [];312 var stackTop;313 var preChar;314 var postChar;315 // find index in stack of ntag, return -1 if none found316 function match(tagData) {317 return tagData.tag === tagString;318 }319 // regex to match < and next up to 4 chars, or a blank line320 const rePossTag = new RegExp("<.{0,4}|\\n\\n", "g");321 const reGoodTag = new RegExp(`^<(/?)(${ILTags})>`);322 let possTagResult;323 while ((possTagResult = rePossTag.exec(txt)) !== null) {324 if (possTagResult[0] === "\n\n") {325 while (tagStack.length !== 0) {326 stackTop = tagStack.pop();327 reportIssue(stackTop.start, stackTop.tagLen, "noEndTagInPara");328 badParse();329 }330 continue;331 }332 const possibleTag = possTagResult[0];333 if(possibleTag.match(/^<tb>/)) {334 continue;335 }336 const goodTagResult = possibleTag.match(reGoodTag);337 start = possTagResult.index;338 if(!goodTagResult) {339 reportIssue(start, 1, "unRecTag");340 // start next search after < in case another < follows341 rePossTag.lastIndex = start + 1;342 continue;343 }344 tagLen = goodTagResult[0].length;345 end = start + tagLen;346 // start next search after goodTag347 rePossTag.lastIndex = end;348 tagString = goodTagResult[2];349 preChar = txt.charAt(start - 1);350 postChar = txt.charAt(end);351 if (goodTagResult[1] === '/') { // end tag352 // check for , ; or : before end tag except at end of text353 if (/[,;:]/.test(preChar) && (txt.length !== end)) {354 reportIssue(start - 1, 1, "puncBEnd");355 }356 if (preChar === " ") {357 reportIssue(start - 1, 1, "spaceBeforeEnd");358 }359 if (preChar === "\n") {360 reportIssue(start, tagLen, "nlBeforeEnd");361 }362 // letter or number after end tag363 if (XRegExp("\\pL|\\pN", "Ag").test(postChar)) {364 reportIssue(end, 1, "charAfterEnd");365 }366 if (tagStack.length === 0) { // missing start tag367 reportIssue(start, tagLen, "noStartTag");368 badParse();369 } else {370 stackTop = tagStack.pop();371 if (stackTop.tag !== tagString) {372 reportIssue(start, tagLen, "misMatchTag");373 reportIssue(stackTop.start, stackTop.tagLen, "misMatchTag");374 badParse();375 } else if ((stackTop.start + stackTop.tagLen) === start) {376 reportIssue(start, tagLen, "emptyTag");377 reportIssue(stackTop.start, stackTop.tagLen, "emptyTag");378 }379 }380 } else { // startTag381 if (tagStack.some(match)) { // check if any already in stack382 reportIssue(start, tagLen, "nestedTag");383 badParse();384 }385 if (/[,.;:!?]/.test(postChar)) {386 reportIssue(end, 1, "puncAfterStart");387 }388 if (postChar === " ") {389 reportIssue(end, 1, "spaceAfterStart");390 }391 if (postChar === "\n") {392 reportIssue(start, tagLen, "nlAfterStart");393 }394 // letter or ,.;:395 if (XRegExp("\\pL|[,.;:]", "Ag").test(preChar)) {396 reportIssue(start - 1, 1, "charBeforeStart");397 }398 tagStack.push({tag: tagString, start: start, tagLen: tagLen});399 }400 }401 // if there are any tags on the stack mark them as errors402 while (tagStack.length !== 0) {403 stackTop = tagStack.pop();404 reportIssue(stackTop.start, stackTop.tagLen, "noEndTag");405 badParse();406 }407 }408 // check for no upper case between small caps tags409 function checkSC() {410 var result;411 var re = /<sc>([^]*?)<\/sc>/g; // <sc> text412 var res1;413 while ((result = re.exec(txt)) !== null) {414 res1 = result[1];415 if (res1 === res1.toLowerCase()) {416 if(res1.charAt(0) !== "*") {417 // definite issue418 reportIssue(result.index, 4, "scNoCap", 1);419 } else {420 // a lower case fragment, mark first character421 // incase no tags shown422 reportIssue(result.index + 4, 1, "scNoCap", 0);423 }424 }425 }426 }427 function checkBlankNumber() { // only 1, 2 or 4 blank lines should appear428 var result;429 var end;430 var re = /^\n{3}.|.\n{4}.|^\n{5,}.|.\n{6,}./g;431 while ((result = re.exec(txt)) !== null) {432 re.lastIndex -= 1; // in case only one char, include it in next search433 end = result.index + result[0].length;434 reportIssue(end - 1, 1, "blankLines124");435 badParse();436 }437 }438 // there should not be an entire bold single line after 2 or 4 blank lines439 function boldHeading() {440 var headLine;441 var re = /((?:^|\n)\n\n)(.+)\n\n/g; // the whole line442 // match a tag or any non-space char443 var re1 = new RegExp("<\\/?(?:" + ILTags + ")>|\\S", "g");444 var boldEnd = /<\/b>/g;445 function boldLine() { // false if any non-bold char found446 var result1;447 re1.lastIndex = 0; // else will be left from previous use448 while ((result1 = re1.exec(headLine)) !== null) {449 if (result1[0].length === 1) { // a non-bold char450 return false;451 }452 if (result1[0] === "<b>") { // advance to </b>453 boldEnd.lastIndex = re1.lastIndex;454 if (null === boldEnd.exec(headLine)) { // shouldn't happen455 return false;456 }457 re1.lastIndex = boldEnd.lastIndex;458 }459 // must be another tag - continue460 }461 return true;462 }463 var result;464 var start;465 // first find the heading lines466 while ((result = re.exec(txt)) !== null) {467 headLine = result[2];468 re.lastIndex -= 2; // so can find another straight after469 if (boldLine()) {470 start = result.index + result[1].length;471 reportIssue(start, 3, "noBold");472 }473 }474 }475 // check that footnote anchors and footnotes correspond476 // also check footnote id and [*] anchors477 // first make arrays of anchors and footnote ids, then check correspondence478 function checkFootnotes() {479 var anchorArray = [];480 var footnoteArray = [];481 // let footnote marker be an optionaly tagged letter, or a number482 // Bad tag caught elsewhere483 let marker = `(?:<(?:${ILTags})>)?(?:[A-Za-z]|\\d+)(?:<.+>)?`;484 let footnoteIDRegex = new RegExp(`^(?:${marker})$`);485 // also check for *486 let anchorRegex = new RegExp(`\\[(\\*|${marker})\\]`, "g");487 function checkAnchor(anch) {488 function match(fNote) {489 return fNote.id === anch.id;490 }491 if (!footnoteArray.some(match)) {492 reportIssue(anch.index, anch.id.length + 2, "noFootnote");493 }494 }495 function checkNote(fNote) {496 var anchorIx = [];497 var markLen;498 function findId(anch) {499 if (anch.id === fNote.id) {500 anchorIx.push(anch.index);501 }502 }503 function dupReport(index) {504 reportIssue(index, markLen, "multipleAnchors");505 }506 // make an array of anchor indexes for this footnote507 anchorArray.forEach(findId);508 var noteNum = anchorIx.length;509 if (0 === noteNum) {510 reportIssue(fNote.index, 9, "noAnchor");511 } else if (noteNum > 1) {512 markLen = fNote.id.length + 2;513 anchorIx.forEach(dupReport);514 }515 }516 // search for footnote anchors and put in an array517 let result;518 while ((result = anchorRegex.exec(txt)) !== null) {519 if (result[1] === "*") { // found [*]520 reportIssue(result.index, 3, "starAnchor");521 continue;522 }523 anchorArray.push({index: result.index, id: result[1]});524 }525 // search for footnotes, get text to end of line526 let footnoteRegex = /\[Footnote(.*)/g;527 let noteLine, colonIndex, footnoteStartIndex;528 function match(fNote) {529 return fNote.id === noteLine;530 }531 while ((result = footnoteRegex.exec(txt)) !== null) {532 noteLine = result[1];533 // find text up to :534 colonIndex = noteLine.indexOf(":");535 footnoteStartIndex = result.index;536 if (-1 === colonIndex) {537 reportIssue(footnoteStartIndex, 9, "noColon");538 continue;539 }540 if (txt.charAt(footnoteStartIndex - 1) === "*") { // continuation541 if (colonIndex !== 0) {542 reportIssue(footnoteStartIndex, 9, "colonNext");543 } else if (footnoteArray.length > 0) {544 reportIssue(footnoteStartIndex, 9, "continueFirst");545 }546 continue;547 }548 if (!(/^ [^ ]/).test(noteLine)) {549 reportIssue(footnoteStartIndex, 9, "spaceNext");550 continue;551 }552 noteLine = noteLine.slice(1, colonIndex); // the id553 if (!footnoteIDRegex.test(noteLine)) {554 reportIssue(footnoteStartIndex, 9, "footnoteId");555 continue;556 }557 if (footnoteArray.some(match)) {558 reportIssue(footnoteStartIndex, 9, "dupNote");559 continue;560 }561 footnoteArray.push({index: footnoteStartIndex, id: noteLine});562 }563 anchorArray.forEach(checkAnchor);564 footnoteArray.forEach(checkNote);565 }566 // check blank lines before and after footnote, sidenote, illustration567 // & <tb>. Do separately since different special cases for each568 // possible issue if there is an unmatched ] in the text569 // message includes "Footnote" etc. to clarify the problem570 function checkBlankLines() {571 // check for chars before tag or on previous line572 function chkBefore(start, len, checkBlank) {573 if (/./.test(txt.charAt(start - 1))) {574 reportIssue(start, len, "charBefore");575 } else if (checkBlank && (/./.test(txt.charAt(start - 2)))) {576 reportIssue(start, len, "blankBefore");577 }578 }579 // check no chars follow on same line and next line is blank580 function chkAfter(start, len, descriptor, type, checkBlank) {581 // true if find */ or \n or eot582 function endNWorBlank(pc) {583 if (txt.slice(pc, pc + 2) === "*/") {584 return true;585 }586 return !(/./).test(txt.charAt(pc));587 }588 if(chkCharAfter(start, len, type, descriptor)) {589 return;590 }591 const end = findEnd(start + len);592 if (checkBlank && !endNWorBlank(end + 1)) {593 reportIssue(start, len, "blankAfter", type, descriptor);594 }595 }596 var result, start, len, end, end1;597 var re = /\*?\[(Footnote)/g;598 while ((result = re.exec(txt)) !== null) {599 start = result.index;600 len = result[0].length;601 end = start + len;602 chkBefore(start, len, true);603 end1 = findClose(txt, end);604 if (0 === end1) { // no ] found605 reportIssue(start, len, "noCloseBrack");606 } else {607 end = end1 + 1;608 len = 1;609 if (txt.charAt(end) === "*") { // allow * after Footnote610 end += 1;611 len += 1;612 }613 chkAfter(end1, len, result[1], 0, true);614 }615 }616 re = /\*?\[(Illustration)/g;617 while ((result = re.exec(txt)) !== null) {618 start = result.index;619 len = result[0].length;620 end = start + len;621 chkBefore(start, len, true);622 end1 = findClose(txt, end);623 if (0 === end1) { // no ] found624 reportIssue(start, len, "noCloseBrack");625 } else {626 end = end1 + 1;627 len = 1;628 chkAfter(end1, len, result[1], 0, true);629 }630 }631 re = /\*?\[(Sidenote)/g;632 while ((result = re.exec(txt)) !== null) {633 start = result.index;634 len = result[0].length;635 end = start + len;636 chkBefore(start, len, !config.suppress.sideNoteBlank);637 end1 = findClose(txt, end);638 if (0 === end1) { // no ] found639 reportIssue(start, len, "noCloseBrack");640 } else {641 end = end1 + 1;642 len = 1;643 chkAfter(end1, len, result[1], 0, !config.suppress.sideNoteBlank);644 }645 }646 re = /<tb>/g;647 while ((result = re.exec(txt)) !== null) {648 start = result.index;649 len = result[0].length;650 chkBefore(start, len, true);651 // always an issue to avoid conflict with marking the tag652 chkAfter(start, len, "<tb>", 1, true);653 }654 }655 // check that math delimiters \[ \], \( \) are correctly matched656 function checkMath() {657 let mathRe = /\\\[|\\\]|\\\(|\\\)/g;658 let result;659 let tag, openTag = false;660 let openStart = 0;661 while((result = mathRe.exec(txt)) !== null) {662 tag = result[0].charAt(1);663 // if no open tag and ( or [ set open else error664 if (!openTag) {665 if ((tag === '(') || (tag === '[')) {666 openTag = tag;667 openStart = result.index;668 } else {669 reportIssue(result.index, 2, "noStartTag");670 }671 } else {672 if (((openTag === '(') && (tag === ')')) || ((openTag === '[') && (tag === ']'))) {673 // correctly matched674 openTag = false;675 } else if (((openTag === '(') && (tag === ']')) || ((openTag === '[') && (tag === ')'))) {676 // mismatched677 openTag = false;678 reportIssue(openStart, 2, "misMatchTag");679 reportIssue(result.index, 2, "misMatchTag");680 } else {681 // a start tag of either sort follows a start tag682 reportIssue(openStart, 2, "noEndTag");683 openTag = tag;684 openStart = result.index;685 }686 }687 }688 // if there is a tag open mark it as an error689 if (openTag) {690 reportIssue(openStart, 2, "noEndTag");691 }692 }693 checkProoferNotes();694 if(parseOK) {695 txt = removeAllNotes(txt);696 parseInLine();697 // if inline parse fails then checkSC might not work698 if (parseOK) {699 checkSC();700 }701 checkBlankNumber();702 if (parseOK) {703 // only do this if inline parse succeeded and blank lines ok704 boldHeading();...
ReportIssue.js
Source:ReportIssue.js
...152 });153 this.props.dispatch(routerRedux.push({ pathname: "/" }));154 console.log(response);155 };156 reportIssue();157 };158 render() {159 const { classes } = this.props;160 const handleImageUpload = async e => {161 try {162 const formData = new FormData();163 formData.append("pic", e.target.files[0]);164 this.setState({ formData: formData });165 } catch (error) {}166 };167 return (168 <ReportIssuesContainer>169 <form autoComplete="off" onSubmit={this.handleSubmit}>170 <div className={classes.categoryLabel}>...
report_item_spec.js
Source:report_item_spec.js
1import Vue from 'vue';2import { componentNames } from 'ee/reports/components/issue_body';3import store from 'ee/vue_shared/security_reports/store';4import mountComponent, { mountComponentWithStore } from 'helpers/vue_mount_component_helper';5import { codequalityParsedIssues } from 'ee_jest/vue_mr_widget/mock_data';6import {7 sastParsedIssues,8 dockerReportParsed,9 parsedDast,10 secretScanningParsedIssues,11} from 'ee_jest/vue_shared/security_reports/mock_data';12import { STATUS_FAILED, STATUS_SUCCESS } from '~/reports/constants';13import reportIssue from '~/reports/components/report_item.vue';14describe('Report issue', () => {15 let vm;16 let ReportIssue;17 beforeEach(() => {18 ReportIssue = Vue.extend(reportIssue);19 });20 afterEach(() => {21 vm.$destroy();22 });23 describe('for codequality issue', () => {24 describe('resolved issue', () => {25 beforeEach(() => {26 vm = mountComponent(ReportIssue, {27 issue: codequalityParsedIssues[0],28 component: componentNames.CodequalityIssueBody,29 status: STATUS_SUCCESS,30 });31 });32 it('should render "Fixed" keyword', () => {33 expect(vm.$el.textContent).toContain('Fixed');34 expect(vm.$el.textContent.replace(/\s+/g, ' ').trim()).toEqual(35 'Fixed: Insecure Dependency in Gemfile.lock:12',36 );37 });38 });39 describe('unresolved issue', () => {40 beforeEach(() => {41 vm = mountComponent(ReportIssue, {42 issue: codequalityParsedIssues[0],43 component: componentNames.CodequalityIssueBody,44 status: STATUS_FAILED,45 });46 });47 it('should not render "Fixed" keyword', () => {48 expect(vm.$el.textContent).not.toContain('Fixed');49 });50 });51 });52 describe('with location', () => {53 it('should render location', () => {54 vm = mountComponent(ReportIssue, {55 issue: sastParsedIssues[0],56 component: componentNames.SecurityIssueBody,57 status: STATUS_FAILED,58 });59 expect(vm.$el.textContent).toContain('in');60 expect(vm.$el.querySelector('li a').getAttribute('href')).toEqual(61 sastParsedIssues[0].urlPath,62 );63 });64 });65 describe('without location', () => {66 it('should not render location', () => {67 vm = mountComponent(ReportIssue, {68 issue: {69 title: 'foo',70 },71 component: componentNames.SecurityIssueBody,72 status: STATUS_SUCCESS,73 });74 expect(vm.$el.textContent).not.toContain('in');75 expect(vm.$el.querySelector('a')).toEqual(null);76 });77 });78 describe('for container scanning issue', () => {79 beforeEach(() => {80 vm = mountComponent(ReportIssue, {81 issue: dockerReportParsed.unapproved[0],82 component: componentNames.SecurityIssueBody,83 status: STATUS_FAILED,84 });85 });86 it('renders severity', () => {87 expect(vm.$el.textContent.trim()).toContain(dockerReportParsed.unapproved[0].severity);88 });89 it('renders CVE name', () => {90 expect(vm.$el.querySelector('button').textContent.trim()).toEqual(91 dockerReportParsed.unapproved[0].title,92 );93 });94 });95 describe('for dast issue', () => {96 beforeEach(() => {97 vm = mountComponentWithStore(ReportIssue, {98 store,99 props: {100 issue: parsedDast[0],101 component: componentNames.SecurityIssueBody,102 status: STATUS_FAILED,103 },104 });105 });106 it('renders severity and title', () => {107 expect(vm.$el.textContent).toContain(parsedDast[0].title);108 expect(vm.$el.textContent).toContain(`${parsedDast[0].severity}`);109 });110 });111 describe('for secret scanning issue', () => {112 beforeEach(() => {113 vm = mountComponent(ReportIssue, {114 issue: secretScanningParsedIssues[0],115 component: componentNames.SecurityIssueBody,116 status: STATUS_FAILED,117 });118 });119 it('renders severity', () => {120 expect(vm.$el.textContent.trim()).toContain(secretScanningParsedIssues[0].severity);121 });122 it('renders CVE name', () => {123 expect(vm.$el.querySelector('button').textContent.trim()).toEqual(124 secretScanningParsedIssues[0].title,125 );126 });127 });128 describe('showReportSectionStatusIcon', () => {129 it('does not render CI Status Icon when showReportSectionStatusIcon is false', () => {130 vm = mountComponentWithStore(ReportIssue, {131 store,132 props: {133 issue: parsedDast[0],134 component: componentNames.SecurityIssueBody,135 status: STATUS_SUCCESS,136 showReportSectionStatusIcon: false,137 },138 });139 expect(vm.$el.querySelectorAll('.report-block-list-icon')).toHaveLength(0);140 });141 it('shows status icon when unspecified', () => {142 vm = mountComponentWithStore(ReportIssue, {143 store,144 props: {145 issue: parsedDast[0],146 component: componentNames.SecurityIssueBody,147 status: STATUS_SUCCESS,148 },149 });150 expect(vm.$el.querySelectorAll('.report-block-list-icon')).toHaveLength(1);151 });152 });...
Using AI Code Generation
1$scope.$root.reportIssue = function () {2}3$scope.$parent.reportIssue = function () {4}5$scope.$child.reportIssue = function () {6}7$rootScope.reportIssue = function () {8}9$scope.$parent.reportIssue = function () {10}11$scope.$child.reportIssue = function () {12}13$scope.$root.reportIssue = function () {14}15$scope.$parent.reportIssue = function () {16}17$scope.$child.reportIssue = function () {18}19$rootScope.reportIssue = function () {20}21$scope.$parent.reportIssue = function () {22}23$scope.$child.reportIssue = function () {24}25$scope.$root.reportIssue = function () {26}27$scope.$parent.reportIssue = function () {28}29$scope.$child.reportIssue = function () {30}31$rootScope.reportIssue = function () {32}33$scope.$parent.reportIssue = function () {34}35$scope.$child.reportIssue = function () {36}
Using AI Code Generation
1var root = require(‘root’);2root.reportIssue(‘This is a test’);3root.reportIssue(‘This is a test2’);4root.reportIssue(‘This is a test3’);5root.reportIssue(‘This is a test4’);6root.reportIssue(‘This is a test5’);7var reportIssue = function(issue){8console.log(issue);9};10module.exports.reportIssue = reportIssue;11var reportIssue = function(issue){12console.log(issue);13};14module.exports.reportIssue = reportIssue;15var reportIssue = function(issue){16console.log(issue);17};18module.exports.reportIssue = reportIssue;19var reportIssue = function(issue){20console.log(issue);21};22module.exports.reportIssue = reportIssue;23var reportIssue = function(issue){24console.log(issue);25};26module.exports.reportIssue = reportIssue;27var reportIssue = function(issue){28console.log(issue);29};30module.exports.reportIssue = reportIssue;31var reportIssue = function(issue){32console.log(issue);33};34module.exports.reportIssue = reportIssue;35var reportIssue = function(issue){36console.log(issue);37};38module.exports.reportIssue = reportIssue;39var reportIssue = function(issue){40console.log(issue);41};42module.exports.reportIssue = reportIssue;43var reportIssue = function(issue){44console.log(issue);45};46module.exports.reportIssue = reportIssue;47var reportIssue = function(issue){48console.log(issue);49};50module.exports.reportIssue = reportIssue;51var reportIssue = function(issue){52console.log(issue);53};54module.exports.reportIssue = reportIssue;55var reportIssue = function(issue){
Using AI Code Generation
1var root = require('root');2root.reportIssue('This is an issue');3root.reportIssue('This is another issue');4exports.reportIssue = function(issue) {5 console.log('Reporting issue: ' + issue);6};7var root = require('root');8root.reportIssue('This is a sub issue');9exports.reportIssue = function(issue) {10 console.log('Reporting sub issue: ' + issue);11};12var root = require('root');13root.reportIssue('This is an issue');14root.reportIssue('This is another issue');15var root = require('root');16root.reportIssue('This is a sub issue');17exports.reportIssue = function(issue) {18 console.log('Reporting sub issue: ' + issue);19};20var root = require('root');21root.reportIssue('This is an issue');22root.reportIssue('This is another issue');23var root = require('root');24root.reportIssue('This is a sub issue');25exports.reportIssue = function(issue) {26 console.log('Reporting sub issue: ' + issue);27};28var root = require('root');29root.reportIssue('This is an issue');30root.reportIssue('This is another issue');31var root = require('root');32root.reportIssue('This is a sub issue');33exports.reportIssue = function(issue) {34 console.log('Reporting sub issue: ' + issue);35};
Using AI Code Generation
1var root = require('./root.js');2root.reportIssue('This is a test issue');3module.exports.reportIssue = function(issue) {4 console.log(issue);5};6(function (exports, require, module, __filename, __dirname) {7});8The module.exports object is initially set to an empty object {}. You can add properties and methods to this object to make them available for other modules to require. For example, consider the following code:9module.exports.reportIssue = function(issue) {10 console.log(issue);11};
Learn 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!!