开发者

RAILS3: Set query parameters to post in functional tests?

开发者 https://www.devze.com 2023-04-08 04:58 出处:网络
I have a Rails3 app that has Workflows, and they have many WorkAssignments. WorkAssignments have a field, work_sent_date, the date work was sent to the person. On th开发者_StackOverflow社区e Workflow

I have a Rails3 app that has Workflows, and they have many WorkAssignments. WorkAssignments have a field, work_sent_date, the date work was sent to the person. On th开发者_StackOverflow社区e Workflow edit screen I display a work sent date field, but Workflow does not have an attribute work_sent_date. If any work assignments have a date, I display the most recent one and it can't be edited. If all are blank, I display a text box that is editable and in WorkflowController#update, if that date is filled it, the work assignments' work_sent_date field get that date.

It works when I test it manually. I suppose I could just create an attribute for it, but I'm trying to be slick and not have redundant data.

I'm trying to write a test for this. First I assert that the WorkAssignment#work_sent_date is blank for all work assignments. Then I try a "post :update" and I can't figure out how to pass in the work_sent_date value, which is a form field but not an attribute. What I want to do is something like.

test "setting work_sent_date in wf sets it in wa" do

  @workflow.work_assignments.each do |wa|
    assert wa.work_sent_date.blank?
  end

  get :edit, :id => @workflow.id
  assert_response :success

  post :update, :workflow => @workflow.attributes, :parameters => {'work_sent_date' => Date.today.to_s}

  @workflow.work_assignments.each do |wa|
    assert_equal(wa.work_sent_date, Date.today)
  end

end

But that parameters field doesn't work. There's no error, but I keep getting failures because wa.work_sent_date is still nil, so it's not getting passed in correctly. How do I pass today's date in as an extra parameter?

(Or maybe there's a better way to do the whole thing, which I would gladly consider.)

I know this is complicated. I hope I explained it well. Any suggestions would be appreciated. I've googled to death and can't find anything.


Found my problem. Syntax way wrong. Here's what it should be. This works.

put :update, :id => @workflow.id, :workflow => @workflow.attributes, :work_sent_date => Date.today.to_s


You can also refactor out the create and edit as follows:

protected
  def edit_workflow(workflow, options = {})
    post :update, :id => workflow.id, :workflow => workflow.attributes.merge(options)
  end

  def create_workflow(options = {})
    post :create, :workflow => {}.merge(options)
  end
end
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号