Quellcode durchsuchen

Add extended field to page, and save slack channel into it

Sotaro KARASAWA vor 10 Jahren
Ursprung
Commit
4ecc3afd74
4 geänderte Dateien mit 72 neuen und 21 gelöschten Zeilen
  1. 33 14
      lib/models/page.js
  2. 3 4
      lib/routes/page.js
  3. 1 1
      lib/views/_form.html
  4. 35 2
      test/models/page.test.js

+ 33 - 14
lib/models/page.js

@@ -30,7 +30,7 @@ module.exports = function(crowi) {
     liker: [{ type: ObjectId, ref: 'User', index: true }],
     seenUsers: [{ type: ObjectId, ref: 'User', index: true }],
     commentCount: { type: Number, default: 0 },
-    extented: {
+    extended: {
       type: String,
       default: '{}',
       get: function(data) {
@@ -46,6 +46,9 @@ module.exports = function(crowi) {
     },
     createdAt: { type: Date, default: Date.now },
     updatedAt: Date
+  }, {
+    toJSON: {getters: true},
+    toObject: {getters: true}
   });
 
   pageEvent.on('create', pageEvent.onCreate);
@@ -59,15 +62,6 @@ module.exports = function(crowi) {
     return false;
   };
 
-  pageSchema.methods.getSlackChannel = function() {
-    //var extended = this.extended;
-    //debug('getSlackChannel.extended', extended);
-
-    //var slack = extended.slack || '';
-
-    //return slack;
-  };
-
   pageSchema.methods.isPortal = function() {
     return isPortalPath(this.path);
   };
@@ -196,6 +190,35 @@ module.exports = function(crowi) {
       });
   };
 
+  pageSchema.methods.getSlackChannel = function() {
+    var extended = this.get('extended');
+    if (!extended) {
+      return '';
+    }
+
+    return extended.slack || '';
+  };
+
+  pageSchema.methods.updateSlackChannel = function(slackChannel) {
+    var extended = this.extended;
+    extended.slack = slackChannel;
+
+    return this.updateExtended(extended);
+  };
+
+  pageSchema.methods.updateExtended = function(extended) {
+    var page = this;
+    page.extended = extended;
+    return new Promise(function(resolve, reject) {
+      return page.save(function(err, doc) {
+        if (err) {
+          return reject(err);
+        }
+        return resolve(doc);
+      });
+    });
+  };
+
   pageSchema.statics.populatePageData = function(pageData, revisionId) {
     var Page = crowi.model('Page');
     var User = crowi.model('User');
@@ -550,10 +573,6 @@ module.exports = function(crowi) {
     });
   };
 
-  pageSchema.statics.updateExtended = function(page, extended) {
-    return this.updatePage(page, extended);
-  };
-
   pageSchema.statics.updateGrant = function(page, grant, userData) {
     var self = this;
 

+ 3 - 4
lib/routes/page.js

@@ -183,6 +183,7 @@ module.exports = function(crowi, app) {
     Page.findPage(path, req.user, req.query.revision)
     .then(function(page) {
       debug('Page found', page._id, page.path);
+      debug(page);
 
       if (isMarkdown) {
         res.set('Content-Type', 'text/plain');
@@ -271,11 +272,9 @@ module.exports = function(crowi, app) {
       // TODO: move to events
       crowi.getIo().sockets.emit('page edited', {page: data, user: req.user});
       if (notify.slack) {
-        //if (notify.slack.channel && pageData.getSlackChannel()) {
-        //  // through
-        //  Page.updateNotify(data).then(function(){}).catch(function(){});
-        //}
         if (notify.slack.on && notify.slack.channel) {
+          data.updateSlackChannel(notify.slack.channel).then(function(){}).catch(function(){});
+
           if (crowi.slack) {
             notify.slack.channel.split(',').map(function(chan) {
               var message = crowi.slack.prepareSlackMessage(pageData, req.user, chan, updateOrCreate);

+ 1 - 1
lib/views/_form.html

@@ -29,7 +29,7 @@
               <input class="" type="checkbox" name="pageForm[notify][slack][on]" value="1">
             </label>
           </span>
-          <input class="form-control" type="text" name="pageForm[notify][slack][channel]" value="{{ page.extented.slack|default('') }}" placeholder="slack-channel-name"
+          <input class="form-control" type="text" name="pageForm[notify][slack][channel]" value="{{ page.extended.slack|default('') }}" placeholder="slack-channel-name"
             id="page-form-slack-channel"
             data-toggle="popover"
             title="Slack通知"

+ 35 - 2
test/models/page.test.js

@@ -52,8 +52,14 @@ describe('Page', function () {
           path: '/grant/owner',
           grant: Page.GRANT_OWNER,
           grantedUsers: [testUser0],
-          creator: testUser0
-        }
+          creator: testUser0,
+        },
+        {
+          path: '/page/for/extended',
+          grant: Page.GRANT_PUBLIC,
+          creator: testUser0,
+          extended: {hoge: 1}
+        },
       ];
 
       testDBUtil.generateFixture(conn, 'Page', fixture)
@@ -161,4 +167,31 @@ describe('Page', function () {
       });
     });
   });
+
+  describe('Extended field', function () {
+    context('Slack Channel.', function() {
+      it('should be empty', function(done) {
+        Page.findOne({path: '/page/for/extended'}, function(err, page) {
+          expect(page.extended.hoge).to.be.equal(1);
+          expect(page.getSlackChannel()).to.be.equal('');
+          done();
+        })
+      });
+
+      it('set slack channel and should get it and should keep hoge ', function(done) {
+        Page.findOne({path: '/page/for/extended'}, function(err, page) {
+          page.updateSlackChannel('slack-channel1')
+          .then(function(data) {
+            Page.findOne({path: '/page/for/extended'}, function(err, page) {
+              expect(page.extended.hoge).to.be.equal(1);
+              expect(page.getSlackChannel()).to.be.equal('slack-channel1');
+              done();
+            });
+          })
+        });
+      });
+
+    });
+  });
+
 });