diff --git a/app/assets/javascripts/admin/enterprises/services/permalink_checker.js.coffee b/app/assets/javascripts/admin/enterprises/services/permalink_checker.js.coffee index cb3fde9324..e1b62e6f6e 100644 --- a/app/assets/javascripts/admin/enterprises/services/permalink_checker.js.coffee +++ b/app/assets/javascripts/admin/enterprises/services/permalink_checker.js.coffee @@ -2,6 +2,7 @@ angular.module("admin.enterprises").factory 'PermalinkChecker', ($q, $http) -> new class PermalinkChecker deferredRequest: null deferredAbort: null + MAX_PERMALINK_LENGTH: 255 check: (permalink) => @abort(@deferredAbort) if @deferredRequest && @deferredRequest.promise @@ -15,9 +16,14 @@ angular.module("admin.enterprises").factory 'PermalinkChecker', ($q, $http) -> timeout: deferredAbort.promise ) .success( (data) => - deferredRequest.resolve - permalink: data - available: "Available" + if data.length > @MAX_PERMALINK_LENGTH || !data.match(/^[\w-]+$/) + deferredRequest.resolve + permalink: permalink + available: "Error" + else + deferredRequest.resolve + permalink: data + available: "Available" ).error (data,status) => if status == 409 deferredRequest.resolve diff --git a/spec/javascripts/unit/admin/enterprises/services/permalink_checker_spec.js.coffee b/spec/javascripts/unit/admin/enterprises/services/permalink_checker_spec.js.coffee index 6eef847858..3814d74cbc 100644 --- a/spec/javascripts/unit/admin/enterprises/services/permalink_checker_spec.js.coffee +++ b/spec/javascripts/unit/admin/enterprises/services/permalink_checker_spec.js.coffee @@ -1,6 +1,10 @@ describe "Permalink Checker service", -> PermalinkChecker = null $httpBackend = null + permalink = "this-is-a-permalink" + permalink_too_long = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + permalink_invalid_chars = "" + beforeEach -> module 'admin.enterprises' @@ -8,7 +12,31 @@ describe "Permalink Checker service", -> $httpBackend = _$httpBackend_ PermalinkChecker = $injector.get("PermalinkChecker") - it "sends an http request to check the permalink", -> - permalink = "this-is-a-permalink" - $httpBackend.expectGET "/enterprises/check_permalink?permalink=#{permalink}" - PermalinkChecker.check(permalink) \ No newline at end of file + it "responds to available permalinks", -> + $httpBackend.expectGET("/enterprises/check_permalink?permalink=#{permalink}").respond permalink + PermalinkChecker.check(permalink).then (data) -> + expect(data.permalink).toEqual permalink + expect(data.available).toEqual "Available" + $httpBackend.flush() + + it "responds to unavailable permalinks", -> + $httpBackend.expectGET("/enterprises/check_permalink?permalink=#{permalink}").respond 409, permalink + PermalinkChecker.check(permalink).then (data) -> + expect(data.permalink).toEqual permalink + expect(data.available).toEqual "Unavailable" + $httpBackend.flush() + + describe "invalid data", -> + it "errors for permalinks that are too long", -> + $httpBackend.expectGET("/enterprises/check_permalink?permalink=#{permalink}").respond permalink_too_long + PermalinkChecker.check(permalink).then (data) -> + expect(data.permalink).toEqual permalink + expect(data.available).toEqual "Error" + $httpBackend.flush() + + it "errors for permalinks that contain invalid characters", -> + $httpBackend.expectGET("/enterprises/check_permalink?permalink=#{permalink}").respond permalink_invalid_chars + PermalinkChecker.check(permalink).then (data) -> + expect(data.permalink).toEqual permalink + expect(data.available).toEqual "Error" + $httpBackend.flush()