|
@@ -1,208 +0,0 @@
|
|
|
-(function() {
|
|
|
|
|
- var SandboxedModule, chai, expect, modulePath, sinon;
|
|
|
|
|
-
|
|
|
|
|
- sinon = require('sinon');
|
|
|
|
|
-
|
|
|
|
|
- chai = require('chai');
|
|
|
|
|
-
|
|
|
|
|
- expect = chai.expect;
|
|
|
|
|
-
|
|
|
|
|
- chai.should();
|
|
|
|
|
-
|
|
|
|
|
- SandboxedModule = require('sandboxed-module');
|
|
|
|
|
-
|
|
|
|
|
- modulePath = require('path').join(__dirname, '../../../app/js/SpellingAPIManager');
|
|
|
|
|
-
|
|
|
|
|
- describe("SpellingAPIManager", function() {
|
|
|
|
|
- beforeEach(function() {
|
|
|
|
|
- this.token = "user-id-123";
|
|
|
|
|
- this.ASpell = {};
|
|
|
|
|
- this.learnedWords = ["lerned"];
|
|
|
|
|
- this.LearnedWordsManager = {
|
|
|
|
|
- getLearnedWords: sinon.stub().callsArgWith(1, null, this.learnedWords),
|
|
|
|
|
- learnWord: sinon.stub().callsArg(2)
|
|
|
|
|
- };
|
|
|
|
|
- return this.SpellingAPIManager = SandboxedModule.require(modulePath, {
|
|
|
|
|
- requires: {
|
|
|
|
|
- "./ASpell": this.ASpell,
|
|
|
|
|
- "./LearnedWordsManager": this.LearnedWordsManager
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("runRequest", function() {
|
|
|
|
|
- beforeEach(function() {
|
|
|
|
|
- this.nonLearnedWords = ["some", "words", "htat", "are", "speled", "rong", "lerned"];
|
|
|
|
|
- this.allWords = this.nonLearnedWords.concat(this.learnedWords);
|
|
|
|
|
- this.misspellings = [
|
|
|
|
|
- {
|
|
|
|
|
- index: 2,
|
|
|
|
|
- suggestions: ["that"]
|
|
|
|
|
- }, {
|
|
|
|
|
- index: 4,
|
|
|
|
|
- suggestions: ["spelled"]
|
|
|
|
|
- }, {
|
|
|
|
|
- index: 5,
|
|
|
|
|
- suggestions: ["wrong", "ring"]
|
|
|
|
|
- }, {
|
|
|
|
|
- index: 6,
|
|
|
|
|
- suggestions: ["learned"]
|
|
|
|
|
- }
|
|
|
|
|
- ];
|
|
|
|
|
- this.misspellingsWithoutLearnedWords = this.misspellings.slice(0, 3);
|
|
|
|
|
- this.ASpell.checkWords = (function(_this) {
|
|
|
|
|
- return function(lang, word, callback) {
|
|
|
|
|
- return callback(null, _this.misspellings);
|
|
|
|
|
- };
|
|
|
|
|
- })(this);
|
|
|
|
|
- return sinon.spy(this.ASpell, "checkWords");
|
|
|
|
|
- });
|
|
|
|
|
- describe("with sensible JSON", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(this.token, {
|
|
|
|
|
- words: this.allWords
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should return the words that are spelled incorrectly and not learned", function() {
|
|
|
|
|
- return expect(this.result.misspellings).to.deep.equal(this.misspellingsWithoutLearnedWords);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("with a missing words array", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(this.token, {}, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.error = error;
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should return an error", function() {
|
|
|
|
|
- return expect(this.error).to.deep.equal(new Error("malformed JSON"));
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("with a missing token", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(null, {
|
|
|
|
|
- words: this.allWords
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.error = error;
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should spell check without using any learned words", function() {
|
|
|
|
|
- return this.LearnedWordsManager.getLearnedWords.called.should.equal(false);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("without a language", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(this.token, {
|
|
|
|
|
- words: this.allWords
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should use en as the default", function() {
|
|
|
|
|
- return this.ASpell.checkWords.calledWith("en").should.equal(true);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("with a language", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(this.token, {
|
|
|
|
|
- words: this.allWords,
|
|
|
|
|
- language: this.language = "fr"
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should use the language", function() {
|
|
|
|
|
- return this.ASpell.checkWords.calledWith(this.language).should.equal(true);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- return describe("with a very large collection of words", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- var i;
|
|
|
|
|
- this.manyWords = (function() {
|
|
|
|
|
- var _i, _results;
|
|
|
|
|
- _results = [];
|
|
|
|
|
- for (i = _i = 1; _i <= 100000; i = ++_i) {
|
|
|
|
|
- _results.push("word");
|
|
|
|
|
- }
|
|
|
|
|
- return _results;
|
|
|
|
|
- })();
|
|
|
|
|
- return this.SpellingAPIManager.runRequest(this.token, {
|
|
|
|
|
- words: this.manyWords
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error, result) {
|
|
|
|
|
- _this.result = result;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should truncate to 10,000 words", function() {
|
|
|
|
|
- return this.ASpell.checkWords.calledWith(sinon.match.any, this.manyWords.slice(0, 10000)).should.equal(true);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- return describe("learnWord", function() {
|
|
|
|
|
- describe("without a token", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.learnWord(null, {
|
|
|
|
|
- word: "banana"
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error) {
|
|
|
|
|
- _this.error = error;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should return an error", function() {
|
|
|
|
|
- return expect(this.error).to.deep.equal(new Error("malformed JSON"));
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- describe("without a word", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- return this.SpellingAPIManager.learnWord(this.token, {}, (function(_this) {
|
|
|
|
|
- return function(error) {
|
|
|
|
|
- _this.error = error;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should return an error", function() {
|
|
|
|
|
- return expect(this.error).to.deep.equal(new Error("no token provided"));
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- return describe("with a word and a token", function() {
|
|
|
|
|
- beforeEach(function(done) {
|
|
|
|
|
- this.word = "banana";
|
|
|
|
|
- return this.SpellingAPIManager.learnWord(this.token, {
|
|
|
|
|
- word: this.word
|
|
|
|
|
- }, (function(_this) {
|
|
|
|
|
- return function(error) {
|
|
|
|
|
- _this.error = error;
|
|
|
|
|
- return done();
|
|
|
|
|
- };
|
|
|
|
|
- })(this));
|
|
|
|
|
- });
|
|
|
|
|
- return it("should call LearnedWordsManager.learnWord", function() {
|
|
|
|
|
- return this.LearnedWordsManager.learnWord.calledWith(this.token, this.word).should.equal(true);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
-}).call(this);
|
|
|