couchrest_model/spec/couchrest/helpers/file_manager_spec.rb
2009-01-04 22:42:36 -08:00

202 lines
6.4 KiB
Ruby

require File.dirname(__FILE__) + '/../../spec_helper'
describe CouchRest::FileManager do
before(:all) do
@cr = CouchRest.new(COUCHHOST)
@db = @cr.database(TESTDB)
@db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil
end
it "should initialize" do
@fm = CouchRest::FileManager.new(TESTDB)
@fm.should_not be_nil
end
it "should require a db name" do
lambda{CouchRest::FileManager.new}.should raise_error
end
it "should accept a db name" do
@fm = CouchRest::FileManager.new(TESTDB, 'http://127.0.0.1')
@fm.db.name.should == TESTDB
end
it "should default to 127.0.0.1 couchdb" do
@fm = CouchRest::FileManager.new(TESTDB)
@fm.db.host.should == 'http://127.0.0.1:5984'
end
end
describe CouchRest::FileManager, "generating an app" do
before(:all) do
@appdir = FIXTURE_PATH + '/couchapp/template-app'
`rm -rf #{@appdir}`
`mkdir -p #{@appdir}`
CouchRest::FileManager.generate_app(@appdir)
end
it "should create an attachments directory" do
Dir["#{@appdir}/*"].select{|x|x =~ /_attachments/}.length.should == 1
end
it "should create a views directory" do
Dir["#{@appdir}/*"].select{|x|x =~ /views/}.length.should == 1
end
it "should create a foo directory" do
Dir["#{@appdir}/*"].select{|x|x =~ /foo/}.length.should == 1
end
it "should create index.html" do
html = File.open("#{@appdir}/_attachments/index.html").read
html.should match(/DOCTYPE/)
end
it "should create bar.txt" do
html = File.open("#{@appdir}/foo/bar.txt").read
html.should match(/Couchapp will/)
end
it "should create an example view" do
map = File.open("#{@appdir}/views/example/map.js").read
map.should match(/function\(doc\)/)
reduce = File.open("#{@appdir}/views/example/reduce.js").read
reduce.should match(/rereduce/)
end
end
describe CouchRest::FileManager, "pushing an app" do
before(:all) do
@cr = CouchRest.new(COUCHHOST)
@db = @cr.database(TESTDB)
@db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil
@appdir = FIXTURE_PATH + '/couchapp/template-app'
`rm -rf #{@appdir}`
`mkdir -p #{@appdir}`
CouchRest::FileManager.generate_app(@appdir)
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
r = @fm.push_app(@appdir, "couchapp")
end
it "should create a design document" do
lambda{@db.get("_design/couchapp")}.should_not raise_error
end
# it "should create the views" do
# doc = @db.get("_design/couchapp")
# doc['views']['example']['map'].should match(/function/)
# end
# it "should create the index" do
# doc = @db.get("_design/couchapp")
# doc['_attachments']['index.html']["content_type"].should == 'text/html'
# end
# it "should push bar.txt and pals" do
# FileUtils.mkdir_p("#{@appdir}/foo")
# File.open("#{@appdir}/foo/test.json",'w') do |f|
# f.write("[1,2,3,4]")
# end
# r = @fm.push_app(@appdir, "couchapp")
# doc = @db.get("_design/couchapp")
# doc["foo"].should_not be_nil
# doc["foo"]["bar"].should include("Couchapp will")
# doc["foo"]["test"].should == [1,2,3,4]
# end
it "should push json as json" do
File.open("#{@appdir}/test.json",'w') do |f|
f.write("[1,2,3,4]")
end
r = @fm.push_app(@appdir, "couchapp")
doc = @db.get("_design/couchapp")
doc['test'].should == [1,2,3,4]
end
it "handles not having a forms directory" do
`rm -rf #{@appdir}/forms`
lambda { @fm.push_app(@appdir, "couchapp") }.should_not raise_error
`mkdir -p #{@appdir}/forms`
end
end
# describe CouchRest::FileManager, "pushing views" do
# before(:all) do
# @cr = CouchRest.new(COUCHHOST)
# @db = @cr.database(TESTDB)
# @db.delete! rescue nil
# @db = @cr.create_db(TESTDB) rescue nil
#
# @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
# @view_dir = FIXTURE_PATH + '/views'
# ds = @fm.push_views(@view_dir)
# @design = @db.get("_design/test_view")
# end
# it "should create a design document for each folder" do
# @design["views"].should_not be_nil
# end
# it "should push a map and reduce view" do
# @design["views"]["test"]["map"].should_not be_nil
# @design["views"]["test"]["reduce"].should_not be_nil
# end
# it "should push a map only view" do
# @design["views"]["only"]["map"].should_not be_nil
# @design["views"]["only"]["reduce"].should be_nil
# end
# it "should include library files" do
# @design["views"]["only"]["map"].should include("globalLib")
# @design["views"]["only"]["map"].should include("justThisView")
# end
# it "should not create extra design docs" do
# docs = @db.documents(:startkey => '_design', :endkey => '_design/ZZZZZZ')
# docs['total_rows'].should == 1
# end
# end
describe CouchRest::FileManager, "pushing a directory with id" do
before(:all) do
@cr = CouchRest.new(COUCHHOST)
@db = @cr.database(TESTDB)
@db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
@push_dir = FIXTURE_PATH + '/attachments'
ds = @fm.push_directory(@push_dir, 'attached')
end
it "should create a document for the folder" do
@db.get("attached")
end
it "should make attachments" do
doc = @db.get("attached")
doc["_attachments"]["test.html"].should_not be_nil
end
it "should set the content type" do
doc = @db.get("attached")
doc["_attachments"]["test.html"]["content_type"].should == "text/html"
end
end
describe CouchRest::FileManager, "pushing a directory without id" do
before(:all) do
@cr = CouchRest.new(COUCHHOST)
@db = @cr.database(TESTDB)
@db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
@push_dir = FIXTURE_PATH + '/attachments'
ds = @fm.push_directory(@push_dir)
end
it "should use the dirname" do
doc = @db.get("attachments")
doc["_attachments"]["test.html"].should_not be_nil
end
end
describe CouchRest::FileManager, "pushing a directory/ without id" do
before(:all) do
@cr = CouchRest.new(COUCHHOST)
@db = @cr.database(TESTDB)
@db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
@push_dir = FIXTURE_PATH + '/attachments/'
ds = @fm.push_directory(@push_dir)
end
it "should use the dirname" do
doc = @db.get("attachments")
doc["_attachments"]["test.html"].should_not be_nil
end
end