Jelajahi Sumber

filter out duplicates learned words

Tim Alby 6 tahun lalu
induk
melakukan
72d16c7c1f

+ 7 - 1
services/spelling/app/js/LearnedWordsManager.js

@@ -60,8 +60,14 @@ const LearnedWordsManager = {
       if (error != null) {
         return callback(error)
       }
-      const words =
+      let words =
         (preferences != null ? preferences.learnedWords : undefined) || []
+      if (words) {
+        // remove duplicates
+        words = words.filter(
+          (value, index, self) => self.indexOf(value) === index
+        )
+      }
       mongoCache.set(userToken, words)
       callback(null, words)
     })

+ 2 - 0
services/spelling/test/acceptance/js/LearnTest.js

@@ -54,6 +54,8 @@ describe('learning words', function() {
 
     const dictResponse = await getDict()
     const responseBody = JSON.parse(dictResponse.body)
+    // the response from getlearnedwords filters out duplicates, so this test
+    // can succeed even if the word is stored twice in the database
     expect(responseBody.length).to.equals(1)
   })
 

+ 7 - 2
services/spelling/test/unit/js/LearnedWordsManagerTests.js

@@ -22,6 +22,9 @@ describe('LearnedWordsManager', function() {
       del: sinon.stub()
     }
     this.LearnedWordsManager = SandboxedModule.require(modulePath, {
+      globals: {
+        console: console
+      },
       requires: {
         './DB': this.db,
         './MongoCache': this.cache,
@@ -92,8 +95,10 @@ describe('LearnedWordsManager', function() {
   describe('getLearnedWords', function() {
     beforeEach(function() {
       this.wordList = ['apples', 'bananas', 'pears']
+      this.wordListWithDuplicates = this.wordList.slice()
+      this.wordListWithDuplicates.push('bananas')
       this.db.spellingPreferences.findOne = (conditions, callback) => {
-        callback(null, { learnedWords: this.wordList })
+        callback(null, { learnedWords: this.wordListWithDuplicates })
       }
       sinon.spy(this.db.spellingPreferences, 'findOne')
       this.LearnedWordsManager.getLearnedWords(this.token, this.callback)
@@ -105,7 +110,7 @@ describe('LearnedWordsManager', function() {
       ).to.equal(true)
     })
 
-    it('should return the word list in the callback', function() {
+    it('should return the word list in the callback without duplicates', function() {
       expect(this.callback.calledWith(null, this.wordList)).to.equal(true)
     })
   })