Commit f7257450 authored by Sven Franck's avatar Sven Franck

add tests

parent 72f69b24
/**
* Youtube (Data) Storage. Type = "youtube".
*/
/*global jIO, RSVP, UriTemplate, JSON*/
/*global jIO, RSVP, UriTemplate, JSON */
/*jslint nomen: true*/
(function (jIO, RSVP, UriTemplate, JSON) {
"use strict";
var GET_URL = "https://www.googleapis.com/youtube/v3/videos?" +
"part=snippet,statistics,contentDetails{&id}{&key}";
var GET_TEMPLATE = UriTemplate.parse(GET_URL);
var ALLDOCS_URL = "https://www.googleapis.com/youtube/v3/search?" +
"part=snippet{&pageToken}&q={search}&type=video&maxResults=10{&key}";
var ALLDOCS_TEMPLATE = UriTemplate.parse(ALLDOCS_URL);
function handleError(error, id) {
if (error.target && error.target.status === 404) {
throw new jIO.util.jIOError("Cannot find document: " + id, 404);
}
throw error;
}
"part=snippet,statistics,contentDetails{&id}{&key}",
GET_TEMPLATE = UriTemplate.parse(GET_URL),
ALLDOCS_URL = "https://www.googleapis.com/youtube/v3/search?" +
"part=snippet{&pageToken}&q={search}&type=video&maxResults=10{&key}",
ALLDOCS_TEMPLATE = UriTemplate.parse(ALLDOCS_URL);
/**
* The JIO Youtube Storage extension
......@@ -50,7 +43,13 @@
})
.push(function (evt) {
return JSON.parse(evt.target.response || evt.target.responseText);
}, handleError);
})
.push(undefined, function (error) {
if (error.target && error.target.status === 404) {
throw new jIO.util.jIOError("Cannot find document: " + id, 404);
}
throw error;
});
};
YoutubeStorage.prototype.buildQuery = function (options) {
......@@ -74,8 +73,10 @@
}
obj.items.nextPageToken = obj.nextPageToken;
return obj.items;
}, handleError);
})
.push(undefined, function (error) {
throw error;
});
};
YoutubeStorage.prototype.hasCapacity = function (name) {
......@@ -84,4 +85,4 @@
jIO.addStorage('youtube', YoutubeStorage);
} (jIO, RSVP, UriTemplate, JSON));
}(jIO, RSVP, UriTemplate, JSON));
/*jslint nomen: true */
/*global Blob, sinon, JSON*/
(function (jIO, QUnit, sinon, JSON) {
"use strict";
var test = QUnit.test,
stop = QUnit.stop,
start = QUnit.start,
ok = QUnit.ok,
expect = QUnit.expect,
deepEqual = QUnit.deepEqual,
equal = QUnit.equal,
module = QUnit.module,
query = "",
api_key = "sample_key",
sample_id = "sample_id",
token = "sample_token",
domain = "https://www.googleapis.com/youtube/v3/",
get_reply = {
"kind": "youtube#videoListResponse",
"pageInfo": {"totalResults": 1, "resultsPerPage": 1},
"items": [{"kind": "youtube#video", "id": "sample_id"}]
};
function getSample() {
return JSON.stringify({
"nextPageToken": "sample_token",
"items": [{"id": "0B4kh3jbjOf5LamRlX21MZ"}]
});
}
function getSampleCont() {
return JSON.stringify({"items": [{"id": "0B4kh3jbjOf5LamRlVCYXM"}]});
}
function getUrl() {
return domain + "videos?part=snippet,statistics,contentDetails" +
"&id=" + sample_id + "&key=" + api_key;
}
function listUrl(token) {
return domain + "search?part=snippet&pageToken=" + token +
"&q=" + query + "&type=video&maxResults=10&key=" + api_key;
}
function getItem(id) {
return {"id": id, "value": {}};
}
function getResponse(item, has_token) {
var obj = {"data": {"rows": [], "total_rows": 1}};
obj.data.rows.push(item);
if (has_token) {
obj.nextPageToken = token;
}
return obj;
}
function error404Tester(fun, encl, blob) {
stop();
expect(3);
this.jio[fun]("inexistent", encl ? "enclosure" : undefined,
blob || undefined)
.fail(function (error) {
ok(error instanceof jIO.util.jIOError);
equal(error.message, "Cannot find document: inexistent");
equal(error.status_code, 404);
})
.fail(function (error) {
ok(false, error);
})
.always(function () {
start();
});
}
/////////////////////////////////////////////////////////////////
// Youtube Storage constructor
/////////////////////////////////////////////////////////////////
module("Youtube Storage.constructor");
test("create storage", function () {
var jio = jIO.createJIO({
type: "youtube",
api_key: api_key
});
equal(jio.__type, "youtube");
deepEqual(jio.__storage._api_key, api_key);
});
/////////////////////////////////////////////////////////////////
// Youtube Storage.get
/////////////////////////////////////////////////////////////////
module("Youtube Storage.get", {
setup: function () {
this.server = sinon.fakeServer.create();
this.server.autoRespond = true;
this.server.autoRespondAfter = 5;
this.jio = jIO.createJIO({
type: "youtube",
api_key: api_key
});
},
teardown: function () {
this.server.restore();
delete this.server;
}
});
test("get inexistent document", function () {
var tester = error404Tester.bind(this);
tester("get");
});
test("get document", function () {
var url = getUrl(),
body = get_reply;
this.server.respondWith("GET", url, [200, {
"Content-Type": "application/json; charset=UTF-8"
}, JSON.stringify(body)
]);
stop();
expect(1);
this.jio.get(sample_id)
.then(function (result) {
deepEqual(result, get_reply);
})
.fail(function (error) {
ok(false, error);
})
.always(function () {
start();
});
});
/////////////////////////////////////////////////////////////////
// Youtube Storage.allDocs
/////////////////////////////////////////////////////////////////
module("Youtube Storage.allDocs", {
setup: function () {
this.server = sinon.fakeServer.create();
this.server.autoRespond = true;
this.server.autoRespondAfter = 5;
this.jio = jIO.createJIO({
type: "youtube",
api_key: api_key
});
},
teardown: function () {
this.server.restore();
delete this.server;
}
});
test("get all docs", function () {
var object_result_1 = getResponse(getItem("0B4kh3jbjOf5LamRlVCYXM")),
server = this.server;
this.server.respondWith("GET", listUrl(""), [200, {
}, getSampleCont()]);
stop();
expect(7);
this.jio.allDocs()
.then(function (res) {
equal(server.requests.length, 1);
equal(server.requests[0].method, "GET");
equal(server.requests[0].url, listUrl(""));
equal(server.requests[0].status, 200);
equal(server.requests[0].requestBody, undefined);
equal(server.requests[0].responseText, getSampleCont());
deepEqual(res, object_result_1);
})
.fail(function (error) {
ok(false, error);
})
.always(function () {
start();
});
});
test("allDocs with sequential API requests (nextPageToken)", function () {
var context = this,
server = this.server,
object_result_2;
this.server.respondWith("GET", listUrl("sample_token"), [200, {
}, getSampleCont()]);
this.server.respondWith("GET", listUrl(""), [200, {
}, getSample()]);
stop();
expect(14);
object_result_2 = getResponse(getItem("0B4kh3jbjOf5LamRlX21MZ", true));
context.jio.allDocs()
.then(function (res) {
equal(server.requests.length, 1);
equal(server.requests[0].method, "GET");
equal(server.requests[0].url, listUrl(""));
equal(server.requests[0].status, 200);
equal(server.requests[0].requestBody, undefined);
equal(server.requests[0].responseText, getSample());
deepEqual(res, object_result_2);
object_result_2 = getResponse(getItem("0B4kh3jbjOf5LamRlVCYXM"));
return context.jio.allDocs({"token": token});
})
.then(function (res) {
equal(server.requests.length, 2);
equal(server.requests[1].method, "GET");
equal(server.requests[1].url, listUrl(token));
equal(server.requests[1].status, 200);
equal(server.requests[1].requestBody, undefined);
equal(server.requests[1].responseText, getSampleCont());
deepEqual(res, object_result_2);
})
.fail(function (error) {
ok(false, error);
})
.always(function () {
start();
});
});
}(jIO, QUnit, sinon, JSON));
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment