diff --git a/public/index.html b/public/index.html
index 1b4080c..1d3e543 100644
--- a/public/index.html
+++ b/public/index.html
@@ -14,6 +14,8 @@
+
+
@@ -461,6 +463,10 @@ lying internet
+
+
+
+
diff --git a/public/js/main.js b/public/js/main.js
index 93eb6b5..4904605 100644
--- a/public/js/main.js
+++ b/public/js/main.js
@@ -74,7 +74,7 @@ function parseServiceResponse(res,options){
return _.map(res.gossip.results, 'key');
},
"ebay": function (res) {
- return res.res ? res.res.sug : undefined;
+ return res.res ? res.res.sug : [];
},
"twitter": function (res) {
return _.concat(res.users, _.map(res.topics, 'topic'), res.hashtags, res.oneclick);
diff --git a/public/js/test.js b/public/js/test.js
index b10bcc8..59a260e 100644
--- a/public/js/test.js
+++ b/public/js/test.js
@@ -1,14 +1,27 @@
var expect = chai.expect;
var assert = chai.assert;
+// TODO describe('permute', function(){
+// it('should correctly permute results and add to queue', function() {
+// });
+// });
+
+// TODO use localForage or most popular promise wrapper for indexedDB then test
+// describe('exportDB', function(){
+// });
+
describe('db', function() {
- it('should correctly set up db', function() {
+ it('should correctly set up db', function(done) {
var dbReq=setUpDb();
var oldonsuccess=dbReq.onsuccess;
dbReq.onsuccess=function(event){
// override onld onsucess because it doesn't use promises
var db=oldonsuccess.bind(dbReq)(event);
assert(db);
+ assert(db.objectStoreNames.contains('suggestions'),'db should contain suggestons store');
+ var indexNames =db.transaction('suggestions','readonly').objectStore('suggestions').indexNames;
+ assert(indexNames.contains('keyword','search'));
+ done();
};
});
});
@@ -16,41 +29,23 @@ describe('db', function() {
describe('extractDomain', function(){
- it('should correctly extract domain from url', function() {
- for (var expectedDomain in testData.domainUrls) {
- if (testData.domainUrls.hasOwnProperty(expectedDomain)) {
+ for (var expectedDomain in testData.domainUrls) {
+ if (testData.domainUrls.hasOwnProperty(expectedDomain)) {
+ it('should correctly extract domain from url, domain='+expectedDomain, function() {
var url = testData.domainUrls[expectedDomain];
var domain = extractDomain(url);
assert.equal(expectedDomain,domain);
- }
+ });
}
- });
+ }
+
});
-// describe('permute', function(){
-// it('should correctly permute results and add to queue', function() {
-// });
-// });
-
-// TODO use localForage or most popular promise wrapper for indexedDB then test
-// describe('exportDB', function(){
-// before(function() {
-// // setup up test db
-// });
-//
-// after(function() {
-// // tear down test db
-// });
-//
-// it('should correctly download json file', function() {
-// exportDB();
-// });
-// });
describe('responses', function(){
- it('should correctly parse test data', function() {
- for (var service in testData.responses) {
- if (testData.responses.hasOwnProperty(service)) {
+ for (var service in testData.responses) {
+ if (testData.responses.hasOwnProperty(service)) {
+ it('should correctly parse test data for service='+service, function() {
var res = testData.responses[service];
var options = {service:service};
var parsedRes = parseServiceResponse(res,options);
@@ -58,18 +53,22 @@ describe('responses', function(){
assert.typeOf(parsedRes,'array');
expect(parsedRes).to.have.length.above(1);
parsedRes.map(r => assert.typeOf(r, 'string'));
- }
+ });
}
- });
+ }
});
describe('services', function() {
'use strict';
+ // TODO test for each language and country and assert results!=default res
+ this.timeout(10000);
+ this.slow(2000);
// data
var services = ["google", "google news", "google shopping", "google books", "youtube", "google videos", "google images", "yahoo", "bing", "ebay", "amazon", "twitter", "baidu", "yandex"];
var searches = ["where"];
- var searches2 = [""," "," * ",":)","❥","غرف شات","汉字"];
+ var searchesDifficult = [" * ", "❥"];
+
before(function() {
@@ -79,12 +78,40 @@ describe('services', function() {
});
- it('should correctly get and parse data', function() {
- services.forEach(function(service){
- searches.forEach(function(search){
+ services.forEach(function(service){
+ searches.forEach(function(search){
+ it('should correctly get and parse data'+'. Service="'+service+'" search="'+search+'"', function(done) {
var options = {service:service};
var url = getUrl(options)+search;
- $.ajax({
+ return $.ajax({
+ url: url,
+ async: false,
+ jsonp: "jsonp",
+ dataType: "jsonp",
+ success: function (res, statusText, jqXHR) {
+ assert(statusText=="success");
+ assert(res!==[]);
+ var parsedRes = parseServiceResponse(res,options);
+ assert.typeOf(parsedRes,'array');
+ parsedRes.map(r => assert.typeOf(r, 'string'));
+ done();
+ },
+ error: function(jqXHR,textStatus,err){
+ done(err);
+ return err;
+ }
+ });
+ });
+ });
+ });
+
+
+ services.forEach(function(service){
+ searchesDifficult.forEach(function(search){
+ it('should get and parse difficult data'+'. Service="'+service+'" search="'+search+'"', function(done) {
+ var options = {service:service};
+ var url = getUrl(options)+search;
+ return $.ajax({
url: url,
async: false,
jsonp: "jsonp",
@@ -93,15 +120,14 @@ describe('services', function() {
assert(statusText=="success");
assert(res!==[]);
-
var parsedRes = parseServiceResponse(res,options);
assert.typeOf(parsedRes,'array');
- expect(parsedRes).to.have.length.above(1);
parsedRes.map(r => assert.typeOf(r, 'string'));
+ return done();
},
error: function(jqXHR,textStatus,err){
- throw(err);
+ return done(err);
}
});
});
diff --git a/public/js/testData.js b/public/js/testData.js
index 102eca5..b95e701 100644
--- a/public/js/testData.js
+++ b/public/js/testData.js
@@ -1,4 +1,4 @@
-function testData() {
+var testData = function () {
return {
domainUrls: {
"api.bing.com": "http://api.bing.com/osjson.aspx?JsonType=callback&JsonCallback=jQuery111&query=a &_=11111",
@@ -565,4 +565,4 @@ function testData() {
}]
}
};
-}
+}();
diff --git a/public/test.html b/public/test.html
index 3fe94e7..dc45486 100644
--- a/public/test.html
+++ b/public/test.html
@@ -23,6 +23,8 @@
+
+