├── buster.js ├── cases.js └── run-tests.js /buster.js: -------------------------------------------------------------------------------- 1 | var config = module.exports; 2 | 3 | config["Company search regression tests"] = { 4 | env: "node", 5 | tests: ["./run-tests.js"] 6 | }; -------------------------------------------------------------------------------- /cases.js: -------------------------------------------------------------------------------- 1 | /* Kjør testene med: 2 | * 3 | * buster test -r specification 4 | */ 5 | 6 | module.exports = [ 7 | { 8 | search: "rørlegger oslo", 9 | better: { name: "Varme&Bad", id: "1236749" }, 10 | worse: { name: "Realiseringsbygg", id: "2968057" }, 11 | reason: "Viktigere at Varme&Bad er rørlegger enn at Realiseringsbygg har masse bra omtaler.." 12 | }, 13 | ]; 14 | 15 | 16 | /* Legg til flere tester på dette formatet: 17 | * 18 | * { 19 | * search: "søkestreng", 20 | * better: { name: "navn på det bedre treffet", id: "id'en fra bedriftsprofil-URLen" }, 21 | * worse: { name: "navn på det dårligere treffet", id: "id'en fra bedriftsprofil-URLen" }, 22 | * reason: "En fritekst for å minne oss på hvorfor treffene bør være slik." 23 | * }, 24 | * 25 | */ 26 | -------------------------------------------------------------------------------- /run-tests.js: -------------------------------------------------------------------------------- 1 | var buster = require("buster"); 2 | var request = require("request"); 3 | 4 | buster.testRunner.timeout = 5000; 5 | 6 | function indexOfCompanyResult(html, company) { 7 | return html.indexOf("/" + company.id + ".tell"); 8 | } 9 | 10 | buster.assertions.add("inResult", { 11 | assert: function (html, company) { 12 | return indexOfCompanyResult(html, company) >= 0; 13 | }, 14 | assertMessage: "\n Expected ${1} to be present in the first result page.\n Reason: ${2}\n URL: ${3}" 15 | }); 16 | 17 | buster.assertions.add("beforeInResult", { 18 | assert: function (html, better, worse) { 19 | var worseNotPresent = indexOfCompanyResult(html, worse) < 0; 20 | var betterBeforeWorse = indexOfCompanyResult(html, worse) > indexOfCompanyResult(html, better); 21 | return worseNotPresent || betterBeforeWorse; 22 | }, 23 | assertMessage: "\n Expected ${1} to be before ${2} in the result page.\n Reason: ${2}\n URL: ${3}" 24 | }); 25 | 26 | var testCases = {}; 27 | 28 | function stripAwayBanners(html) { 29 | return html.substring(html.indexOf("resultList")); 30 | } 31 | 32 | function addTestCase(info) { 33 | var testName = "'" + info.search + "' should have '" + info.better.name + "' before '" + info.worse.name + "'"; 34 | var url = "http://oppdrag.finn.no/bedrifter/resultat.html?q=" + info.search.replace(/ /g, "%20"); 35 | 36 | testCases[testName] = function (done) { 37 | request(url, function (error, response, body) { 38 | if (!error && response.statusCode === 200) { 39 | 40 | var html = stripAwayBanners(body); 41 | 42 | assert.inResult(html, info.better, info.reason, url); 43 | assert.beforeInResult(html, info.better, info.worse, info.reason, url); 44 | done(); 45 | } else { 46 | throw new Error("\n Failed to communicate with server.\n Response: " + buster.format.ascii(response) + "\n Error: " + buster.format.ascii(error)); 47 | } 48 | }); 49 | }; 50 | } 51 | 52 | var cases = require("./cases"); 53 | 54 | cases.forEach(addTestCase); 55 | 56 | buster.testCase('Company Search', testCases); 57 | --------------------------------------------------------------------------------