diff --git a/web/app/assets/javascripts/site_validator.js.coffee b/web/app/assets/javascripts/site_validator.js.coffee index 1bae6144d..c0ca5a284 100644 --- a/web/app/assets/javascripts/site_validator.js.coffee +++ b/web/app/assets/javascripts/site_validator.js.coffee @@ -15,11 +15,10 @@ context.JK.SiteValidator = class SiteValidator @checkmark = @input_div.find('.validate-checkmark') this.setSiteStatus(null) this.showFormatStatus() - if @site_type.match(/^rec_.*$/) - @is_rec_src = true - else - @is_rec_src = false + @is_rec_src = false @recording_source_id = null + @deferred_status_check = null + @is_validating = false init: () => this.renderErrors({}) @@ -29,6 +28,8 @@ context.JK.SiteValidator = class SiteValidator validator.did_blur() @data_input.on 'focus', -> validator.showFormatStatus() + @data_input.on 'change', -> + @site_status = null dataToValidate: () => url = @data_input.val() @@ -60,34 +61,38 @@ context.JK.SiteValidator = class SiteValidator processSiteCheck: (response) => @spinner.hide() - if @is_rec_src - @recording_source_id = response.recording_id if 'Valid Site' == response.message - this.setSiteStatus('valid') + this.setSiteStatus(true) this.renderErrors({}) + if @deferred_status_check + @deferred_status_check.resolve else - this.setSiteStatus('invalid') + this.setSiteStatus(false) this.renderErrors(response) + if @deferred_status_check + @deferred_status_check.reject @logger.debug("site_status = "+@site_status) processSiteCheckFail: (response) => @logger.error("site check error") - this.setSiteStatus('invalid') + this.setSiteStatus(false) + if @deferred_status_check + @deferred_status_check.reject setSiteStatus: (status) => @site_status = status @spinner.hide() - if 'valid' == status + if true == status @checkmark.show() else @checkmark.hide() siteIsValid: () => - this.setSiteStatus('valid') + this.setSiteStatus(true) siteIsInvalid: () => - this.setSiteStatus('invalid') + this.setSiteStatus(false) renderErrors: (errors) => errdiv = @input_div.find('.error') @@ -99,3 +104,35 @@ context.JK.SiteValidator = class SiteValidator @checkmark.show() errdiv.hide() errdiv.html('') + + state: () => + dfr = $.Deferred() + if null == @site_status + @deferred_status_check = dfr + this.validateSite() + else + if true == @site_status + dfr.resolve() + else + dfr.reject() + return dfr.promise() + +context.JK.RecordingSourceValidator = class RecordingSourceValidator extends SiteValidator + constructor: (site_type) -> + super(site_type) + @recording_sources = [] + @is_rec_src = true + @add_btn = @input_div.find('.rec_src_add') + + init: (sources) => + super() + if sources + @recording_sources = sources + + processSiteCheck: (response) => + super() + @recording_source_id = response.recording_id + + addSource: () -> + @add_btn.addClass('disabled') + diff --git a/web/spec/javascripts/site_validator_spec.js.coffee b/web/spec/javascripts/site_validator_spec.js.coffee index 1d915307c..5c1d0692f 100644 --- a/web/spec/javascripts/site_validator_spec.js.coffee +++ b/web/spec/javascripts/site_validator_spec.js.coffee @@ -7,19 +7,39 @@ describe "SiteValidator", -> fixture.preload("siteValidator.html") beforeEach -> - this.server = sinon.fakeServer.create(); + @server = sinon.fakeServer.create(); window.jamClient = sinon.stub() @fixtures = fixture.load("siteValidator.html", true) window.gon = {} window.gon.isNativeClient = true afterEach -> - this.server.restore(); + @server.restore(); 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() + + 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() + + xit "validates a good url", -> + url = 'http://www.jamkazam.com' + @server.respondWith("GET", '/api/data_validation?sitetype=url&data=' + encodeURIComponent(url), + [200, { "content-type": "application/json" }, '{ "message": "Valid Site" }']) + sinon.spy() + site_validator = new JK.SiteValidator('url') + site_validator.init() + site_validator.data_input.val(url) + site_validator.did_blur() + @server.respond() + expect(site_validator.checkmark).toBeVisible() + +