describe "ProMotion::TableScreen updating functionality" do
  tests PM::UpdateTestTableScreen

  before { UIView.setAnimationDuration 0.01 }

  it 'should update a single row in the table view' do
    table_screen = UpdateTestTableScreen.new
    table_screen.make_more_cells
    table_screen.update_table_data
    table_screen.change_cells

    table_screen.first_cell_title.should == "Cell 1"
    table_screen.second_cell_title.should == "Cell 2"

    table_screen.update_table_data(NSIndexPath.indexPathForRow(0, inSection:0))

    table_screen.first_cell_title.should == "Cell A"
    table_screen.second_cell_title.should == "Cell 2"
  end

  it 'should allow multiple formats of index paths to be passed' do
    table_screen = UpdateTestTableScreen.new
    table_screen.make_more_cells
    table_screen.update_table_data
    table_screen.change_cells

    # Single NSIndexPath
    Proc.new {
      table_screen.update_table_data(NSIndexPath.indexPathForRow(0, inSection:0))
    }.should.not.raise(StandardError)

    # Array of NSIndexPaths
    Proc.new {
      table_screen.update_table_data([NSIndexPath.indexPathForRow(0, inSection:0), NSIndexPath.indexPathForRow(1, inSection:0)])
    }.should.not.raise(StandardError)

    # # Hash with single NSIndexPath
    Proc.new {
      table_screen.update_table_data({index_paths: NSIndexPath.indexPathForRow(0, inSection:0)})
    }.should.not.raise(StandardError)

    # Hash with array of NSIndexPaths
    Proc.new {
      table_screen.update_table_data({index_paths: [NSIndexPath.indexPathForRow(0, inSection:0), NSIndexPath.indexPathForRow(1, inSection:0)]})
    }.should.not.raise(StandardError)

    # Hash with NSIndexPath and row animation
    Proc.new {
      table_screen.update_table_data({index_paths: NSIndexPath.indexPathForRow(0, inSection:0), animation: UITableViewRowAnimationFade})
    }.should.not.raise(StandardError)
  end
end
