Skip to content

Commit

Permalink
files are in fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
GBH committed Jul 9, 2013
1 parent c6933bc commit c015cc5
Show file tree
Hide file tree
Showing 14 changed files with 195 additions and 14 deletions.
4 changes: 2 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'jdbc-sqlite3', :platform => :jruby
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby

gem 'coveralls', :require => false
gem 'mocha', :require => false
gem 'coveralls', :require => false
end
2 changes: 1 addition & 1 deletion app/models/cms/block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Cms::Block < ActiveRecord::Base
def tag
@tag ||= page.tags(true).detect{|t| t.is_cms_block? && t.identifier == identifier}
end

protected

def prepare_files
Expand Down
5 changes: 5 additions & 0 deletions db/cms_fixtures/sample-site/files/_sample.jpg.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
label: Fixture File
description: Fixture Description
categories:
- category_a
- category_b
Binary file added db/cms_fixtures/sample-site/files/sample.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions lib/comfortable_mexican_sofa.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
require_relative 'comfortable_mexican_sofa/fixture/layout'
require_relative 'comfortable_mexican_sofa/fixture/page'
require_relative 'comfortable_mexican_sofa/fixture/snippet'
require_relative 'comfortable_mexican_sofa/fixture/file'
require_relative 'comfortable_mexican_sofa/extensions/rails'
require_relative 'comfortable_mexican_sofa/extensions/acts_as_tree'
require_relative 'comfortable_mexican_sofa/extensions/has_revisions'
Expand Down
8 changes: 5 additions & 3 deletions lib/comfortable_mexican_sofa/fixture.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ def initialize(from, to = from, force_import = false)
self.force_import = force_import

dir = self.class.name.split('::')[2].downcase.pluralize
self.path = File.join(ComfortableMexicanSofa.config.fixtures_path, from, dir, '/')
self.path = ::File.join(ComfortableMexicanSofa.config.fixtures_path, from, dir, '/')
end

def fresh_fixture?(object, file_path)
object.new_record? || self.force_import || File.mtime(file_path) > object.updated_at
object.new_record? || self.force_import || ::File.mtime(file_path) > object.updated_at
end

def get_attributes(file_path)
Expand All @@ -39,6 +39,7 @@ def save_categorizations!(object, categories)

def import!
ComfortableMexicanSofa::Fixture::Category::Importer.new(from, to, force_import).import!
ComfortableMexicanSofa::Fixture::File::Importer.new( from, to, force_import).import!
ComfortableMexicanSofa::Fixture::Layout::Importer.new( from, to, force_import).import!
ComfortableMexicanSofa::Fixture::Page::Importer.new( from, to, force_import).import!
ComfortableMexicanSofa::Fixture::Snippet::Importer.new( from, to, force_import).import!
Expand All @@ -56,7 +57,7 @@ def initialize(from, to = from)
self.to = to
self.site = Cms::Site.where(:identifier => from).first!
dir = self.class.name.split('::')[2].downcase.pluralize
self.path = File.join(ComfortableMexicanSofa.config.fixtures_path, to, dir)
self.path = ::File.join(ComfortableMexicanSofa.config.fixtures_path, to, dir)
end

def prepare_folder!(path)
Expand All @@ -65,6 +66,7 @@ def prepare_folder!(path)
end

def export!
ComfortableMexicanSofa::Fixture::File::Exporter.new( from, to).export!
ComfortableMexicanSofa::Fixture::Category::Exporter.new(from, to).export!
ComfortableMexicanSofa::Fixture::Layout::Exporter.new( from, to).export!
ComfortableMexicanSofa::Fixture::Page::Exporter.new( from, to).export!
Expand Down
70 changes: 70 additions & 0 deletions lib/comfortable_mexican_sofa/fixture/file.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
module ComfortableMexicanSofa::Fixture::File
class Importer < ComfortableMexicanSofa::Fixture::Importer
def import!
Dir["#{self.path}[^_]*"].each do |file_path|
filename = ::File.basename(file_path)
file = self.site.files.where(:file_file_name => filename).first || self.site.files.new

# setting attributes
categories = []
if File.exists?(attrs_path = File.join(self.path, "_#{filename}.yml"))
if fresh_fixture?(file, attrs_path)
attrs = get_attributes(attrs_path)
file.label = attrs['label']
file.description = attrs['description']
categories = attrs['categories']
end
end

# setting actual file
if fresh_fixture?(file, file_path)
file.file = open(file_path)
end

if file.changed? || self.force_import
if file.save
save_categorizations!(file, categories)
ComfortableMexicanSofa.logger.warn("[FIXTURES] Imported File \t #{file.file_file_name}")
else
ComfortableMexicanSofa.logger.warn("[FIXTURES] Failed to import File \n#{file.errors.inspect}")
end
end

self.fixture_ids << file.id
end

# cleaning up
self.site.files.where('id NOT IN (?)', fixture_ids).each{ |s| s.destroy }
end
end

class Exporter < ComfortableMexicanSofa::Fixture::Exporter
def export!
prepare_folder!(self.path)

self.site.files.each do |file|
file_path = File.join(self.path, file.file_file_name)

# writing attributes
open(::File.join(self.path, "_#{file.file_file_name}.yml"), 'w') do |f|
f.write({
'label' => file.label,
'description' => file.description,
'categories' => file.categories.map{|c| c.label}
}.to_yaml)
end

# writing content
data_path = file.file.options[:storage] == :filesystem ?
file.file.path :
file.file.url

open(::File.join(self.path, ::File.basename(file_path)), 'w') do |f|
f.write(open(data_path))
end

ComfortableMexicanSofa.logger.warn("[FIXTURES] Exported File \t #{file.file_file_name}")
end
end
end
end
4 changes: 2 additions & 2 deletions test/fixtures/cms/files.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
default:
site: default
block:
label: Sample
label: Default File
file_file_name: sample.jpg
file_content_type: image/jpeg
file_file_size: 20099
description: Description
description: Default Description
position: 0
3 changes: 2 additions & 1 deletion test/gemfiles/Gemfile.rails.3.1
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'jdbc-sqlite3', :platform => :jruby
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
gem 'coveralls', :require => false
gem 'mocha', :require => false
gem 'coveralls', :require => false
end
3 changes: 2 additions & 1 deletion test/gemfiles/Gemfile.rails.3.2
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'jdbc-sqlite3', :platform => :jruby
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
gem 'coveralls', :require => false
gem 'coveralls', :require => false
gem 'mocha', :require => false
end
1 change: 1 addition & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
ENV['RAILS_ENV'] = 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'mocha/setup'

# No need to add cache-busters in test environment
Paperclip::Attachment.default_options[:use_timestamp] = false
Expand Down
Empty file.
100 changes: 100 additions & 0 deletions test/unit/fixtures/files_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# encoding: utf-8

require_relative '../../test_helper'

class FixtureFilesTest < ActiveSupport::TestCase

def test_creation
Cms::File.delete_all

assert_difference 'Cms::File.count' do
ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site').import!
assert file = Cms::File.last

assert_equal 'Fixture File', file.label
assert_equal 'sample.jpg', file.file_file_name
assert_equal 'Fixture Description', file.description

assert_equal 2, file.categories.count
assert_equal ['category_a', 'category_b'], file.categories.map{|c| c.label}
end
end

def test_update
file = cms_files(:default)
file.update_column(:updated_at, 10.years.ago)
assert_equal 'sample.jpg', file.file_file_name
assert_equal 'Default File', file.label
assert_equal 'Default Description', file.description

assert_no_difference 'Cms::Snippet.count' do
ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site').import!
file.reload
assert_equal 'sample.jpg', file.file_file_name
assert_equal 'Fixture File', file.label
assert_equal 'Fixture Description', file.description
end
end

def test_update_ignore
file = cms_files(:default)
file_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'sample-site', 'files', 'sample.jpg')
attr_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'sample-site', 'files', '_sample.jpg.yml')

assert file.updated_at >= File.mtime(file_path)
assert file.updated_at >= File.mtime(attr_path)

ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site').import!
file.reload
assert_equal 'sample.jpg', file.file_file_name
assert_equal 'Default File', file.label
assert_equal 'Default Description', file.description
end

def test_update_force
file = cms_files(:default)
ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site').import!
file.reload
assert_equal 'Default File', file.label

ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site', :forced).import!
file.reload
assert_equal 'Fixture File', file.label
end

def test_delete
old_file = cms_files(:default)
old_file.update_column(:file_file_name, 'old')

assert_no_difference 'Cms::File.count' do
ComfortableMexicanSofa::Fixture::File::Importer.new('sample-site', 'default-site').import!
assert file = Cms::File.last
assert_equal 'sample.jpg', file.file_file_name
assert_equal 'Fixture File', file.label
assert_equal 'Fixture Description', file.description

assert Cms::File.where(:id => old_file.id).blank?
end
end

def test_export
host_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'test-site')
attr_path = File.join(host_path, 'files/_sample.jpg.yml')
file_path = File.join(host_path, 'files/sample.jpg')

Paperclip::Attachment.any_instance.stubs(:path).
returns(File.join(Rails.root, 'db/cms_fixtures/sample-site/files/sample.jpg'))
ComfortableMexicanSofa::Fixture::File::Exporter.new('default-site', 'test-site').export!

assert File.exists?(attr_path)
assert File.exists?(file_path)
assert_equal ({
'label' => 'Default File',
'description' => 'Default Description',
'categories' => ['Default']
}), YAML.load_file(attr_path)

FileUtils.rm_rf(host_path)
end

end
8 changes: 4 additions & 4 deletions test/unit/fixtures/snippets_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ def test_update
end

def test_delete
snippet = cms_snippets(:default)
snippet.update_column(:identifier, 'old')
old_snippet = cms_snippets(:default)
old_snippet.update_column(:identifier, 'old')

assert_no_difference 'Cms::Snippet.count' do
ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
Expand All @@ -45,7 +45,7 @@ def test_delete
assert_equal 'Default Fixture Snippet', snippet.label
assert_equal 'Fixture Content for Default Snippet', snippet.content

assert_nil Cms::Snippet.find_by_identifier('old')
assert_nil Cms::Snippet.where(:id => old_snippet.id).first
end
end

Expand Down Expand Up @@ -76,7 +76,7 @@ def test_update_force
assert_equal 'Default Fixture Snippet', snippet.label
end

def test_export_snippets
def test_export
cms_categories(:default).categorizations.create!(
:categorized => cms_snippets(:default)
)
Expand Down

0 comments on commit c015cc5

Please sign in to comment.