files_controller_spec.rb revision 6d7c847f432955f15fc9556a55a5402c9290a465
89a126810703c666309310d0f3189e9834d70b5bTimo Sirainenrequire 'spec_helper'
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainendescribe FilesController do
9a583c7a827f7a4d89ee43774f2d51ea6a214543Timo Sirainen
16f816d3f3c32ae3351834253f52ddd0212bcbf3Timo Sirainen describe 'iri ontology route' do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen let!(:dist_ontology){ create :heterogeneous_ontology }
1098fc409a45e7603701dc94635927a673bee0c1Timo Sirainen let!(:repository){ dist_ontology.repository }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen let!(:do_child){ dist_ontology.children.first }
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen before do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Repository.any_instance.stubs(:path_info).returns({
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen type: :file_base,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen entry: {path: dist_ontology.basepath }
fd2f5fbc1f07aa93e2214a28cdf02437fb7d06c8Timo Sirainen })
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @request.query_string = do_child.name
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen get :files, repository_id: repository.path, path: dist_ontology.name
dd0ba1bab2c1b89c7e063fa45d156fa72b8260d5Timo Sirainen end
dd0ba1bab2c1b89c7e063fa45d156fa72b8260d5Timo Sirainen
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen after do
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen Repository.any_instance.unstub(:path_info)
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen end
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen context 'should allow us to get to a do-child' do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it { should respond_with :redirect }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it { should redirect_to repository_ontology_path(repository, do_child) }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen describe "repository" do
e9f2d9104d395bcf54be3f8ba8d9f63aecf0bcbeTimo Sirainen let!(:repository){ create :repository }
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen describe "files" do
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen before { get :files, repository_id: repository.to_param }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it { should respond_with :success }
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen it { should render_template :files }
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen end
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
df6478c4cf605bd81b3891c148b84c14eb6c4035Timo Sirainen describe "signed in with write access" do
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen let(:user){ create(:permission, item: repository).subject }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen before { sign_in user }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
e1f05b193ac1edd3267294e9501e8063aa0f791aTimo Sirainen describe "new" do
e1f05b193ac1edd3267294e9501e8063aa0f791aTimo Sirainen before { get :new, repository_id: repository.to_param }
e1f05b193ac1edd3267294e9501e8063aa0f791aTimo Sirainen it { should respond_with :success }
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen end
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen describe "create" do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen describe "without file" do
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen before { post :create, repository_id: repository.to_param }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it { should respond_with :success }
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen end
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen describe "with file" do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen before {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen post :create, repository_id: repository.to_param, upload_file: {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen target_directory: 'my_dir',
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen target_filename: 'my_file',
91dca97b367c54a139c268b56a0c67f564bd9197Timo Sirainen message: 'commit message',
ee26329cb5cc679b5645e4933d529f86accb976aTimo Sirainen file: Rack::Test::UploadedFile.new(Rails.root.join('test','fixtures','ontologies','owl','pizza.owl'),'image/jpg')
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen }
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen }
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen it { should respond_with :redirect }
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen end
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen end
72cbf33ae81fde08384d30c779ff540752d9256cTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen describe "update" do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen describe "with existing file" do
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen let(:filepath) { "existing-file" }
1a5fcc972dbadfe7959011b8ad422707e2dfc19fTimo Sirainen let(:tmp_filepath) { Rails.root.join('tmp', filepath) }
1a5fcc972dbadfe7959011b8ad422707e2dfc19fTimo Sirainen let(:message) { "message" }
df6478c4cf605bd81b3891c148b84c14eb6c4035Timo Sirainen
df6478c4cf605bd81b3891c148b84c14eb6c4035Timo Sirainen before do
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen FileUtils.rm_rf(tmp_filepath)
cfbf891f065b18602703ed6fa2af1a541d4d0b04Timo Sirainen File.open(tmp_filepath, 'w+') { |f| f.write("unchanged") }
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen
e9f2d9104d395bcf54be3f8ba8d9f63aecf0bcbeTimo Sirainen repository.save_file_only(tmp_filepath, filepath, message, user)
e9f2d9104d395bcf54be3f8ba8d9f63aecf0bcbeTimo Sirainen end
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen describe "without validation error" do
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen before do
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen post :update,
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen repository_id: repository.to_param,
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen path: filepath,
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen message: message,
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen content: "changed"
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen end
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen it { should respond_with :found }
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen it "should not show an error" do
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen expect(flash[:error]).to be_nil
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen it "should show a success message" do
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen expect(flash[:success]).not_to be_nil
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen end
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen end
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen describe "with validation error" do
ca316aeb7648d3f1bcf45231f73ddeb1b67a6961Timo Sirainen before do
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen post :update,
6f73af3a3a6ee900c7e736874587968d76a20bc0Timo Sirainen repository_id: repository.to_param,
50c4a9739b55370b1d3950d7b3ec2f7cd2ed5f49Timo Sirainen path: filepath,
0f66f12eb4cdbf47670975044c88d8f388bf92dfTimo Sirainen content: "changed"
e9f2d9104d395bcf54be3f8ba8d9f63aecf0bcbeTimo Sirainen end
e9f2d9104d395bcf54be3f8ba8d9f63aecf0bcbeTimo Sirainen
6cd02a9525acb9897a65b05bfeee9b8d283e0f74Timo Sirainen it { should respond_with :success }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen it "should show an error" do
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen expect { flash[:error].messages[:message] }.not_to be_nil
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it "should not show a success message" do
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen expect(flash[:success]).to be_nil
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen describe "with non-existent file" do
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen let(:filepath) { "non-existent-file" }
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen before do
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen post :update,
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen repository_id: repository.to_param,
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen path: filepath,
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen message: "message",
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen content: "changed"
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it { should respond_with :found }
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it "should not show an error" do
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen expect(flash[:error]).to be_nil
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it "should show a success message" do
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen expect(flash[:success]).not_to be_nil
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it "should have added a file" do
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen expect(repository.path_exists? filepath).to be_true
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen it "should actually not have added a file" do
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen pending "this should be another controller action"
a2ce2eb4c266e2854fd34416ea5cfbe05dfd3971Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen end
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainenend
b159b7fb9740b6e37238016d8395a351de498d50Timo Sirainen