require_relative './test_config' require 'projects' describe 'ProjectService' do include Rack::Test::Methods def app HELIX_WEB_SERVICES_APP end it 'passes query parameters to an attach listing method' do captured_details = nil captured_extension = nil capture_stuff = lambda do |details, extension, env| captured_details = details captured_extension = extension [] end Projects::ProjectService.append_to_list << capture_stuff authorize 'jdoe', ticket_for_jdoe get('/projects/v1', {details: true, extension: 'test'}) Projects::ProjectService.append_to_list.delete(capture_stuff) expect(last_response.status).to eq(200) expect(captured_details).to eq('true') expect(captured_extension).to eq('test') end it 'can call back to an extension that returns the project details' do minimal_project = { id: 'project_id', name: 'Test Project', server: 'p4://example.com:1666' } return_minimal = lambda do |project_id, env| return minimal_project if project_id == minimal_project[:id] end Projects::ProjectService.fetch_project << return_minimal authorize 'jdoe', ticket_for_jdoe get('/projects/v1/project_id') Projects::ProjectService.fetch_project.delete(return_minimal) expect(last_response.status).to eq(200) obj = JSON.parse(last_response.body) expect(obj['id']).to eq(minimal_project[:id]) expect(obj['name']).to eq(minimal_project[:name]) expect(obj['server']).to eq(minimal_project[:server]) end end