diff --git a/web/app/assets/javascripts/site_validator.js.coffee b/web/app/assets/javascripts/site_validator.js.coffee index fee2356cc..48bf4eac8 100644 --- a/web/app/assets/javascripts/site_validator.js.coffee +++ b/web/app/assets/javascripts/site_validator.js.coffee @@ -25,7 +25,7 @@ context.JK.SiteValidator = class SiteValidator @spinner.hide() validator = this @data_input.on 'blur', -> - validator.did_blur() + validator.didBlur() @data_input.on 'focus', -> validator.showFormatStatus() @data_input.on 'change', -> @@ -48,7 +48,7 @@ context.JK.SiteValidator = class SiteValidator @checkmark.hide() yn - did_blur: () => + didBlur: () => if this.showFormatStatus() this.validateSite() @@ -66,19 +66,21 @@ context.JK.SiteValidator = class SiteValidator this.setSiteStatus(true) this.renderErrors({}) if @deferred_status_check - @deferred_status_check.resolve + @deferred_status_check.resolve() else this.setSiteStatus(false) this.renderErrors(response) if @deferred_status_check - @deferred_status_check.reject + @deferred_status_check.reject() + @deferred_status_check = null @logger.debug("site_status = "+@site_status) processSiteCheckFail: (response) => @logger.error("site check error") this.setSiteStatus(false) if @deferred_status_check - @deferred_status_check.reject + @deferred_status_check.reject() + @deferred_status_check = null setSiteStatus: (status) => @site_status = status diff --git a/web/spec/javascripts/site_validator_spec.js.coffee b/web/spec/javascripts/site_validator_spec.js.coffee index 21d7df584..e29c9c785 100644 --- a/web/spec/javascripts/site_validator_spec.js.coffee +++ b/web/spec/javascripts/site_validator_spec.js.coffee @@ -17,43 +17,58 @@ describe "SiteValidator", -> @server.restore() describe "url site types", -> + beforeEach -> + @siteValidator = new JK.SiteValidator('url') + @siteValidator.init() + @url = 'http://www.jamkazam.com' + it "displays validator widget", -> - site_validator = new JK.SiteValidator('url') - site_validator.init() - site_validator.data_input.val('http://www.jamkazam.com') - site_validator.siteIsValid() - expect(site_validator.checkmark).toBeVisible() + @siteValidator.data_input.val(@url) + @siteValidator.siteIsValid() + expect(@siteValidator.checkmark).toBeVisible() it "displays error for bad url", -> - site_validator = new JK.SiteValidator('url') - site_validator.init() - site_validator.data_input.val('www.jamkazam.com') - site_validator.did_blur() - expect(site_validator.checkmark).toBeHidden() + @url = @url.replace('http://', '') + @siteValidator.data_input.val(@url) + @siteValidator.didBlur() + expect(@siteValidator.checkmark).toBeHidden() it "validates a good url", -> - url = 'http://www.jamkazam.com' - @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(url), + @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(@url), [200, { "content-type": "application/json" }, JSON.stringify({"message": "Valid Site"})]) sinon.spy() - site_validator = new JK.SiteValidator('url') - site_validator.init() - site_validator.data_input.val(url) - site_validator.did_blur() + @siteValidator.data_input.val(@url) + @siteValidator.didBlur() @server.respond() - expect(site_validator.checkmark).toBeVisible() + expect(@siteValidator.checkmark).toBeVisible() - it "invalidates a good url", -> - url = 'http://www.jamkazam.comxx' - @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(url), + it "invalidates a bad url", -> + @url += "xx" + @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(@url), [200, { "content-type": "application/json" }, JSON.stringify({"message": "Invalid Site"})]) sinon.spy() - site_validator = new JK.SiteValidator('url') - site_validator.init() - site_validator.data_input.val(url) - site_validator.did_blur() + @siteValidator.data_input.val(@url) + @siteValidator.didBlur() @server.respond() - expect(site_validator.checkmark).toBeHidden() - expect(site_validator.site_status).toEqual(false) - + expect(@siteValidator.checkmark).toBeHidden() + expect(@siteValidator.site_status).toEqual(false) + + it "responds to static state query properly", -> + @siteValidator.siteIsValid() + dfr = @siteValidator.state() + expect(dfr.state()).toEqual("resolved") + @siteValidator.siteIsInvalid() + dfr = @siteValidator.state() + expect(dfr.state()).toEqual("rejected") + + it "responds to deferred state query properly", -> + @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(@url), + [200, { "content-type": "application/json" }, JSON.stringify({"message": "Invalid Site"})]) + sinon.spy() + @siteValidator.data_input.val(@url) + expect(@siteValidator.site_status).toEqual(null) + dfr = @siteValidator.state() + expect(dfr.state()).toEqual("pending") + @server.respond() + expect(dfr.state()).toEqual("rejected")