diff --git a/app/controllers/targets_controller.rb b/app/controllers/targets_controller.rb
index bf6c766..ef9797f 100644
--- a/app/controllers/targets_controller.rb
+++ b/app/controllers/targets_controller.rb
@@ -53,7 +53,8 @@ class TargetsController < ApplicationController
end
def edit
- @targets = @goal.targets.where(effective_from: params[:effective_from])
+ @targets = @goal.targets.where(effective_from: params[:date]).to_a
+ @effective_from = @targets.first&.effective_from
end
def update
diff --git a/app/views/targets/_edit_form.html.erb b/app/views/targets/_edit_form.html.erb
new file mode 100644
index 0000000..c987643
--- /dev/null
+++ b/app/views/targets/_edit_form.html.erb
@@ -0,0 +1,15 @@
+<%= labelled_form_for @targets,
+ url: project_targets_path(@project, @view_params),
+ method: :patch, remote: true,
+ html: {id: 'edit-target-form', name: 'edit-target-form'} do |f| %>
+
+ <%= render partial: 'targets/form', locals: {f: f} %>
+
+
+
+ <%= submit_tag l(:button_save) %>
+ <%= link_to l(:button_cancel), "#",
+ onclick: '$(this).closest("tr").remove(); return false;' %>
+
+
+<% end %>
diff --git a/app/views/targets/_index.html.erb b/app/views/targets/_index.html.erb
index b53f69d..c5ab8a2 100644
--- a/app/views/targets/_index.html.erb
+++ b/app/views/targets/_index.html.erb
@@ -57,7 +57,7 @@
<% @targets_by_date.each do |date, targets| %>
<% row_class = "date #{cycle('odd', 'even')}" %>
-
+
' +
+ '<%= j render partial: 'targets/edit_form' %>' +
+ ' |
'
+);
diff --git a/config/routes.rb b/config/routes.rb
index 9aaa5ed..2676e03 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -12,9 +12,10 @@ resources :projects, shallow: true do
post 'toggle_exposure', to: 'targets#toggle_exposure'
end
end
- resources :targets, except: [:show, :edit] do
+ resources :targets, except: [:show, :edit, :update] do
collection do
get 'edit/:date', to: 'targets#edit', as: :edit
+ patch :update
post 'reapply/:date', to: 'targets#reapply', as: :reapply
end
end
diff --git a/test/system/targets_test.rb b/test/system/targets_test.rb
index 1639511..a129082 100644
--- a/test/system/targets_test.rb
+++ b/test/system/targets_test.rb
@@ -101,11 +101,36 @@ class TargetsTest < BodyTrackingSystemTestCase
assert_equal @project1.goals.binding, Target.last.goal
end
+ def test_create_multiple_targets
+ end
+
# TODO: test_create_failure(s)
# * restoring user input
# * removing empty targets
- # TODO: test edit and update separately
+ def test_edit
+ target = Target.offset(rand(Target.count)).take
+ visit project_targets_path(@project1)
+ within find('td', text: target.effective_from.strftime).ancestor('tr') do
+ assert_no_selector 'form#edit-target-form'
+ click_link t(:button_edit)
+
+ within find(:xpath, 'following-sibling::*//form[@id="edit-target-form"]') do
+ assert has_select?(t(:field_goal), selected: target.goal.name)
+ assert has_field?(t(:field_effective_from), with: target.effective_from.strftime)
+
+ threshold = target.thresholds.first
+ within find('select option[selected]', exact_text: threshold.quantity.name)
+ .ancestor('p') do
+ assert has_select?(selected: target.condition)
+ assert has_field?(with: threshold.value)
+ assert has_select?(selected: threshold.unit.shortname)
+ end
+ end
+ end
+ assert_selector 'form#edit-target-form', count: 1
+ end
+
def test_update
visit project_targets_path(@project1)
within 'table#targets tbody tr' do