Simulate Ajax Server Hits with xhr :get

If we double-click on that DIV, Ajax.Updater calls /wiki/-edit_node, and that doesn't work yet. So now test-first its behavior. It should return a FORM to edit this DIV:

  def test_wiki_yaml_action
    yaml_to_xhtml(get_omap)

    xhr :get,
        :edit_node,
        :page_name => 'WikiTestPage',
        :ypath => 'node:test_uncle_wiggily:script'

    assert_xml @response.body

    assert_xpath '/form' do
      assert_xpath 'textarea[ @name = "node_contents" ]' do |node|
        assert_match /tests uncle wiggily/, node.text
      end
    end
  end

GUI Bug Confession

Our DIV responds to double-clicks, even after the editor displays. So double-clicking a word to select it will refresh the DIV, and throw our edits away! The fix is edit_node, which should send more JavaScript that erases the ondblclick attribute.

The test requires our WikiController to grow its very first method:

class WikiController < ApplicationController

  def edit_node
    yar = YarWiki.new(params[:page_name])
    y = YAML.parse_file(yar.yaml_path)
    x = Builder::XmlMarkup.new
    params[:ypath] =~ /^node(:.*)/
    ypath = $1.gsub(':', '//')

    x.form do
      x.textarea :name   => 'node_contents',
                 :cols   => 60,
                 :rows   => 3 do
        x.text! y.select(ypath)[0].value
      end
    end

    render :text => x.target!
  end
end

Ajax Action Guards

All actions that serve Ajax should start with:

  return unless (request.xhr? or RAILS_ENV != 'production')

This prevents everyone from calling that action except Ajax events and tests. (I have omitted them in the interest of space.)

That code had to reconstitute an HTML ...

Get Test Driven Ajax (on Rails) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.