mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-04-04 07:09:14 +00:00
Add error checking to client-side permalink service
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
describe "Permalink Checker service", ->
|
||||
PermalinkChecker = null
|
||||
$httpBackend = null
|
||||
permalink = "this-is-a-permalink"
|
||||
permalink_too_long = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
permalink_invalid_chars = "<html>"
|
||||
|
||||
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)
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user