How to use getAnswers method in Webdriverio

Best JavaScript code snippet using webdriverio-monorepo

main.gs

Source:main.gs Github

copy

Full Screen

1function Main() {2 // スプレットシートを取得3 const getSS = SpreadsheetApp.openById('11Y5gKhXQnXspVgih58s3_DDT5orEz-WAZ4sCwSXpAOs'); // スプレットシート情報(読出し)4 const setSS = SpreadsheetApp.openById('1zzq1OQxTZJOFo2eFaTGkNLyipGWDjl9i-LijcgIU3Hw'); // スプレットシート情報(書込み)5 const form = getSS.getSheetByName('フォームの回答 1'); // スプレットシート(フォーム回答)情報6 let keyForm = setSS.getSheetByName('キーワードフォーム'); // スプレットシート(キーワードフォーム)情報7 // シートの最終行・最終列を取得8 const formLastRow = form.getLastRow(); // 最終行目を取得(フォーム回答1)9 const formLastCol = form.getLastColumn(); // 最終列目を取得(フォーム回答1)10 // アップロードした元ファイルの保存先フォルダID11 const upfolder = '0BxQbdvn-LT2ufmlKRk5SY3k2VFg0MzQxak1uYVZpNXdDYURKVkk2RHgtSUk1WDI3UExMWlk';12 // スプレットシート(フォーム回答1)の最終行の回答全てを取得13 const getAnswers = form.getRange(formLastRow, 1, 1, formLastCol).getValues().flat();14 // フォーム回答を個別に取得15 const __A = getAnswers[0]; 16 const _A = new Date(__A);17 const A = Utilities.formatDate(_A, 'JST', 'yyyy/M/d'); // タイムスタンプ18 const B = getAnswers[1]; // ファイル選択 >>> メールアドレス 19 const C = getAnswers[2].replace(/ /g,""); // 作成者(フルネーム) >>> 登録者(フルネーム)20 const D = getAnswers[3]; // 登録者(フルネーム) >>> 作成者(フルネーム)21 const E = getAnswers[4]; // お客様名 >>> ファイル内容22 const F = getAnswers[5]; // 関連付けしたいキーワード >>> 豆知識・プチ情報(アップロードファイルの有無)23 const G = getAnswers[6]; // ファイル内容 >>> 豆知識・プチ情報(タイトル)24 const H = getAnswers[7]; // ファイル内容(その他) >>> 豆知識・プチ情報(内容)25 const I = getAnswers[8]; // 豆知識・プチ情報のタイトル >>> 機械の種類26 const J = getAnswers[9]; // 豆知識・プチ情報 >>> コルゲータの種類27 const K = getAnswers[10]; // 機械の種類 >>> ミルロールスタンドの機種28 const L = getAnswers[11]; // コルゲータの種類 >>> キーワード(部位)29 const M = getAnswers[12]; // ミルロールスタンドの機種 >>> キーワード(動作)30 const N = getAnswers[13]; // スプライサの機種 >>> キーワード(症状・状態)31 const O = getAnswers[14]; // シングルフェーサの機種 >>> キーワード(部品)32 const P = getAnswers[15]; // ブレーキスタンドの機種 >>> スプライサの機種33 const Q = getAnswers[16]; // プレヒータの機種 >>> シングルフェーサの機種34 const R = getAnswers[17]; // グルーマシンの機種 >>> キーワード(部位)35 const S = getAnswers[18]; // ダブルフェーサの機種 >>> キーワード(動作)36 const T = getAnswers[19]; // スリッタスコアラの機種 >>> キーワード(症状・状態)37 const U = getAnswers[20]; // カッターの機種 >>> キーワード(部品)38 const V = getAnswers[21]; // スタッカーの機種 >>> ブレーキスタンドの機種39 const W = getAnswers[22]; // 管理装置の機種(コルゲータ) >>> キーワード(部位)40 const X = getAnswers[23]; // 製函機の種類 >>> キーワード(動作)41 const Y = getAnswers[24]; // アイビス・ファルコンの機種 >>> キーワード(症状・状態)42 const Z = getAnswers[25]; // フレキソの機種 >>> キーワード(部品)43 const AA = getAnswers[26]; // プリスロの機種 >>> プレヒータの機種44 const AB = getAnswers[27]; // フォルダーグルアの機種 >>> キーワード(部位)45 const AC = getAnswers[28]; // スタッカーの機種(製函機) >>> キーワード(動作)46 const AD = getAnswers[29]; // 管理装置(製函機) >>> キーワード(症状・状態)47 const AE = getAnswers[30]; // カウンターエジェクタの機種 >>> キーワード(部品)48 const AF = getAnswers[31]; // 他社製・取売機 >>> グルーマシンの機種49 const AG = getAnswers[32]; // その他(製函機) >>> キーワード(部位)50 const AH = getAnswers[33]; // 機器・部品の種類 >>> キーワード(動作)51 const AI = getAnswers[34]; // 機器・部品名(機械) >>> キーワード(症状・状態)52 const AJ = getAnswers[35]; // 機器・部品名(電気) >>> キーワード(部品)53 const AK = getAnswers[36]; // 社内業務マニュアル >>> ダブルフェーサの機種54 const AL = getAnswers[37]; // メールアドレス >>> キーワード(部位)55 const AM = getAnswers[38]; // 問合せ・要望 >>> キーワード(動作)56 const AN = getAnswers[39]; // 関連付けしたいキーワード >>> キーワード(症状・状態)57 const AO = getAnswers[40]; // ファイル選択 >>> キーワード(部品)58 const AP = getAnswers[41]; // 関連付けしたいキーワード >>> スリッタスコアラの機種59 const AQ = getAnswers[42]; // 関連付けしたいキーワード >>> キーワード(部位)60 const AR = getAnswers[43]; // 関連付けしたいキーワード >>> キーワード(動作)61 const AS = getAnswers[44]; // 関連付けしたいキーワード >>> キーワード(症状・状態)62 const AT = getAnswers[45]; // 関連付けしたいキーワード >>> キーワード(部品)63 const AU = getAnswers[46]; // 関連付けしたいキーワード >>> カッターの機種64 const AV = getAnswers[47]; // 関連付けしたいキーワード >>> キーワード(部位)65 const AW = getAnswers[48]; // 関連付けしたいキーワード >>> キーワード(動作)66 const AX = getAnswers[49]; // 関連付けしたいキーワード >>> キーワード(症状・状態)67 const AY = getAnswers[50]; // 関連付けしたいキーワード >>> キーワード(部品)68 const AZ = getAnswers[51]; // 関連付けしたいキーワード >>> スタッカーの機種69 const BA = getAnswers[52]; // 関連付けしたいキーワード >>> キーワード(部位)70 const BB = getAnswers[53]; // 関連付けしたいキーワード >>> キーワード(動作)71 const BC = getAnswers[54]; // 関連付けしたいキーワード >>> キーワード(症状・状態)72 const BD = getAnswers[55]; // 関連付けしたいキーワード >>> キーワード(部品)73 const BE = getAnswers[56]; // 関連付けしたいキーワード >>> 管理装置の機種74 const BF = getAnswers[57]; // 関連付けしたいキーワード >>> キーワード(部位)75 const BG = getAnswers[58]; // 関連付けしたいキーワード >>> キーワード(動作)76 const BH = getAnswers[59]; // 関連付けしたいキーワード >>> キーワード(症状・状態)77 const BI = getAnswers[60]; // 関連付けしたいキーワード >>> キーワード(部品)78 const BJ = getAnswers[61]; // 関連付けしたいキーワード >>> ファイル選択79 const BK = getAnswers[62]; // 関連付けしたいキーワード >>> お客様名80 const BL = getAnswers[63]; // 関連付けしたいキーワード >>> 何か改善してほしい点・追加要望等あれば記入して下さい。81 const BM = getAnswers[64]; // 関連付けしたいキーワード >>> キーワード(部位) スプライサ82 const BN = getAnswers[65]; // 関連付けしたいキーワード >>> キーワード(動作) スプライサ83 const BO = getAnswers[66]; // 関連付けしたいキーワード >>> キーワード(症状・状態) スプライサ84 const BP = getAnswers[67]; // 関連付けしたいキーワード >>> キーワード(部品) スプライサ85 // googleフォームからの取得データ(googleフォームに追加したら追加必要)86 // G, H は、配列の最後に記入。プチ情報タイトル・内容の為、最後に書込。87 const getDatas = [ A, B, C, D, E, F, I, J, K, L, M, N,88 O, P, Q, R, S, T, U, V, W, X, Y, Z,89 AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL,90 AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX,91 AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ,92 BK, BL, BM, BL, BO, BP, G, H ];93 // フォーム回答の設定(関数内でフォーム回答を使用する場合は、ここに追加した変数を使用して!)94 const timeStamp = A; // タイムスタンプ95 const mailAddress = B; // メールアドレス96 const registPerson = C; // 登録者97 const fileContents = E; // ファイル内容98 const notUploadFile = F; // 豆知識・プチ情報のアップロードファイル有無99 const littleInfoTitle = G; // 豆知識・プチ情報のタイトル100 const littleInfoConts = H; // 豆知識・プチ情報の内容101 const uploadFileUrl = BJ; // アップロードした元ファイルのURL102 const requests = BL; // 改善点・要望103 // キーワードフォームに記載不要なデータ104 const getNotDatas = [ mailAddress, notUploadFile, uploadFileUrl, requests ];105 // キーワードフォームに記載する説明文106 const AAA = "登録日時";107 const CCC = "登録者";108 const DDD = "作成者";109 const KEY = "キーワード";110 const dataTitle = [ AAA, DDD, CCC, KEY ]; // 説明文を配列に格納111 // アップロードファイル内容と保存先フォルダID112 const a = { contents:"取説・マニュアル(ISOWAオリジナル)", id:"1a3JnMp6ZfToZ4lthL4bGDdZOkT1IIpTR" };113 const b = { contents:"機器・部品マニュアル(メーカー)", id:"1OxoFmxgU-hS07Klcqa7S7I12rpt1tlJa" };114 const c = { contents:"手順書", id:"1c7TqF0wHPrFCdfIpx7xfWdTE6-MTbvRW" };115 const d = { contents:"調整要領書", id:"1kJRlkkqtn3EFAlpdYJzCgRWLEtWBrcib" };116 const e = { contents:"トラブルシューティング・定数表・パラメータ", id:"1KkrkvTAx0oEtyaTZTYYYVzq35I055lz5" };117 const f = { contents:"仕様書", id:"1far2FpiadbUZ_XHQD9BzwKlJVySGEKx9" };118 const g = { contents:"報告書", id:"1oXXtqrc96Ze4mykkfvI6K9bkzTvflNpE" };119 const h = { contents:"見解書", id:"16sky4P09sT2KdW1ngcPdeH5f0AjAaA-u" };120 const i = { contents:"点検・検査表", id:"1cL_4s38of31LA_xJKxLyplD_lu_5nIWl" };121 const j = { contents:"設計変更", id:"1DLPbnYjJQmkib4AmmfKdV2YNk9eHU42N" };122 const k = { contents:"アイレポ(修理・組立)", id:"1-cSlKa2xEy1raZqf5ySf4lLOWQ4A8hm-" };123 const l = { contents:"豆知識・プチ情報", id:"1W34glQWjt-spp7Hl5IN0TzczUnW8dyXF" };124 const m = { contents:"社内資料(業務マニュアル)", id:"1tQsfk5n3MME2zJopDE2QShXN8v5jtYsK" };125 const n = { contents:"社内資料(フォーム)", id:"1GQTozvYrRCdq7c24J8Nk3K8YpJ1HHi8h" };126 const o = { contents:"その他", id:"1RxdO0E4rNmEM1Yg9zwQrBh4PufuIDvRn" };127 const p = { contents:"画像", id:"1y5_S_pZxmPAFyY9P59uL9ggtNTJq5bud" };128 const q = { contents:"動画", id:"1NMIkUvyFwJUqHLQaIu4jWbb5AX5HeqIs" };129 const r = { contents:"", id:"" };130 const s = { contents:"", id:"" };131 const t = { contents:"", id:"" };132 const u = { contents:"", id:"" };133 const v = { contents:"", id:"" };134 const w = { contents:"", id:"" };135 const x = { contents:"", id:"" };136 const y = { contents:"", id:"" };137 const z = { contents:"", id:"" };138 // ファイル内容と保存先フォルダIDを格納する配列139 const contentsIds = [ a, b, c, d, e, f, g, h, i, j, k,l, m, n, o, p, q,140 r, s, t, u, v, w, x, y, z ];141 // アップロードファイル有無 判定142 const uploadFileExists = uploadFileUrl !== "";143 // それぞれ処理を実行144 class Obj {145 constructor() {};146 // ========== [ メソッド ] アップロードファイル・キーワードファイル名を変更 ========== //147 GetFileData() {148 console.log("【GetFileData 実行!】");149 // 変数の定義・初期化150 let id; // アップロードID151 let uploadFile; // アップロードファイル152 let upLoadName; // アップロードされたファイル名を取得(名前有)153 let upLoadNames = []; // 配列 アップロードされたファイル名154 let upLoadUrls = []; // 配列 アップロードされたファイルURL155 console.log("uploadFileExists(アップロードファイルの存在判定):" + uploadFileExists); // ログ確認用156 // アップロードファイルが存在する場合に実行157 if ( uploadFileExists ) {158 const multiple = uploadFileUrl.indexOf(", ") !== -1; // アップロードファイルが複数あるか判定159 // アップロードファイルのURLを配列で取得160 if ( multiple ) {161 console.log("アップロードファイルは複数です!"); // ログ確認用 162 upLoadUrls = uploadFileUrl.split(', '); // 複数ファイルの場合163 } else {164 console.log("アップロードファイルは1つです!"); // ログ確認用165 upLoadUrls = [ uploadFileUrl ]; // 1ファイルのみの場合166 }167 // アップロードファイル名を取得、配列に追加168 upLoadUrls.forEach( el => {169 id = el.split('=')[1] // 取得したアップロードファイルのurlからID部分のみ抽出170 uploadFile = DriveApp.getFileById(id); // IDよりファイルを取得171 upLoadName = uploadFile.getName(); // アップロードされたファイル名を取得(名前有)172 upLoadNames.push(upLoadName); // アップロードされたファイル名(名前有)を配列に追加173 })174 }175 console.log("upLoadNames(アップロードファイル名):" + upLoadNames); // ログ確認用176 // オブジェクトに追加177 this.upLoadUrls = upLoadUrls; // アップロードファイルURL(生データ)178 this.upLoadNames = upLoadNames; // アップロードファイル名(生データ)179 }; // GetFileData()_END180 // ========== [ メソッド ] 指定フォルダにアップロードファイルのコピーを追加 ========== //181 FileMove() {182 console.log("【FileMove 実行!】");183 184 // 変数の定義・初期化185 let copyId; // コピーファイルのID186 let fileName; // コピー元のファイル名187 let fileName0, fileName1; // コピー元のファイル名(分割)188 let fileUrl; // コピーファイルURL189 let fileRename; // 名前が付けられる前の元々のファイル名190 let keywordName; // キーワードファイルのファイル名191 let fileNames = []; // 配列 [コピー元のファイル名]192 let fileUrls = []; // 配列 [コピーファイルURL]193 let fileRenames = []; // 名前が付けられる前の元々のファイル名の配列194 let keywordNames = []; // 配列 [キーワードファイルのファイル名]195 196 let folder = DriveApp.getFolderById(upfolder); // コピー元ファイルのフォルダ197 let files = folder.getFiles(); // コピー元ファイル;198 199 // 登録先フォルダ名と回答フォームの内容が一致したフォルダIDを[copyId]に格納する。200 contentsIds.forEach( el => {201 if ( fileContents === el.contents ) copyId = el.id;202 })203 // アップロードファイル登録あり、指定フォルダ内にファイルが存在しない場合204 for ( let i = 0; i < 50; i++ ) {205 if ( uploadFileExists && !files.hasNext() ) {206 console.log("フォルダ内にファイルが存在しませんでした!");207 SleepTimer(upfolder);208 }209 };210 // アップロード関連のファイルが存在した場合、コピーして指定フォルダに保存(URLを取得)211 while(files.hasNext()) {212 console.log();213 let file = files.next(); // ファイルを取得214 fileName = file.getName(); // ファイル名を取得215 fileName0 = fileName.split(' - ')[0]; // アップロードファイル名(名前無 ・ 拡張子無)216 fileName1 = fileName.split(' - ')[1]; // アップロードファイルの登録者名以降の文字列を抽出217 // 登録者名を削除したファイル名を取得218 if ( fileName.indexOf(".") !== -1 ) {219 const extension = fileName1.split('.')[1]; // 拡張子を抽出220 fileRename = `${fileName0}.${extension}`; // ファイルに拡張子がある場合221 } else {222 fileRename = fileName0; // ファイルに拡張子がない場合223 }224 keywordName = `${fileName0}_キーワード.pdf`; // キーワードファイル名225 const fileNum = this.upLoadNames.indexOf(fileName); // ファイル名と一致した配列番号226 const nameJudge = ( fileNum !== -1 ); // ファイル名の有無判定227 // ログ確認用228 console.log("fileName(ファイル名 名前有・拡張子含):" + fileName);229 console.log("fileName0(ファイル名 名前無・拡張子無):" + fileName0);230 console.log("fileName1(ファイル名 名前のみ・拡張子含):" + fileName1);231 console.log("fileRename(登録者名を削除したファイル名):" + fileRename);232 console.log("keywordName(キーワードファイル名):" + keywordName);233 console.log("fileNum(アップロードファイルの格納された配列と取得したファイル名が一致した配列番号):" + fileNum);234 console.log("upLoadNames(アップロードファイル名):" + this.upLoadNames);235 console.log("nameJudge(ファイル名一致判定):" + nameJudge);236 237 // ファイル名が一致したら実行238 if ( nameJudge ) {239 console.log("ファイル名が一致しました!");240 const copyFolder = DriveApp.getFolderById(copyId); // コピーファイルの保存先フォルダID241 const originalFile = DriveApp.getFilesByName(fileName).next(); // コピー元のオブジェクトを取得242 const newFile = originalFile.makeCopy(fileRename, copyFolder); // 指定したフォルダにファイルをコピー243 fileUrl = newFile.getUrl(); // ファイルのURLを取得244 // 配列に追加245 fileNames.push(fileName); // ファイル名(元データ)を配列に追加246 fileRenames.push(fileRename); // ファイル名(コピーデータ)を配列に追加247 fileUrls.push(fileUrl); // ファイルURL(コピーデータ)を配列に追加248 keywordNames.push(keywordName); // キーワードファイル名を配列に追加249 } else {250 console.log("ファイル名が一致しませんでした!");251 }252 }253 // ログ確認用254 console.log("fileNames(元ファイル名の配列):" + fileNames);255 console.log("fileRenames(コピーファイル名の配列):" + fileRenames);256 console.log("fileUrls(コピーファイルURLの配列):" + fileUrls);257 console.log("keywordNames(キーワードファイル名の配列):" + keywordNames);258 // オブジェクトに追加 259 this.fileNames = fileNames; // ファイル名(元データ)260 this.fileRenames = fileRenames; // ファイル名(コピーデータ)261 this.fileUrls = fileUrls; // ファイルURL(コピーデータ)262 this.keywordNames = keywordNames; // キーワードファイル名263 }; // FileMove()_END264 // ========== [ メソッド ] フォーム回答をキーワードファイル(スプレットシート)に書込 ========== //265 266 WhiteForm() {267 console.log("【WhiteForm 実行!】");268 269 // 変数の定義・初期化270 const datas = getDatas; // フォームの取得データ配列getDatasを格納271 const setSubDatas = dataTitle; // キーワードファイルに記載するデータのタイトル(A列)272 const notDatas = getNotDatas; // キーワードファイルに記載不要なデータ273 let setDatas = []; // キーワードファイルに書き込むデータ(B列)274 // [getDatas] と [notDatas] 内のデータを比較し、重複していないデータを [setDatas] に追加275 datas.concat(notDatas).forEach( data => {276 if ( datas.includes(data) && !notDatas.includes(data)) setDatas.push(data);277 });278 // ログ確認用279 console.log("datas(取得データ):" + datas);280 console.log("setSubDatas(書込補助データ):" + setSubDatas);281 console.log("setDatas(書込データ):" + setDatas);282 // キーワード説明文を書込 (スプレットシートのA列)283 let num = 1; // 書込み行(初期設定)284 // 配列[setSubDatas]に入っている説明文を書込285 setSubDatas.forEach( setSubData => {286 keyForm.getRange(`A${num}`).setValue(setSubData); // setSubDataを書込む 287 num++; // 改行288 });289 // キーワードを書込 (スプレットシートのB列) 290 num = 1; // 書込み行(初期設定)291 // 配列[setDatas]に入っているキーワードを書込292 setDatas.forEach( setData => {293 if ( setData != "" ) {294 if ( setData === littleInfoTitle ) num += 2; // setDataが 豆知識タイトルだった場合は改行295 if ( setData === littleInfoConts ) num++; // setDataが 豆知識・プチ情報内容だった場合は改行296 }297 keyForm.getRange(`B${num}`).setValue(setData); // setDataを書込む298 if ( setData !== "" ) num++; // setDataの中身が空でない場合は改行299 });300 // ファイル名・URLを書込301 if ( uploadFileUrl !== "" ) {302 let i = 0;303 this.fileUrls.forEach( fileUrl => {304 keyForm.getRange(`B${num}`).setValue(this.fileRenames[i]);305 num++; 306 keyForm.getRange(`B${num}`).setValue(fileUrl);307 num++;308 i++;309 })310 console.log("アップロードファイル名とURLを書込みました!");311 } else {312 console.log("アップロードファイルが見つかりませんでした!");313 }314 // 問い合わせ・要望の項目に回答があったら、問い合わせ・要望のスプレットシートに内容を書込315 if ( requests !== "" ) {316 console.log("問い合わせ・要望あり!");317 // スプレットシート情報318 const ssForm = SpreadsheetApp.openById('1gctMJ1s7HJ51XQojAJDITSD9cab9hSB8f4CHBlYo94g'); // スプレットシート情報(書込み先)319 const reqForm = ssForm.getSheetByName('問い合わせ・要望'); // スプレットシート(問い合わせ・要望)情報320 const lastRow = reqForm.getLastRow(); // スプレットシートの最終行目を取得する。321 322 // スプレットシートに記入323 const reqA = reqForm.getRange(lastRow+1, 1).setValue(timeStamp); // タイムスタンプ324 const reqB = reqForm.getRange(lastRow+1, 2).setValue(mailAddress); // メールアドレス325 const reqC = reqForm.getRange(lastRow+1, 3).setValue(requests); // 問い合わせ・要望 326 // オブジェクトに追加327 this.timeStamp = timeStamp; // 日時328 this.mailAddress = mailAddress; // メールアドレス329 this.requests = requests; // 問い合わせ内容330 } else {331 console.log("問い合わせ・要望なし!");332 }333 }; // WhiteForm()_END334 // ========== [ メソッド ] キーワードフォーム(スプレットシート)をPDF変換して指定フォルダに追加 ========== //335 336 PdfCreate() {337 console.log("【PdfCreate 実行!】");338 339 // キーワードフォーム(スプレットシート)をpdf変換340 SpreadsheetApp.flush();341 const sheetId = keyForm.getSheetId(); // スプレットシートのIDを取得342 const url = 'https://docs.google.com/spreadsheets/d/1zzq1OQxTZJOFo2eFaTGkNLyipGWDjl9i-LijcgIU3Hw/export?exportFormat=pdf&gid=SID'.replace('SID', sheetId);343 const token = ScriptApp.getOAuthToken();344 const response = UrlFetchApp.fetch(url, {345 headers:{346 'Authorization': 'Bearer '+token347 }348 });349 350 // 変数の初期化・定義351 let fileName; // キーワードファイルのファイル名352 let folderId; // アップロードファイルの保存先フォルダのID353 let folderIdKey = '14YTMjpzTq77UDN-bPT_zAGELWJudJuli'; // キーワードファイルの保存先フォルダID354 let keywordUrls = []; // キーワードファイルURLの配列355 356 /* ファイル内容が豆知識・プチ情報(アップロードファイルなし)の場合 //357 // 回答フォームからファイルのタイトルを作成・内容を書込。 //358 // 豆知識・プチ情報のフォルダに保存 */359 if ( notUploadFile === 'なし' ) {360 fileName = [`${littleInfoTitle}.pdf`]; // ファイル名を指定361 // ログ確認用362 console.log("豆知識・プチ情報のアップロードファイルはありません!");363 console.log(`ファイル名は、${littleInfoTitle}.pdf`);364 365 // 保存先フォルダと回答フォームの一致したフォルダIDを [folderId] に格納366 contentsIds.forEach( el => {367 if ( fileContents === el.contents ) {368 folderId = el.id;369 console.log(`ファイルの保存先のフォルダ名は、${el.contents}です!`);370 }371 });372 373 // キーワードファイルを指定フォルダに作成374 } else {375 folderId = folderIdKey; // 指定フォルダのIDを取得376 fileName = this.keywordNames;377 }378 // キーワードファイルを作成379 fileName.forEach( el => {380 const blob = response.getBlob().setName(el); // pdfの名前381 const folder = DriveApp.getFolderById(folderId); // pdfの保存先フォルダを指定382 const requestForm = folder.createFile(blob); // フォルダ内にpdfを作成383 const keywordUrl = requestForm.getUrl(); // キーワードファイルURLを取得384 console.log(`キーワードフォルダ内に${el}を追加しました!`); // ログ確認用385 keywordUrls.push(keywordUrl); // 配列に追加386 });387 console.log("keywordUrls(キーワードファイルURLの配列):" + keywordUrls); // ログ確認用388 // オブジェクトに追加389 this.keywordUrls = keywordUrls;390 }; // PdfCreate()_END391 // ========== [ メソッド ] キーワードファイル(スプレットシート)の内容をクリア ========== //392 SSRemove() {393 console.log("【SSRemove 実行!】");394 395 const keyFormLastRow = keyForm.getLastRow(); // スプレットシート(キーワード書込先)の最終行目を取得396 keyForm.getRange(1, 1, keyFormLastRow, 2).clearContent(); // 指定したセルのコンテンツを削除397 }; // SSRemove()_END398 // ========== [ メソッド ] アップロードした元ファイルをアップロードフォルダ内から削除 ========== //399 FileTrash() {400 console.log("【FileTrash 実行!】");401 const delFolder = DriveApp.getFolderById(upfolder) // 削除したいファイルのフォルダ402 const delfiles = delFolder.getFiles(); // 削除したいファイル403 404 // 指定したフォルダ内にアップロード関連のファイルがあれば削除405 while(delfiles.hasNext()) {406 const file = delfiles.next(); // ファイルを取得407 const fileName = file.getName(); // ファイル名を取得408 const nameJudge = this.upLoadNames.indexOf(fileName) !== -1; // ファイル名の有無判定409 // ログ確認用410 console.log("フォルダ内にファイルを確認。1つ取り出します!");411 console.log(`取り出したファイルは、${fileName}です!`)412 // ファイル名が一致したら削除 413 if ( nameJudge ) {414 file.setTrashed(true);415 console.log(`ファイル名が一致したため、${fileName}を削除しました!`); // ログ確認用416 } else {417 console.log("アップロードファイルとファイル名が一致しませんでした!"); // ログ確認用418 }419 }420 }; // FileTrash()_END421 // ========== [ メソッド ] フォーム回答者にファイル保存完了通知を送信 ========== //422 SendMail() {423 424 console.log("【SendMail 実行!】");425 426 // アドレスが見つからない場合の送信先427 const errAddress = 'k.kamikura@isowa.co.jp';428 429 // 問合せ・要望に回答があった場合の送信先430 const contactAddress = 'k.kamikura@isowa.co.jp';431 432 // isowaビトのアドレスが記載されたスプレットシートを取得433 const ssId = SpreadsheetApp.openById('1r9Ok3NF0_lwNa2fzCcpttteEim_Kb79xOBLB8GsJjnA');434 const addressSS = ssId.getSheetByName('メールアドレス一覧(ISOWA)');435 const arrData = addressSS.getDataRange().getValues();436 const addressUrl = 'https://docs.google.com/spreadsheets/d/1r9Ok3NF0_lwNa2fzCcpttteEim_Kb79xOBLB8GsJjnA/edit#gid=0';437 // アドレスリストの配列の行と列を入替438 const _ = Underscore.load(); // アンダースコアを使用439 const arrTrans = _.zip.apply(_, arrData); // 配列の行と列を入替440 const resNum = arrTrans[1].indexOf(registPerson); // 回答者名と一致した行番号(開始No:0)441 // ファイルURL442 let setKeywordUrl, setUrls;443 if ( this.keywordUrl !== undefined ) setKeywordUrl = this.keywordUrl;444 if ( this.fileUrls !== undefined ) setUrls = this.fileUrls;445 // 問い合わせ・要望フォームのURL446 const requestsUrl = "https://forms.gle/GkYxu4ENEmq2RzvX9";447 // メール送信用448 let reply; // メール送信先449 let title; // メールタイトル450 let content; // メール本文451 // アップロードファイル名とURLの文言452 let setNameUrl = SetNamesUrls(this.fileRenames) 453 // 登録者(C)にアップロード完了通知メールを送信454 if ( resNum !== -1 ) {455 console.log("登録者にアップロード完了通知を送信!");456 reply = arrTrans[2][resNum];457 title = '【iサーチ】ファイルのアップロード完了通知';458 content = '\459 ${registPerson}さん\n\460 \n\461 いつもお仕事お疲れ様です。\n\462 iサーチに貴重な資料の登録をありがとうございます。\n\463 キーワードファイル:\n\464 ${setKeywordUrl}\n\n\465 アップロードファイル:\n\466 ${setNameUrl}\n\467 \n\468 おかげ様でISOWAビトが安心して業務を行う事ができます。\n\469 \n\470 改善・不明点等ありましたら、お気軽に問い合わせフォーム\n\471 よりご連絡下さい。\n\472 ${requestsUrl}'473 .replace('${registPerson}', registPerson)474 .replace('${setKeywordUrl}', setKeywordUrl)475 .replace('${setNameUrl}', setNameUrl)476 .replace('${requestsUrl}', requestsUrl);477 // メールを送信478 MailContents( reply, title, content );479 // 登録者のアドレスが不明な場合、errAddressにメール送信480 } else {481 console.log("登録者が見つかりませんでした。報告メールを送信!");482 reply = errAddress;483 title = '【iサーチ】アップロードファイル登録者のアドレスが見つかりませんでした。';484 content = '\485 iサーチ運営チームのみなさま\n\486 \n\487 いつもお仕事お疲れ様です。\n\488 iサーチにファイルをアップロードした${registPerson}さんの\n\489 アドレスが見つかりませんでした。\n\490 キーワードファイル:\n\491 ${setKeywordUrl}\n\n\492 アップロードファイル:\n\493 ${setNameUrl}\n\494 アドレスリスト:${addressUrl}\n\495 \n\496 登録者名とアドレスリスト(スプレットシート)を\n\497 確認お願いします。'498 .replace('${registPerson}', registPerson)499 .replace('${setNameUrl}', setNameUrl)500 .replace('${setKeywordUrl}', setKeywordUrl)501 .replace('${addressUrl}', addressUrl);502 503 // メールを送信504 MailContents( reply, title, content );505 };506 507 508 // 問合せ・要望に回答があった場合、メールを送信509 if ( requests !== "" ) { 510 console.log("問合せ・要望があったので通知メールを送信!");511 reply = contactAddress;512 title = '【iサーチ】フォームから問い合わせ・要望がありました。';513 content = '\514 iサーチ運営チームのみなさま\n\515 \n\516 いつもお仕事お疲れ様です。\n\517 iサーチにファイルをアップロードした${registPerson}さんから\n\518 以下の問い合わせ・要望がありました。\n\519 \n\520 ${requests}\n\521 よろしくお願いします。\n\522 '523 .replace('${requests}', requests)524 .replace('${registPerson}', registPerson)525 526 // メールを送信527 MailContents( reply, title, content );528 }529 530 // [関数]アップロードファイル名・URLの文言531 function SetNamesUrls(fileRenames) {532 // 変数の定義・初期化533 let nameAndUrl;534 let i = 0;535 536 // ファイル名・URLを書込537 setUrls.forEach( setUrl => {538 const name = fileRenames[i]; 539 const url = setUrl;540 // 初回実行541 if ( i === 0) {542 nameAndUrl = `${name}\n\  ${url}\n\543 `544 // 2回目以降545 } else {546 nameAndUrl += ` ${name}\n\  ${url}\n\547 `548 }549 i++; // 次のファイルを取得550 })551 return nameAndUrl; // setNameUrlへ返却552 }; // SetNamesUrls()_END553 // [関数]メール送信554 function MailContents( reply, title, content ) {555 556 console.log("MailContents 実行!");557 558 // メールの送信情報559 const to = reply; // 送信先560 const subject = title; // タイトル561 const body = content; // 本文562 const options = { name: 'iサーチ', // 送信元の名前563 bcc: 'k.kamikura@isowa.co.jp' // bcc 送信先564 }565 // 送信実行 566 GmailApp.sendEmail(567 to,568 subject,569 body,570 options571 )572 573 }; // MailContents()_END574 }; // SendMail()_END575 }; // Class Obj()_END576 // === オブジェクトを作成(アップロードファイル・キーワードファイルを指定フォルダに作成) === //577 const objArr = []; // 配列を初期化578 const obj = new Obj(); // オブジェクト{obj}作成579 obj.GetFileData(); // アップロードファイル・キーワードファイル名を変更580 obj.FileMove(); // 指定フォルダにアップロードファイルのコピーを追加581 obj.WhiteForm(); // フォーム回答をキーワードファイル(スプレットシート)に書込582 obj.PdfCreate(); // キーワードファイル(スプレットシート)をPDF変換して指定フォルダに追加583 obj.SSRemove(); // キーワードファイル(スプレットシート)の内容をクリア584 obj.FileTrash(); // アップロードした元ファイルをアップロードフォルダ内から削除585 obj.SendMail(); // フォーム回答者にファイル保存の完了通知を送信586 objArr.push(obj); // 配列[objArr]にオブジェクトを追加587 console.log(objArr); // ログ確認用588}; // Main()_END589// 指定フォルダ内にファイルが存在しない場合は、5秒間スリープ *** 対策ソフト_20210219 ***590function SleepTimer(upLoadFolId) {591 let now = Utilities.formatDate(new Date(), "Asia/Tokyo", "HH:mm:ss"); // 現在の時間592 console.log("now(現在時間):" + now); // 現在時間の表示593 folder = DriveApp.getFolderById(upLoadFolId); // コピー元ファイルのフォルダ594 files = folder.getFiles(); // コピー元ファイル595 let staySecond = 5; // 遅延時間の設定(秒)596 Utilities.sleep(staySecond * 1000); // 遅延実行597};598/* 599・ アップロードファイルのファイル名取得(拡張子無し) >>> 完了600・ キーワードファイル(スプレットシート)にキーワードを書込 >>> 完了 601・ 〃 をファイル名_キーワードにrename・pdf変換し、指定フォルダに保存 >>> 完了602・ アップロードファイルを指定のフォルダに移動 >>> 完了603・ アップロードファイルのURLをスプレットシートに書込 >>> 完了604・ キーワードファイル(スプレットシート)の内容をクリア >>> 完了605・ アップロードファイルを削除 >>> 完了606・ 配列[keyword], [getData]の内容確認 >>> 完了607・ 取得した情報が変更した場合でもすぐに修正できる様にする。 >>> 完了608・ 同時実行時の処理対策 >>> 完了609・ アップロードファイル名を変更(登録者名を削除) >>> 完了610・ メールを送信 >>> 完了611・ エラーとなった場合にエラー内容をメールで通知。 >>> 完了612・ 登録者名にスペースがあった場合は、スペースを削除して格納する。 >>> 完了613・ アップロードファイルを複数登録する場合に対応する。 >>> 完了614・ アップロードファイルがGOOGLEドライブのフォルダに保存されるまで615  タイムラグがある。~約40秒616 >>> フォルダ内にファイルが無かった場合、5秒間待って再度ファイル617    の存在確認を行う処理を追加。 >>> 完了 ※1618・ 上記の存在確認の処理を行う条件にアップロードファイル登録があった場合を追加。 >>> 完了619・ 全てのスクリプト実行後に何を行い何が行われなかったのかわかるように >>> 完了620  ログに残す様にする。621メール通知ソフトについて622・ 問い合わせ・要望のリンクを貼った方が親切。 >>> 完了623※1 5秒間遅延させるループ処理を抜けてしまう条件624  ① 前回のアップロード処理(スクリプトの実行)が完了していなく、625    フォルダ内に前回のファイルが残っていた場合。626   Googleフォームから送信した時点でアップロードファイルは627    フォルダに保存されてしまうため、前回のファイルを残さない628    様にする回避方法はない。629  ② 複数のファイルをアップロードした場合。全て同時に保存される630    わけでは無いと1つ目のファイルが保存された時点でアンプロード631    処理(スクリプトの実行)は開始してしまう。632    全てのファイルが保存される時間を稼ぐために、ファイル1つの633    処理時間を伸ばす。(その間に2つ目以降のファイルが保存される634    のを待つ)635  ③ 前回のアップロード処理(スクリプトの実行)が完了した後、何ら636    かの要因でフォルダ内にファイルが残ってしまった場合。637    スクリプト(FileTrash)で何らかの対策を行う。...

Full Screen

Full Screen

database.test.js

Source:database.test.js Github

copy

Full Screen

...54 });55});56describe('getAnswers method', () => {57 test('Call getAnswers with correct ID', async () => {58 expect(await db.getAnswers(1, 1)).toStrictEqual([{59 id: 1,60 score: 0,61 text: 'leave the smoking area then..',62 user_id: 1,63 currentUserHasVoted: false,64 }]);65 });66 test('Call getAnswers with incorrect ID', async () => {67 expect(await db.getAnswers(-1, 1)).toStrictEqual([]);68 });69});70describe('validQuestionId method', () => {71 test('Call validQuestionId with correct ID', async () => {72 expect(await db.validQuestionId(1)).toBe(true);73 });74 test('Call validQuestionId with incorrect ID', async () => {75 expect(await db.validQuestionId(-1)).toBe(false);76 });77});78describe('insertUser method', () => {79 test('Call insertUser with already taken details', async () => {80 expect(await db.insertUser(81 'test-email@test.ac.uk',82 '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8',83 )).toBe(-1);84 });85 test('Call insertUser with new details', async () => {86 expect(await db.insertUser(87 'Sams-email@test.ac.uk',88 '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8',89 )).toEqual(expect.any(Number));90 });91});92describe('insertQuestion method', () => {93 test('Call insertQuestion with new details', async () => {94 expect(await db.insertQuestion(95 1,96 'Test question, please ignore',97 'Test Question - Working',98 )).toEqual(expect.any(Number));99 });100 // test('Call insertQuestion with incorrect details', async () => {101 // expect(await db.insertQuestion(102 // 'one',103 // 2,104 // 3,105 // )).mockReturnValue(new Error('error: column "one" does not exist'));106 // });107});108describe('insertAnswer method', () => {109 test('Call insertAnswer to insert new answer', async () => {110 expect(await db.insertAnswer(2,111 2,112 'Have you tried turning it off and on again?'));113 });114 test('Call getAnswers with newly inserted answer', async () => {115 expect(await db.getAnswers(2, 2)).not.toBe([]);116 });117});118describe('voteOnAnswer method', () => {119 test('Call voteOnAnswer with an upvote', async () => {120 expect(await db.voteOnAnswer(1, 1));121 });122 test('Call getAnswers to check new score', async () => {123 expect(await db.getAnswers(1, 1)).toStrictEqual([{124 id: 1,125 score: 1,126 text: 'leave the smoking area then..',127 user_id: 1,128 currentUserHasVoted: true,129 }]);130 });131 test('Call voteOnAnswer with a downvote', async () => {132 expect(await db.voteOnAnswer(1, 1));133 });134 test('Call getAnswers to check new score', async () => {135 expect(await db.getAnswers(1, 1)).toStrictEqual([{136 id: 1,137 score: 0,138 text: 'leave the smoking area then..',139 user_id: 1,140 currentUserHasVoted: false,141 }]);142 });143});144describe('searchQuestions method', () => {145 test('Call searchQuestions without a value. Show all items, newest first', async () => {146 expect(await db.searchQuestions('')).not.toBe([]);147 });148 test('Call searchQuestions with criteria in order of similarity', async () => {149 expect(await db.searchQuestions("I need air! I can''t breath!"));...

Full Screen

Full Screen

survey.js

Source:survey.js Github

copy

Full Screen

...116 };117 this.getAnswers = function() {118 var answers = {};119 for (var i = 0; i < questions.length; i++) {120 answers[questions[i].title] = questions[i].getAnswers();121 }122 return answers;123 };124}125function Survey(title, sections) {126 this.toHTML = function() {127 var result = "<h1>" + title + "</h1>\n";128 for (var i = 0; i < sections.length; i++) {129 result += sections[i].toHTML();130 }131 result += '<input id="submit" type="button" value="SUBMIT">\n';132 return result;133 };134 this.getAnswers = function() {135 var answers = {};136 for (let i = 0; i < sections.length; i++) {137 answers[sections[i].title] = sections[i].getAnswers();138 }139 return answers;140 }; 141}142function submit() {143 console.log("Answers Submitted");144}145window.addEventListener("load", function() {146 var survey = createSurveyQuestions();147 function submit() {148 console.log("Answers Submitted");149 console.log(survey.getAnswers());150 }151 document.getElementById("survey").innerHTML = survey.toHTML();152 document.getElementById("submit").addEventListener("click", submit);...

Full Screen

Full Screen

script.js

Source:script.js Github

copy

Full Screen

1// accordion menu2// Script waarmee de afzonderlijke vragen worden geopend door erop te klikken345{6 window.addEventListener("pageshow", faqMenu);7 const getQuestions = document.getElementsByClassName('question');8 const getAnswers = document.getElementsByClassName('answer');9 const getImages = document.getElementsByTagName('img');10 const arrowImages = [];11 const getAnswersHeight = [];1213 function faqMenu() {14 // verberg alle vragen15 for (let i = 0; i < getAnswers.length; i++) {16 getAnswersHeight.push(getAnswers[i].scrollHeight);17 getAnswers[i].style.visibility = "hidden";18 getAnswers[i].style.height = "0px";19 getAnswers[i].style.opacity = 0;20 getAnswers[i].style.padding = "0px 0px 0px 0px"21 }22 console.log(document.getElementsByClassName('box')[0]);232425 // vind alle arrow-images op de pagina26 for (let i = 0; i < getImages.length; i++) {27 if (getImages[i].alt === "arrow") {28 arrowImages.push(getImages[i]);29 console.log(arrowImages);30 }31 }32 //als mouseover vragen maak vraag rood en voeg muishandje toe en verplaats doosje33 for (let i = 0; i < getQuestions.length; i++) {34 getQuestions[i].onmouseover = function () { mouseOver() };35 function mouseOver() {36 getQuestions[i].style.color = "hsl(14, 88%, 65%)";37 getQuestions[i].style.cursor = "pointer";38 document.getElementsByClassName('box')[0].style.right = "130px";39 document.getElementsByClassName('box')[0].style.transition = "all 0.3s";40 // als vraag = open geen rode kleur of pointer41 if (getQuestions[i].style.fontWeight === "700") {42 getQuestions[i].style.color = "hsl(237, 12%, 33%)";43 getQuestions[i].style.cursor = "auto";44 }45 }46 // als muishandje naar volgende vraag gaat --> andere vragen zwart47 getQuestions[i].onmouseout = function () { mouseOut() };48 function mouseOut() {49 getQuestions[i].style.color = "hsl(237, 12%, 33%)";50 document.getElementsByClassName('box')[0].style.right = "90px";51 }52 //als ik op de vraag klik maak antwoord zichtbaar53 getQuestions[i].onmousedown = function () { mouseClick(); }54 function mouseClick() {55 //Sluit alle vragen waar al op geklikt is56 for (let i = 0; i < getQuestions.length; i++) {57 if (getAnswers[i].style.height !== "0px") {58 getAnswers[i].style.height = "0px";59 getAnswers[i].style.padding = "0px 0px 0px 0px";60 getAnswers[i].style.visibility = "hidden";61 getQuestions[i].style.fontWeight = "400";62 getAnswers[i].style.opacity = 0;63 arrowImages[i].style.transform = "rotate(0deg)";64 getQuestions[i].style.color = "hsl(237, 12%, 33%)";6566 }67 }68 //open vraag en maak deze vet en draai het pijltje69 getQuestions[i].style.color = "hsl(238, 29%, 16%)";70 getQuestions[i].style.fontWeight = "700";71 arrowImages[i].style.transform = "rotate(180deg)";72 arrowImages[i].style.transition = "all 0.3s"73 getAnswers[i].style.visibility = "visible";74 getAnswers[i].style.height = getAnswersHeight[i] + 'px';75 getAnswers[i].style.padding = "15px 30px 0px 0px";76 getAnswers[i].style.opacity = 1;77 getAnswers[i].style.transition = "opacity 1.2s, height 0.3s, padding 0.2s";78 }79 }80 }81}82// console.log(document.getElementsByClassName('box')[0].offsetLeft);83// console.log(getAnswers[i].style.visibility);84// console.log(document.getElementsByClassName('box')[0].offsetLeft);85// console.log(getAnswers[i].style.visibility);86 ...

Full Screen

Full Screen

Session.js

Source:Session.js Github

copy

Full Screen

1import React, {useState, Fragment} from 'react';2import '../../App.css';3import Single from "./QuestionType/Single";4import Text from "./QuestionType/Text";5import Multy from "./QuestionType/Multy";6import {Button} from '@material-ui/core'7import toast from "../../utils/toast";8import {Redirect} from 'react-router-dom';9export default function Session({initialData, id}) {10 const [getAnswers, setAnswers] = useState([]);11 const [getRedirect, setRedirect] = useState();12 if(getRedirect){13 return <Redirect push to={getRedirect}/>14 }15 const sendData = () =>{16 fetch(`http://${process.env.REACT_APP_SERVER_HOST}:8000/question_answers`, {17 method: 'POST',18 headers: {19 'Content-Type': 'application/json',20 'x-access-token': localStorage.getItem('auth_token')21 },22 body: JSON.stringify(getAnswers)23 })24 .then(async (res) => {25 if(res.status != 200){26 res = await res.json();27 toast.error(res.message)28 }else{29 res = await res.json();30 toast.success(res.message)31 setRedirect(`/istrazivanja`);32 }33 })34 }35 const renderQuestion = () =>{36 if(!initialData || !initialData.length){37 return <div>Test</div>38 }else{39 return initialData.map((question, index) =>{40 switch (question.type) {41 case 'SINGLE':42 return <Single43 getAnswers={getAnswers}44 setAnswers={setAnswers}45 key={"_" + index}46 index={index + 1}47 initialData={question}/>48 case 'TEXT':49 return <Text50 getAnswers={getAnswers}51 setAnswers={setAnswers}52 key={"_" + index}53 index={index + 1}54 initialData={question}/>55 case 'MULTY':56 return <Multy57 getAnswers={getAnswers}58 setAnswers={setAnswers}59 key={"_" + index}60 index={index + 1}61 initialData={question}/>62 }63 })64 }65 }66 return (67 <>68 {renderQuestion()}69 <Button70 variant="contained"71 color="primary"72 onClick={() =>{73 sendData()74 }}75 >76 Potvrdi77 </Button>78 </>79 )...

Full Screen

Full Screen

sequencetest.js

Source:sequencetest.js Github

copy

Full Screen

...20 it('should return 4', function () {21 assert.deepEqual(sequence.getAnswer(4), 4)22 })23 })24 describe('#getAnswers()', function () {25 it('should return first 10 integer numbers', function () {26 assert.deepEqual(sequence.getAnswers(4), [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])27 })28 })29 })30 describe('Square', function () {31 const sequence = new Sequence([], 'square')32 describe('#getAnswer()', function () {33 it('should return 5', function () {34 assert.deepEqual(sequence.getAnswer(4), 16)35 })36 })37 describe('#getAnswers()', function () {38 it('should return first 10 square numbers', function () {39 assert.deepEqual(sequence.getAnswers(4), [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ])40 })41 })42 })43 describe('Cubic', function () {44 const sequence = new Sequence([], 'cubic')45 describe('#getAnswer()', function () {46 it('should return 5', function () {47 assert.deepEqual(sequence.getAnswer(4), 64)48 })49 })50 describe('#getAnswers()', function () {51 it('should return first 10 cubic numbers', function () {52 assert.deepEqual(sequence.getAnswers(4), [ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729 ])53 })54 })55 })56 describe('Prime', function () {57 const sequence = new Sequence([], 'prime')58 describe('#getAnswer()', function () {59 it('should return 11', function () {60 assert.deepEqual(sequence.getAnswer(4), 11)61 })62 })63 describe('#getAnswers()', function () {64 it('should return first 10 prime numbers', function () {65 assert.deepEqual(sequence.getAnswers(4), [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ])66 })67 })68 })69 describe('Fibonacci', function () {70 const sequence = new Sequence([], 'fibonacci')71 describe('#getAnswer()', function () {72 it('should return 5', function () {73 assert.deepEqual(sequence.getAnswer(4), 5)74 })75 })76 describe('#getAnswers()', function () {77 it('should return first 10 fibonacci numbers', function () {78 assert.deepEqual(sequence.getAnswers(4), [ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ])79 })80 })81 })...

Full Screen

Full Screen

angular-answer-controller.js

Source:angular-answer-controller.js Github

copy

Full Screen

...5 $scope.post = postAndUser;6 },7 answer: function(newAnswer) {8 $scope.answer = {};9 $scope.getAnswers();10 },11 newAnswerError: function(err) {12 $scope.newAnswerErrors = '';13 $scope.newAnswerErrors = err;14 },15 getAnswers: function(answersCommentsAndUsers) {16 $scope.allAnswers = answersCommentsAndUsers;17 },18 upVote: function() {19 $scope.getAnswers();20 },21 downVote: function() {22 $scope.getAnswers();23 },24 comment: function(newComment) {25 // console.log($scope.allAnswers);26 for (var i = 0; i < $scope.allAnswers.length; i++) {27 $scope.allAnswers[i].newUserComment = {};28 if (i == $scope.allAnswers.length - 1) {29 $scope.getAnswers();30 }31 };32 },33 commentError: function(err) {34 $scope.newCommentErrors = '';35 $scope.newCommentErrors = err;36 },37 logout: function() {38 $location.url('/');39 },40 };41 // Get Post/Topic:42 $scope.getPost = function() {43 answerFactory.getPost($routeParams.id, cb.getPost);44 };45 // Get Post/Topic on partial load:46 $scope.getPost();47 // Create New Answer:48 $scope.newAnswer = function(post) {49 $scope.answerData = {50 description: $scope.answer.description,51 postID: post._id,52 };53 answerFactory.newAnswer($scope.answerData, cb.answer, cb.newAnswerError);54 };55 // Get All Answers:56 $scope.getAnswers = function() {57 answerFactory.getAnswers({postID: $routeParams.id}, cb.getAnswers);58 };59 // Get All Answers on page load:60 $scope.getAnswers();61 // Up Vote:62 $scope.upVote = function(answer) {63 answerFactory.upVote({id: answer._id}, cb.upVote)64 };65 // Down Vote:66 $scope.downVote = function(answer) {67 answerFactory.downVote({id: answer._id}, cb.downVote)68 };69 // Create a Comment:70 $scope.newComment = function(answer) {71 answer.newUserComment.answerID = answer._id;72 answerFactory.newComment(answer.newUserComment, cb.comment, cb.commentError);73 };74 // Dashboard Home Button:...

Full Screen

Full Screen

getAnswers.spec.js

Source:getAnswers.spec.js Github

copy

Full Screen

1import store from "@/store/";2describe("question/getAnswers getter", () => {3 beforeEach(() => {4 store.commit("question/SET_ANSWERS", require("./.fixtures/answers"));5 });6 it("Returns only root answers by default", () => {7 expect(store.getters["question/getAnswers"]()).toHaveLength(3);8 });9 it("Returns root answers if parent is null", () => {10 expect(store.getters["question/getAnswers"]({ parent: null })).toHaveLength(3);11 });12 it("Does not die when answers are empty", () => {13 store.commit("question/SET_ANSWERS", null);14 expect(store.getters["question/getAnswers"]()).toEqual([]);15 });16 it("Returns answer objects", () => {17 const answer = store.getters["question/getAnswers"]()[1];18 expect(answer).toMatchObject({19 slug: "0275ad47-6f33-4541-b5c6-4641dc6ea006",20 author: {21 first_name: "Петрович",22 last_name: "",23 },24 });25 });26 it("Returns answers with given parent", () => {27 expect(store.getters["question/getAnswers"]({ parent: "21ad3f0a-1c6f-4d8c-ab9e-e8ae49f78cdc" })).toHaveLength(2);28 });29 it("Returns no answers for not matching queries", () => {30 expect(store.getters["question/getAnswers"]({ parent: "88b04599-b184-4620-a588-7447a525d2db" })).toHaveLength(0);31 });32});33describe("question/getAnswers getter sorting", () => {34 beforeEach(() => {35 store.commit("question/SET_ANSWERS", require("./.fixtures/answers"));36 });37 it("Answers are sorted by created time ASC by default", () => {38 const answers = store.getters["question/getAnswers"]();39 expect(answers[0].slug).toEqual("d957725b-e485-4d31-bb7a-1c3bee9b6327");40 });41 it("Answers are sorted by created time ASC if asked", () => {42 store.commit("question/SET_ANSWER_SORTING_ORDER", "asc");43 const answers = store.getters["question/getAnswers"]();44 expect(answers[0].slug).toEqual("d957725b-e485-4d31-bb7a-1c3bee9b6327");45 });46 it("Answers are sorted by created time DESC if asked", () => {47 store.commit("question/SET_ANSWER_SORTING_ORDER", "desc");48 const answers = store.getters["question/getAnswers"]();49 expect(answers[2].slug).toEqual("d957725b-e485-4d31-bb7a-1c3bee9b6327");50 });...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = { desiredCapabilities: { browserName: 'chrome' } };3 .remote(options)4 .init()5 .getTitle().then(function(title) {6 console.log('Title was: ' + title);7 })8 .end();

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = { desiredCapabilities: { browserName: 'chrome' } };3var client = webdriverio.remote(options);4 .init()5 .getTitle().then(function(title) {6 console.log('Title was: ' + title);7 })8 .end();

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = { desiredCapabilities: { browserName: 'chrome' } };3var client = webdriverio.remote(options);4 .init()5 .getTitle().then(function(title) {6 console.log('Title was: ' + title);7 })8 .end();9module.exports = {

Full Screen

Using AI Code Generation

copy

Full Screen

1describe('webdriver.io page', () => {2 it('should have the right title', () => {3 const title = browser.getTitle();4 expect(title).toBe('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js');5 });6 it('should have the right title', () => {7 const title = browser.getTitle();8 expect(title).toBe('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js');9 });10});11* **Nikita Kulkarni** - *Initial work* - [Nikita Kulkarni](

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = { desiredCapabilities: { browserName: 'chrome' } };3 .remote(options)4 .init()5 .getTitle().then(function(title) {6 console.log('Title was: ' + title);7 })8 .end();

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2describe('Stackoverflow', function() {3 it('should return answers', function() {4 var options = {5 desiredCapabilities: {6 }7 };8 .remote(options)9 .init()10 .setValue('#search input[name="q"]', 'webdriverio')11 .click('#search input[type="submit"]')12 .getTitle().then(function(title) {13 console.log('Title was: ' + title);14 })15 .end();16 });17});

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriverio = require('webdriverio');2var options = { desiredCapabilities: { browserName: 'chrome' } };3var client = webdriverio.remote(options);4.init()5.getTitle().then(function(title) {6 console.log('Title was: ' + title);7})8.getTagName('body').then(function(tagName) {9 console.log('Tag name of body: ' + tagName);10})11.getTagName('input').then(function(tagName) {12 console.log('Tag name of input: ' + tagName);13})14.end();

Full Screen

WebdriverIO Tutorial

Wondering what could be a next-gen browser and mobile test automation framework that is also simple and concise? Yes, that’s right, it's WebdriverIO. Since the setup is very easy to follow compared to Selenium testing configuration, you can configure the features manually thereby being the center of attraction for automation testing. Therefore the testers adopt WedriverIO to fulfill their needs of browser testing.

Learn to run automation testing with WebdriverIO tutorial. Go from a beginner to a professional automation test expert with LambdaTest WebdriverIO tutorial.

Chapters

  1. Running Your First Automation Script - Learn the steps involved to execute your first Test Automation Script using WebdriverIO since the setup is very easy to follow and the features can be configured manually.

  2. Selenium Automation With WebdriverIO - Read more about automation testing with WebdriverIO and how it supports both browsers and mobile devices.

  3. Browser Commands For Selenium Testing - Understand more about the barriers faced while working on your Selenium Automation Scripts in WebdriverIO, the ‘browser’ object and how to use them?

  4. Handling Alerts & Overlay In Selenium - Learn different types of alerts faced during automation, how to handle these alerts and pops and also overlay modal in WebdriverIO.

  5. How To Use Selenium Locators? - Understand how Webdriver uses selenium locators in a most unique way since having to choose web elements very carefully for script execution is very important to get stable test results.

  6. Deep Selectors In Selenium WebdriverIO - The most popular automation testing framework that is extensively adopted by all the testers at a global level is WebdriverIO. Learn how you can use Deep Selectors in Selenium WebdriverIO.

  7. Handling Dropdown In Selenium - Learn more about handling dropdowns and how it's important while performing automated browser testing.

  8. Automated Monkey Testing with Selenium & WebdriverIO - Understand how you can leverage the amazing quality of WebdriverIO along with selenium framework to automate monkey testing of your website or web applications.

  9. JavaScript Testing with Selenium and WebdriverIO - Speed up your Javascript testing with Selenium and WebdriverIO.

  10. Cross Browser Testing With WebdriverIO - Learn more with this step-by-step tutorial about WebdriverIO framework and how cross-browser testing is done with WebdriverIO.

Run Webdriverio automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful