2

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 the 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.

1

2 Answers 2

1

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 
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, that's exactly what I was just looking for.
Great, glad it helped, since I've received so much good help and info on this site.
0

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 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.