Răsfoiți Sursa

Merge pull request #105 from crowi/fix-pagename-problem

Fix pagename problem
Sotaro KARASAWA 9 ani în urmă
părinte
comite
5297cd8e7b
2 a modificat fișierele cu 41 adăugiri și 4 ștergeri
  1. 3 3
      lib/models/page.js
  2. 38 1
      test/models/page.test.js

+ 3 - 3
lib/models/page.js

@@ -325,14 +325,14 @@ module.exports = function(crowi) {
   pageSchema.statics.isCreatableName = function(name) {
     var forbiddenPages = [
       /\^|\$|\*|\+|\#/,
-      /^\/_api\/.*/,
+      /^\/_.*/, // /_api/* and so on
       /^\/\-\/.*/,
       /^\/_r\/.*/,
       /^\/user\/[^\/]+\/(bookmarks|comments|activities|pages|recent-create|recent-edit)/, // reserved
-      /^http:\/\/.+$/, // avoid miss in renaming
+      /^https?:\/\/.+$/, // avoid miss in renaming
       /.+\/edit$/,
       /.+\.md$/,
-      /^\/(installer|register|login|logout|admin|me|files|trash|paste|comments).+/,
+      /^\/(installer|register|login|logout|admin|me|files|trash|paste|comments)(\/.*|$)/,
     ];
 
     var isCreatable = true;

+ 38 - 1
test/models/page.test.js

@@ -62,7 +62,7 @@ describe('Page', function () {
         },
       ];
 
-      testDBUtil.generateFixture(conn, 'Page', fixture)
+      return testDBUtil.generateFixture(conn, 'Page', fixture)
       .then(function(pages) {
         done();
       });
@@ -93,6 +93,43 @@ describe('Page', function () {
     });
   });
 
+  describe('.isCreatableName', function() {
+
+    expect(Page.isCreatableName('/hoge')).to.be.true;
+
+    // edge cases
+    expect(Page.isCreatableName('/me')).to.be.false;
+    expect(Page.isCreatableName('/me/')).to.be.false;
+    expect(Page.isCreatableName('/me/x')).to.be.false;
+    expect(Page.isCreatableName('/meeting')).to.be.true;
+    expect(Page.isCreatableName('/meeting/x')).to.be.true;
+
+    // under score
+    expect(Page.isCreatableName('/_')).to.be.false;
+    expect(Page.isCreatableName('/_r/x')).to.be.false;
+    expect(Page.isCreatableName('/_api')).to.be.false;
+    expect(Page.isCreatableName('/_apix')).to.be.false;
+    expect(Page.isCreatableName('/_api/x')).to.be.false;
+
+    expect(Page.isCreatableName('/hoge/xx.md')).to.be.false;
+
+
+    var forbidden = ['installer', 'register', 'login', 'logout', 'admin', 'files', 'trash', 'paste', 'comments'];
+    for (var i = 0; i < forbidden.length ; i++) {
+      var pn = forbidden[i];
+      expect(Page.isCreatableName('/' + pn + '')).to.be.false;
+      expect(Page.isCreatableName('/' + pn + '/')).to.be.false;
+      expect(Page.isCreatableName('/' + pn + '/abc')).to.be.false;
+    }
+
+    var forbidden = ['bookmarks', 'comments', 'activities', 'pages', 'recent-create', 'recent-edit'];
+    for (var i = 0; i < forbidden.length ; i++) {
+      var pn = forbidden[i];
+      expect(Page.isCreatableName('/user/aoi/' + pn)).to.be.false;
+      expect(Page.isCreatableName('/user/aoi/x/' + pn)).to.be.true;
+    }
+  });
+
   describe('.isCreator', function() {
     context('with creator', function() {
       it('should return true', function(done) {