require 'spec_helper' require_relative '../../../../../lib/locomotive/steam/adapters/filesystem/sanitizer.rb' require_relative '../../../../../lib/locomotive/steam/adapters/filesystem/sanitizers/site.rb' describe Locomotive::Steam::Adapters::Filesystem::Sanitizers::Site do let(:schema) { nil } let(:entity) { instance_double('SiteEntity', metafields_schema: schema) } let(:sanitizer) { described_class.new } describe '#apply_to_entity' do subject { sanitizer.apply_to_entity(entity) } it { expect(entity).to receive(:metafields_schema=).with(nil); subject } end describe '#clean_metafields_schema' do subject { sanitizer.send(:clean_metafields_schema, schema) } it { is_expected.to eq nil } describe 'with a schema' do # see the metafields_schema.yml in the fixtures folder let(:schema) { { :social => { :label => { :fr=>"Social (FR)" }, :position => 1, :fields => ["facebook_id", "google_id"] }, :github => { :position => 0, :fields => { :api_url => { :label => "API Url", :type => "string", :hint => "API endpoint" }, :expires_in => { :label => { :en => "Expires in", :fr => "Expire dans" }, :hint => { :en => "Cache - In milliseconds", :fr => "Cache - En millisecondes" }, :type => "integer", :min => 0, :max => 3600 } } }, :theme => { :fields => [ { :color => { :label => 'Color', type: 'color' } }, { :header => { :label => 'Header image', type: 'image' } } ] } } } it 'loads the full schema' do # First namespace expect(subject[0]['name']).to eq 'social' expect(subject[0]['label']).to eq('fr' => 'Social (FR)') expect(subject[0]['position']).to eq 1 expect(subject[0]['fields']).to eq([{ 'name' => 'facebook_id', 'position' => 0 }, { 'name' => 'google_id', 'position' => 1 }]) # Second namespace expect(subject[1]['label']).to eq('default' => 'github') expect(subject[1]['position']).to eq 0 expect(subject[1]['fields'].count).to eq 2 expect(subject[1]['fields'][0]).to eq('name' => 'api_url', 'position' => 0, 'label' => { 'default' => 'API Url' }, 'type' => 'string', 'hint' => { 'default' => 'API endpoint' }) # Third namespace expect(subject[2]['label']).to eq('default' => 'theme') expect(subject[2]['fields'].count).to eq 2 expect(subject[2]['fields'][0]).to eq('name' => 'color', 'position' => 0, 'label' => { 'default' => 'Color' }, 'type' => 'color') expect(subject[2]['fields'][1]).to eq('name' => 'header', 'position' => 1, 'label' => { 'default' => 'Header image' }, 'type' => 'image') end context 'label is a string instead of a hash' do let(:schema) { {:social=>{:label=>"Social", :position=>1, :fields=>["facebook_id", "google_id"]}, :github=>{:position=>0, :fields=>{:api_url=>{:label=>"API Url", :type=>"string", :hint=>"API endpoint"}, :expires_in=>{:label=>{:en=>"Expires in", :fr=>"Expire dans"}, :hint=>{:en=>"Cache - In milliseconds", :fr=>"Cache - En millisecondes"}, :type=>"integer", :min=>0, :max=>3600}}}} } it 'loads the full schema' do expect(subject[0]['label']).to eq('default' => 'Social') end end end end end