require 'spec_helper' describe ArgyleHelper do before(:each) do Argyle.configuration.key = 'key' @options = {form_id: 'ohai', name: 'ohai', action: plaid_index_path, token: 'myToken', webhook: 'http://myhook.com'} end describe "#plaid_link" do it "responds to plaid_link" do expect(helper).to respond_to(:plaid_link) end it "raises exception if public key not set" do Argyle.configuration.key = nil expect { helper.plaid_link(@options) }.to raise_exception(Argyle::Error, "Public key must be set in Argyle configuration") end it "raises exception if name is not in options" do @options[:name] = nil expect { helper.plaid_link(@options) }.to raise_exception(Argyle::Error, "options[:name] is required for Plaid Link") end it "raises exception if action is not in options" do @options[:action] = nil expect { helper.plaid_link(@options) }.to raise_exception(Argyle::Error, "options[:action] is required for Plaid Link") end it "sets a default id" do @options.delete :form_id expect(helper).to receive(:plaid_link_form).with('plaidForm', plaid_index_path).and_return("") helper.plaid_link(@options) end it "sets a default product" do expect(helper).to receive(:plaid_link_script).with('ohai', 'ohai', 'auth', 'tartan', @options).and_return("") helper.plaid_link(@options) end it "sets a default env" do expect(helper).to receive(:plaid_link_script).with('ohai', 'ohai', 'auth', 'tartan', @options).and_return("") helper.plaid_link(@options) end it "returns the form and script HTML" do expect(helper.plaid_link(@options)).to eq("<form id=\"ohai\" action=\"/plaid/index\" accept-charset=\"UTF-8\" method=\"post\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><script src=\"https://cdn.plaid.com/link/stable/link-initialize.js\" data-client-name=\"ohai\" data-form-id=\"ohai\" data-key=\"key\" data-product=\"auth\" data-env=\"tartan\" data-webhook=\"http://myhook.com\" data-token=\"myToken\">\n//<![CDATA[\n\n//]]>\n</script>") end end describe "#plaid_link_form" do it "returns plaid form with specified action" do expect(helper.plaid_link_form('myId', plaid_index_path)).to eq('<form id="myId" action="/plaid/index" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" />') end it "returns plaid form with specified id" do expect(helper.plaid_link_form('myId', plaid_index_path)).to eq('<form id="myId" action="/plaid/index" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" />') end end describe "#plaid_link_script" do it "returns plaid script tag" do expect(helper.plaid_link_script('id', 'name', 'product', 'env', @options)).to eq("<script src=\"https://cdn.plaid.com/link/stable/link-initialize.js\" data-client-name=\"name\" data-form-id=\"id\" data-key=\"key\" data-product=\"product\" data-env=\"env\" data-webhook=\"http://myhook.com\" data-token=\"myToken\">\n//<![CDATA[\n\n//]]>\n</script>") end it "optionally returns plaid script tag with webhook" do @options.delete :webhook expect(helper.plaid_link_script('id', 'name', 'product', 'env', @options)).to eq("<script src=\"https://cdn.plaid.com/link/stable/link-initialize.js\" data-client-name=\"name\" data-form-id=\"id\" data-key=\"key\" data-product=\"product\" data-env=\"env\" data-token=\"myToken\">\n//<![CDATA[\n\n//]]>\n</script>") end it "optionally returns plaid script tag with token" do @options.delete :token expect(helper.plaid_link_script('id', 'name', 'product', 'env', @options)).to eq("<script src=\"https://cdn.plaid.com/link/stable/link-initialize.js\" data-client-name=\"name\" data-form-id=\"id\" data-key=\"key\" data-product=\"product\" data-env=\"env\" data-webhook=\"http://myhook.com\">\n//<![CDATA[\n\n//]]>\n</script>") end end end