require_relative 'spec_helper' include GivenFilesystemSpecHelpers describe Cli do use_given_filesystem before(:each) do Cli.settings = Settings.new( File.expand_path('../../data/trollolorc_with_board_aliases', __FILE__)) @cli = Cli.new end it 'fetches burndown data from board-list' do full_board_mock dir = given_directory @cli.options = {'board-list' => 'spec/data/board-list.yaml', 'output' => dir} @cli.burndowns expect(File.exist?(File.join(dir, 'orange/burndown-data-01.yaml'))) expect(File.exist?(File.join(dir, 'blue/burndown-data-01.yaml'))) end it 'backups board' do expect_any_instance_of(Backup).to receive(:backup) @cli.options = {'board-id' => '1234'} @cli.backup end it 'backups board using an alias' do expect_any_instance_of(Backup).to receive(:backup) @cli.options = {'board-id' => 'MyTrelloBoard'} @cli.backup end it 'gets lists' do full_board_mock @cli.options = {'board-id' => '53186e8391ef8671265eba9d'} expected_output = < 'MyTrelloBoard'} expect do @cli.get_lists end.to output(expected_output).to_stdout end it 'gets cards' do full_board_mock @cli.options = {'board-id' => '53186e8391ef8671265eba9d'} expected_output = < 'MyTrelloBoard'} expect do @cli.get_cards end.to output(expected_output).to_stdout end it 'gets checklists' do full_board_mock @cli.options = {'board-id' => '53186e8391ef8671265eba9d'} expected_output = < 'MyTrelloBoard'} expect do @cli.get_checklists end.to output(expected_output).to_stdout end it 'gets description' do body = <<-EOT { "id": "54ae8485221b1cc5b173e713", "desc": "haml" } EOT stub_request( :get, 'https://api.trello.com/1/cards/54ae8485221b1cc5b173e713?key=mykey&token=mytoken' ).with( headers: { 'Accept' => '*/*; q=0.5, application/xml', 'Accept-Encoding' => 'gzip, deflate', 'User-Agent' => 'Ruby' } ).to_return(status: 200, body: body, headers: {}) @cli.options = {'card-id' => '54ae8485221b1cc5b173e713'} expected_output = "haml\n" expect do @cli.get_description end.to output(expected_output).to_stdout end it 'sets description' do expect(STDIN).to receive(:read).and_return('My description') stub_request( :put, 'https://api.trello.com/1/cards/54ae8485221b1cc5b173e713/desc?key=mykey&token=mytoken&value=My%20description' ).with( headers: { 'Accept' => '*/*; q=0.5, application/xml', 'Accept-Encoding' => 'gzip, deflate', 'Content-Length' => '0', 'Content-Type' => 'application/x-www-form-urlencoded', 'User-Agent' => 'Ruby' } ).to_return(status: 200, body: '', headers: {}) @cli.options = {'card-id' => '54ae8485221b1cc5b173e713'} @cli.set_description expect(WebMock).to have_requested(:put, 'https://api.trello.com/1/cards/54ae8485221b1cc5b173e713/desc?key=mykey&token=mytoken&value=My%20description') end it 'sets priorities for default planning list', vcr: 'prioritize_backlog_list', vcr_record: false do @cli.options = {'board-id' => 'neUHHzDo'} expected_output = <<-EOT set priority to 1 for "P1: (2) Document how to run cf-openstack-validator on SUSE" set priority to 2 for "P2: Etymologie von Foo" set priority to 3 for "P3: (3) Set up Concourse pipeline for stemcell building" set priority to 4 for "P4: (6) Build #stemcell in containers &sort=123" set priority to 5 for "P5: (2) Document how to run cf-openstack-validator on SUSE" set priority to 6 for "P6: (3) Set up Concourse pipeline for os image building" set priority to 7 for "P7: (3) Set up Concourse pipeline for stemcell building" set priority to 8 for "P8: (6) Build stemcell in containers" set priority to 9 for "P9: (3) Set up Concourse pipeline for BATs" set priority to 10 for "P10: seabed" set priority to 11 for "P11: (3) Set up Concourse pipeline for BATs" set priority to 12 for "P12: Bike Shedding Feature" set priority to 13 for "P13: (3) Set up Concourse pipeline for os image building" EOT expect do @cli.set_priorities end.to output(expected_output).to_stdout end it 'sets priorities for specified planning list', vcr: 'prioritize_backlog_list', vcr_record: false do @cli.options = {'board-id' => 'neUHHzDo', 'backlog-list-name' => 'Nonexisting List'} expect do @cli.set_priorities end.to raise_error /'Nonexisting List' not found/ end context '#board_id' do before do Cli.settings = Settings.new( File.expand_path('../../data/trollolorc_with_board_aliases', __FILE__)) @cli = Cli.new end it 'returns the id when no alias exists' do expect(@cli.send(:board_id, '1234')).to eq('1234') end it 'return the id when an alias exists' do expect(@cli.send(:board_id, 'MyTrelloBoard')).to eq('53186e8391ef8671265eba9d') end end end