spec/gon/basic_spec.rb in gon-5.1.2 vs spec/gon/basic_spec.rb in gon-5.2.0

- old
+ new

@@ -206,12 +206,104 @@ "\n//]]>\n" + '</script>' ) end + it 'outputs correct js with namespace check' do + expect(@base.include_gon(namespace_check: true)).to eq( \ + '<script type="text/javascript">' + + "\n//<![CDATA[\n" + + 'window.gon=window.gon||{};'\ + "\n//]]>\n" + + '</script>' + ) + end + + it 'outputs correct js without namespace check' do + expect(@base.include_gon(namespace_check: false)).to eq( \ + '<script type="text/javascript">' + + "\n//<![CDATA[\n" + + 'window.gon={};'\ + "\n//]]>\n" + + '</script>' + ) + end + + context "without a current_gon instance" do + + before(:each) do + RequestStore.store[:gon] = nil + allow(Gon).to receive(:current_gon).and_return(nil) + end + + it "does not raise an exception" do + expect { @base.include_gon }.to_not raise_error(Exception) + end + + it 'outputs correct js' do + expect(@base.include_gon).to eq("") + end + + it 'outputs correct js with init' do + expect(@base.include_gon(init: true)).to eq( \ + '<script type="text/javascript">' + + "\n//<![CDATA[\n" + + 'window.gon={};'\ + "\n//]]>\n" + + '</script>' + ) + end + + end + + end + describe '#include_gon_amd' do + + before(:each) do + Gon.clear + Gon::Request. + instance_variable_set(:@request_id, request.object_id) + @base = ActionView::Base.new + @base.request = request + end + + it 'is included in ActionView::Base as a helper' do + expect(ActionView::Base. + instance_methods. + map(&:to_s). + include?('include_gon_amd')).to eq(true) + end + + it 'outputs correct js without variables' do + expect(@base.include_gon_amd).to eq( wrap_script( \ + 'define(\'gon\',[],function(){'+ + 'var gon={};return gon;'+ + '});') + ) + end + + it 'outputs correct js with an integer' do + Gon.int = 1 + + expect(@base.include_gon_amd).to eq( wrap_script( + 'define(\'gon\',[],function(){'+ + 'var gon={};gon[\'int\']=1;return gon;'+ + '});') + ) + end + + it 'outputs correct module name when given a namespace' do + expect(@base.include_gon_amd(namespace: 'data')).to eq(wrap_script( + 'define(\'data\',[],function(){'+ + 'var gon={};return gon;'+ + '});') + ) + end + end + it 'returns exception if try to set public method as variable' do Gon.clear expect { Gon.all_variables = 123 }.to raise_error expect { Gon.rabl = 123 }.to raise_error end @@ -235,8 +327,16 @@ end end def request @request ||= double 'request', :env => {} + end + + def wrap_script(content, type='text/javascript', cdata=true) + script = "<script type=\"#{type}\">" + script << "\n//<![CDATA[\n" if cdata + script << content + script << "\n//]]>\n" if cdata + script << '</script>' end end